विक्षनरी hiwiktionary https://hi.wiktionary.org/wiki/%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0 MediaWiki 1.47.0-wmf.18 case-sensitive मीडिया विशेष वार्ता सदस्य सदस्य वार्ता विक्षनरी विक्षनरी वार्ता चित्र चित्र वार्ता मीडियाविकि मीडियाविकि वार्ता साँचा साँचा वार्ता सहायता सहायता वार्ता श्रेणी श्रेणी वार्ता TimedText TimedText talk मॉड्यूल मॉड्यूल वार्ता Event Event talk श्रेणी:असमिया भाषा 14 124844 487540 461511 2026-09-01T13:11:54Z SM7 6218 SM7 ने पृष्ठ [[श्रेणी:असमिया]] को [[श्रेणी:असमिया भाषा]] पर स्थानांतरित किया: पूरा नाम विक्षनरी के अनुरूप है 461511 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 487542 487540 2026-09-01T13:13:33Z SM7 6218 + auto cat 487542 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx 487543 487542 2026-09-01T13:17:31Z SM7 6218 देश जोड़े जहाँ यह भाषा प्रमुख रूप से बोली जाती है 487543 wikitext text/x-wiki {{auto cat|भारत|बांग्लादेश|भूटान}} ech6ycj46nl9kn4f07llbv0xv77jl9r मॉड्यूल:links 828 136966 487608 478041 2026-09-01T18:26:33Z SM7 6218 updating...BIG / tried to retain old localizations; not sure about "term"-"टर्म" 487608 Scribunto text/plain local export = {} --[=[ [[Unsupported titles]], pages with high memory usage, extraction modules and part-of-speech names are listed at [[Module:links/data]]. Other modules used: [[Module:script utilities]] [[Module:scripts]] [[Module:languages]] and its submodules [[Module:gender and number]] [[Module:debug/track]] ]=] local anchors_module = "Module:anchors" local debug_track_module = "Module:debug/track" local form_of_module = "Module:form of" local gender_and_number_module = "Module:gender and number" local languages_module = "Module:languages" local load_module = "Module:load" local memoize_module = "Module:memoize" local pages_module = "Module:pages" local pron_qualifier_module = "Module:pron qualifier" local scripts_module = "Module:scripts" local script_utilities_module = "Module:script utilities" local string_encode_entities_module = "Module:string/encode entities" local string_utilities_module = "Module:string utilities" local table_module = "Module:table" local utilities_module = "Module:utilities" local concat = table.concat local find = string.find local get_current_title = mw.title.getCurrentTitle local insert = table.insert local ipairs = ipairs local match = string.match local new_title = mw.title.new local pairs = pairs local remove = table.remove local sub = string.sub local toNFC = mw.ustring.toNFC local tostring = tostring local type = type local unstrip = mw.text.unstrip local NAMESPACE = get_current_title().nsText local function anchor_encode(...) anchor_encode = require(memoize_module)(mw.uri.anchorEncode, true) return anchor_encode(...) end local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local function decode_entities(...) decode_entities = require(string_utilities_module).decode_entities return decode_entities(...) end local function decode_uri(...) decode_uri = require(string_utilities_module).decode_uri return decode_uri(...) end -- Can't yet replace, as the [[Module:string utilities]] version no longer has automatic double-encoding prevention, which requires changes here to account for. local function encode_entities(...) encode_entities = require(string_encode_entities_module) return encode_entities(...) end local function extend(...) extend = require(table_module).extend return extend(...) end local function find_best_script_without_lang(...) find_best_script_without_lang = require(scripts_module).findBestScriptWithoutLang return find_best_script_without_lang(...) end local function format_categories(...) format_categories = require(utilities_module).format_categories return format_categories(...) end local function format_genders(...) format_genders = require(gender_and_number_module).format_genders return format_genders(...) end local function format_qualifiers(...) format_qualifiers = require(pron_qualifier_module).format_qualifiers return format_qualifiers(...) end local function get_current_L2(...) get_current_L2 = require(pages_module).get_current_L2 return get_current_L2(...) end local function get_lang(...) get_lang = require(languages_module).getByCode return get_lang(...) end local function get_script(...) get_script = require(scripts_module).getByCode return get_script(...) end local function language_anchor(...) language_anchor = require(anchors_module).language_anchor return language_anchor(...) end local function load_data(...) load_data = require(load_module).load_data return load_data(...) end local function request_script(...) request_script = require(script_utilities_module).request_script return request_script(...) end local function shallow_copy(...) shallow_copy = require(table_module).shallowCopy return shallow_copy(...) end local function split(...) split = require(string_utilities_module).split return split(...) end local function tag_text(...) tag_text = require(script_utilities_module).tag_text return tag_text(...) end local function tag_translit(...) tag_translit = require(script_utilities_module).tag_translit return tag_translit(...) end local function trim(...) trim = require(string_utilities_module).trim return trim(...) end local function u(...) u = require(string_utilities_module).char return u(...) end local function ulower(...) ulower = require(string_utilities_module).lower return ulower(...) end local function umatch(...) umatch = require(string_utilities_module).match return umatch(...) end local m_headword_data local function get_headword_data() m_headword_data = load_data("Module:headword/data") return m_headword_data end local function track(page, code) local tracking_page = "links/" .. page debug_track(tracking_page) if code then debug_track(tracking_page .. "/" .. code) end end local function selective_trim(...) -- Unconditionally trimmed charset. local always_trim = "\194\128-\194\159" .. -- U+0080-009F (C1 control characters) "\194\173" .. -- U+00AD (soft hyphen) "\226\128\170-\226\128\174" .. -- U+202A-202E (directionality formatting characters) "\226\129\166-\226\129\169" -- U+2066-2069 (directionality formatting characters) -- Standard trimmed charset. local standard_trim = "%s" .. -- (default whitespace charset) "\226\128\139-\226\128\141" .. -- U+200B-200D (zero-width spaces) always_trim -- If there are non-whitespace characters, trim all characters in `standard_trim`. -- Otherwise, only trim the characters in `always_trim`. selective_trim = function(text) if text == "" then return text end local trimmed = trim(text, standard_trim) if trimmed ~= "" then return trimmed end return trim(text, always_trim) end return selective_trim(...) end local function escape(text, str) local rep repeat text, rep = text:gsub("\\\\(\\*" .. str .. ")", "\5%1") until rep == 0 return (text:gsub("\\" .. str, "\6")) end local function unescape(text, str) return (text :gsub("\5", "\\") :gsub("\6", str)) end -- Remove bold, italics, soft hyphens, strip markers and HTML tags. local function remove_formatting(str) str = str :gsub("('*)'''(.-'*)'''", "%1%2") :gsub("('*)''(.-'*)''", "%1%2") :gsub("­", "") return (unstrip(str) :gsub("<[^<>]+>", "")) end --[==[Takes an input and splits on a double slash (taking account of escaping backslashes).]==] function export.split_on_slashes(text) if text:find("\\", nil, true) then track("escaped", "split_on_slashes") end text = split(escape(text, "//"), "//", true) or {} for i, v in ipairs(text) do text[i] = unescape(v, "//") if v == "" then text[i] = false end end return text end --[==[Takes a wikilink and outputs the link target and display text. By default, the link target will be returned as a title object, but if `allow_bad_target` is set it will be returned as a string, and no check will be performed as to whether it is a valid link target.]==] function export.get_wikilink_parts(text, allow_bad_target) -- TODO: replace `allow_bad_target` with `allow_unsupported`, with support for links to unsupported titles, including escape sequences. if ( -- Filters out anything but "[[...]]" with no intermediate "[[" or "]]". not match(text, "^()%[%[") or -- Faster than sub(text, 1, 2) ~= "[[". find(text, "[[", 3, true) or find(text, "]]", 3, true) ~= #text - 1 ) then return nil, nil end local pipe, title, display = find(text, "|", 3, true) if pipe then title, display = sub(text, 3, pipe - 1), sub(text, pipe + 1, -3) else title = sub(text, 3, -3) display = title end if allow_bad_target then return title, display end title = new_title(title) -- No title object means the target is invalid. if title == nil then return nil, nil -- If the link target starts with "#" then mw.title.new returns a broken -- title object, so grab the current title and give it the correct fragment. elseif title.prefixedText == "" then local fragment = title.fragment if fragment == "" then -- [[#]] isn't valid return nil, nil end title = get_current_title() title.fragment = fragment end return title, display end -- Does the work of export.get_fragment, but can be called directly to avoid unnecessary checks for embedded links. local function get_fragment(text) text = escape(text, "#") -- Replace numeric character references with the corresponding character (&#39; → '), -- as they contain #, which causes the numeric character reference to be -- misparsed (wa'a → wa&#39;a → pagename wa&, fragment 39;a). text = decode_entities(text) local target, fragment = text:match("^(.-)#(.+)$") target = target or text target = unescape(target, "#") fragment = fragment and unescape(fragment, "#") return target, fragment end --[==[Takes a link target and outputs the actual target and the fragment (if any).]==] function export.get_fragment(text) if text:find("\\", nil, true) then track("escaped", "get_fragment") end -- If there are no embedded links, process input. local open = find(text, "[[", nil, true) if not open then return get_fragment(text) end local close = find(text, "]]", open + 2, true) if not close then return get_fragment(text) -- If there is one, but it's redundant (i.e. encloses everything with no pipe), remove and process. elseif open == 1 and close == #text - 1 and not find(text, "|", 3, true) then return get_fragment(sub(text, 3, -3)) end -- Otherwise, return the input. return text end --[==[ Given a link target as passed to `full_link()`, get the actual page that the target refers to. This removes bold, italics, strip markets and HTML; calls `makeEntryName()` for the language in question; converts targets beginning with `*` to the Reconstruction namespace; and converts appendix-constructed languages to the Appendix namespace. Returns up to three values: # the actual page to link to, or {nil} to not link to anything; # how the target should be displayed as, if the user didn't explicitly specify any display text; generally the same as the original target, but minus any anti-asterisk !!; # the value `true` if the target had a backslash-escaped * in it (FIXME: explain this more clearly). ]==] function export.get_link_page_with_auto_display(target, lang, sc, plain) local orig_target = target if not target then return nil elseif target:find("\\", nil, true) then track("escaped", "get_link_page") end target = remove_formatting(target) if target:sub(1, 1) == ":" then track("initial colon") -- FIXME, the auto_display (second return value) should probably remove the colon return target:sub(2), orig_target end local prefix = target:match("^(.-):") -- Convert any escaped colons target = target:gsub("\\:", ":") if prefix then -- If this is an a link to another namespace or an interwiki link, ensure there's an initial colon and then -- return what we have (so that it works as a conventional link, and doesn't do anything weird like add the term -- to a category.) prefix = ulower(trim(prefix)) if prefix ~= "" and ( load_data("Module:data/namespaces")[prefix] or load_data("Module:data/interwikis")[prefix] ) then return target, orig_target end end -- Check if the term is reconstructed and remove any asterisk. Also check for anti-asterisk (!!). -- Otherwise, handle the escapes. local reconstructed, escaped, anti_asterisk if not plain then target, reconstructed = target:gsub("^%*(.)", "%1") if reconstructed == 0 then target, anti_asterisk = target:gsub("^!!(.)", "%1") if anti_asterisk == 1 then -- Remove !! from original. FIXME! We do it this way because the call to remove_formatting() above -- may cause non-initial !! to be interpreted as anti-asterisks. We should surely move the -- remove_formatting() call later. orig_target = orig_target:gsub("^!!", "") end end end target, escaped = target:gsub("^(\\-)\\%*", "%1*") if not (sc and sc:getCode() ~= "None") then sc = lang:findBestScript(target) end -- Remove carets if they are used to capitalize parts of transliterations (unless they have been escaped). if (not sc:hasCapitalization()) and sc:isTransliterated() and target:match("%^") then target = escape(target, "^") :gsub("%^", "") target = unescape(target, "^") end -- Get the entry name for the language. target = lang:makeEntryName(target, sc, reconstructed == 1 or lang:hasType("appendix-constructed")) -- If the link contains unexpanded template parameters, then don't create a link. if target:match("{{{.-}}}") then -- FIXME: Should we return the original target as the default display value (second return value)? return nil end -- Link to appendix for reconstructed terms and terms in appendix-only languages. Plain links interpret * -- literally, however. if reconstructed == 1 then if lang:getFullCode() == "und" then -- Return the original target as default display value. If we don't do this, we wrongly get -- [Term?] displayed instead. return nil, orig_target end target = "Reconstruction:" .. lang:getFullName() .. "/" .. target -- Reconstructed languages and substrates require an initial *. elseif anti_asterisk ~= 1 and (lang:hasType("reconstructed") or lang:getFamilyCode() == "qfa-sub") then error(("The specified language %s is unattested, while the term '%s' does not begin with '*' to indicate that it is reconstructed.") : format(lang:getCanonicalName(), orig_target)) elseif lang:hasType("appendix-constructed") then target = "विक्षनरी:" .. lang:getFullName() .. "/" .. target else target = target end return target, orig_target, escaped > 0 end function export.get_link_page(target, lang, sc, plain) local target, auto_display, escaped = export.get_link_page_with_auto_display(target, lang, sc, plain) return target, escaped end -- Make a link from a given link's parts local function make_link(link, lang, sc, id, isolated, cats, no_alt_ast, plain) -- Convert percent encoding to plaintext. link.target = link.target and decode_uri(link.target, "PATH") link.fragment = link.fragment and decode_uri(link.fragment, "PATH") -- Find fragments (if one isn't already set). -- Prevents {{l|en|word#Etymology 2|word}} from linking to [[word#Etymology 2#English]]. -- # can be escaped as \#. if link.target and link.fragment == nil then link.target, link.fragment = get_fragment(link.target) end -- Process the target local auto_display, escaped link.target, auto_display, escaped = export.get_link_page_with_auto_display(link.target, lang, sc, plain) -- Create a default display form. -- If the target is "" then it's a link like [[#English]], which refers to the current page. if auto_display == "" then auto_display = (m_headword_data or get_headword_data()).pagename end -- If the display is the target and the reconstruction * has been escaped, remove the escaping backslash. if escaped then auto_display = auto_display:gsub("\\([^\\]*%*)", "%1", 1) end -- Process the display form. if link.display then local orig_display = link.display link.display = lang:makeDisplayText(link.display, sc, true) if cats then auto_display = lang:makeDisplayText(auto_display, sc) -- If the alt text is the same as what would have been automatically generated, then the alt parameter is redundant (e.g. {{l|en|foo|foo}}, {{l|en|w:foo|foo}}, but not {{l|en|w:foo|w:foo}}). -- If they're different, but the alt text could have been entered as the term parameter without it affecting the target page, then the target parameter is redundant (e.g. {{l|ru|фу|фу́}}). -- If `no_alt_ast` is true, use pcall to catch the error which will be thrown if this is a reconstructed lang and the alt text doesn't have *. if link.display == auto_display then insert(cats, lang:getFullName() .. " links with redundant alt parameters") else local ok, check if no_alt_ast then ok, check = pcall(export.get_link_page, orig_display, lang, sc, plain) else ok = true check = export.get_link_page(orig_display, lang, sc, plain) end if ok and link.target == check then insert(cats, lang:getFullName() .. " links with redundant target parameters") end end end else link.display = lang:makeDisplayText(auto_display, sc) end if not link.target then return link.display end -- If the target is the same as the current page, there is no sense id -- and either the language code is "und" or the current L2 is the current -- language then return a "self-link" like the software does. if link.target == get_current_title().prefixedText then local fragment, current_L2 = link.fragment, get_current_L2() if ( fragment and fragment == current_L2 or not (id or fragment) and (lang:getFullCode() == "und" or lang:getFullName() == current_L2) ) then return tostring(mw.html.create("strong") :addClass("selflink") :wikitext(link.display)) end end -- Add fragment. Do not add a section link to "Undetermined", as such sections do not exist and are invalid. -- TabbedLanguages handles links without a section by linking to the "last visited" section, but adding -- "Undetermined" would break that feature. For localized prefixes that make syntax error, please use the -- format: ["xyz"] = true. local prefix = link.target:match("^:*([^:]+):") prefix = prefix and ulower(prefix) if prefix ~= "category" and not (prefix and load_data("Module:data/interwikis")[prefix]) then if (link.fragment or link.target:sub(-1) == "#") and not plain then track("fragment", lang:getFullCode()) if cats then insert(cats, lang:getFullName() .. " links with manual fragments") end end if not link.fragment then if id then link.fragment = lang:getFullCode() == "und" and anchor_encode(id) or language_anchor(lang, id) elseif lang:getFullCode() ~= "und" and not (link.target:match("^विक्षनरी:") or link.target:match("^विक्षनरी:")) then link.fragment = anchor_encode(lang:getFullName()) end end end -- Put inward-facing square brackets around a link to isolated spacing character(s). if isolated and #link.display > 0 and not umatch(decode_entities(link.display), "%S") then link.display = "&#x5D;" .. link.display .. "&#x5B;" end link.target = link.target:gsub("^(:?)(.*)", function(m1, m2) return m1 .. encode_entities(m2, "#%&+/:<=>@[\\]_{|}") end) link.fragment = link.fragment and encode_entities(remove_formatting(link.fragment), "#%&+/:<=>@[\\]_{|}") return "[[" .. link.target:gsub("^[^:]", ":%0") .. (link.fragment and "#" .. link.fragment or "") .. "|" .. link.display .. "]]" end -- Split a link into its parts local function parse_link(linktext) local link = { target = linktext } local target = link.target link.target, link.display = target:match("^(..-)|(.+)$") if not link.target then link.target = target link.display = target end -- There's no point in processing these, as they aren't real links. local target_lower = link.target:lower() for _, false_positive in ipairs({ "category", "cat", "file", "image" }) do if target_lower:match("^" .. false_positive .. ":") then return nil end end link.display = decode_entities(link.display) link.target, link.fragment = get_fragment(link.target) -- So that make_link does not look for a fragment again. if not link.fragment then link.fragment = false end return link end local function check_params_ignored_when_embedded(alt, lang, id, cats) if alt then track("alt-ignored") if cats then insert(cats, lang:getFullName() .. " links with ignored alt parameters") end end if id then track("id-ignored") if cats then insert(cats, lang:getFullName() .. " links with ignored id parameters") end end end -- Find embedded links and ensure they link to the correct section. local function process_embedded_links(text, alt, lang, sc, id, cats, no_alt_ast, plain) -- Process the non-linked text. text = lang:makeDisplayText(text, sc, true) -- If the text begins with * and another character, then act as if each link begins with *. However, don't do this if the * is contained within a link at the start. E.g. `|*[[foo]]` would set all_reconstructed to true, while `|[[*foo]]` would not. local all_reconstructed = false if not plain then -- anchor_encode removes links etc. if anchor_encode(text):sub(1, 1) == "*" then all_reconstructed = true end -- Otherwise, handle any escapes. text = text:gsub("^(\\-)\\%*", "%1*") end check_params_ignored_when_embedded(alt, lang, id, cats) local function process_link(space1, linktext, space2) local capture = "[[" .. linktext .. "]]" local link = parse_link(linktext) -- Return unprocessed false positives untouched (e.g. categories). if not link then return capture end if all_reconstructed then if link.target:find("^!!") then -- Check for anti-asterisk !! at the beginning of a target, indicating that a reconstructed term -- wants a part of the term to link to a non-reconstructed term, e.g. Old English -- {{ang-noun|m|head=*[[!!Crist|Cristes]] [[!!mæsseǣfen]]}}. link.target = link.target:sub(3) -- Also remove !! from the display, which may have been copied from the target (as in mæsseǣfen in -- the example above). link.display = link.display:gsub("^!!", "") elseif not link.target:match("^%*") then link.target = "*" .. link.target end end linktext = make_link(link, lang, sc, id, false, nil, no_alt_ast, plain) :gsub("^%[%[", "\3") :gsub("%]%]$", "\4") return space1 .. linktext .. space2 end -- Use chars 1 and 2 as temporary substitutions, so that we can use charsets. These are converted to chars 3 and 4 by process_link, which means we can convert any remaining chars 1 and 2 back to square brackets (i.e. those not part of a link). text = text :gsub("%[%[", "\1") :gsub("%]%]", "\2") -- If the script uses ^ to capitalize transliterations, make sure that any carets preceding links are on the inside, so that they get processed with the following text. if ( text:find("^", nil, true) and not sc:hasCapitalization() and sc:isTransliterated() ) then text = escape(text, "^") :gsub("%^\1", "\1%^") text = unescape(text, "^") end text = text:gsub("\1(%s*)([^\1\2]-)(%s*)\2", process_link) -- Remove the extra * at the beginning of a language link if it's immediately followed by a link whose display begins with * too. if all_reconstructed then text = text:gsub("^%*\3([^|\1-\4]+)|%*", "\3%1|*") end return (text :gsub("[\1\3]", "[[") :gsub("[\2\4]", "]]") ) end local function simple_link(term, fragment, alt, lang, sc, id, cats, no_alt_ast, srwc) local plain if lang == nil then lang, plain = get_lang("und"), true end -- Get the link target and display text. If the term is the empty string, treat the input as a link to the current page. if term == "" then term = get_current_title().prefixedText elseif term then local new_term, new_alt = export.get_wikilink_parts(term, true) if new_term then check_params_ignored_when_embedded(alt, lang, id, cats) -- [[|foo]] links are treated as plaintext "[[|foo]]". -- FIXME: Pipes should be handled via a proper escape sequence, as they can occur in unsupported titles. if new_term == "" then term, alt = nil, term else local title = new_title(new_term) if title then local ns = title.namespace -- File: and Category: links should be returned as-is. if ns == 6 or ns == 14 then return term end end term, alt = new_term, new_alt if cats then if not (srwc and srwc(term, alt)) then insert(cats, lang:getFullName() .. " links with redundant wikilinks") end end end end end if alt then alt = selective_trim(alt) if alt == "" then alt = nil end end -- If there's nothing to process, return nil. if not (term or alt) then return nil end -- If there is no script, get one. if not sc then sc = lang:findBestScript(alt or term) end -- Embedded wikilinks need to be processed individually. if term then local open = find(term, "[[", nil, true) if open and find(term, "]]", open + 2, true) then return process_embedded_links(term, alt, lang, sc, id, cats, no_alt_ast, plain) end term = selective_trim(term) end -- If not, make a link using the parameters. return make_link({ target = term, display = alt, fragment = fragment }, lang, sc, id, true, cats, no_alt_ast, plain) end --[==[Creates a basic link to the given term. It links to the language section (such as <code>==English==</code>), but it does not add language and script wrappers, so any code that uses this function should call the <code class="n">[[Module:script utilities#tag_text|tag_text]]</code> from [[Module:script utilities]] to add such wrappers itself at some point. The first argument, <code class="n">data</code>, may contain the following items, a subset of the items used in the <code class="n">data</code> argument of <code class="n">full_link</code>. If any other items are included, they are ignored. { { term = entry_to_link_to, alt = link_text_or_displayed_text, lang = language_object, id = sense_id, } } ; <code class="n">term</code> : Text to turn into a link. This is generally the name of a page. The text can contain wikilinks already embedded in it. These are processed individually just like a single link would be. The <code class="n">alt</code> argument is ignored in this case. ; <code class="n">alt</code> (''optional'') : The alternative display for the link, if different from the linked page. If this is {{code|lua|nil}}, the <code class="n">text</code> argument is used instead (much like regular wikilinks). If <code class="n">text</code> contains wikilinks in it, this argument is ignored and has no effect. (Links in which the alt is ignored are tracked with the tracking template {{whatlinkshere|tracking=links/alt-ignored}}.) ; <code class="n">lang</code> : The [[Module:languages#Language objects|language object]] for the term being linked. If this argument is defined, the function will determine the language's canonical name (see [[Template:language data documentation]]), and point the link or links in the <code class="n">term</code> to the language's section of an entry, or to a language-specific senseid if the <code class="n">id</code> argument is defined. ; <code class="n">id</code> (''optional'') : Sense id string. If this argument is defined, the link will point to a language-specific sense id ({{ll|en|identifier|id=HTML}}) created by the template {{temp|senseid}}. A sense id consists of the language's canonical name, a hyphen (<code>-</code>), and the string that was supplied as the <code class="n">id</code> argument. This is useful when a term has more than one sense in a language. If the <code class="n">term</code> argument contains wikilinks, this argument is ignored. (Links in which the sense id is ignored are tracked with the tracking template {{whatlinkshere|tracking=links/id-ignored}}.) The second argument is as follows: ; <code class="n">allow_self_link</code> : If {{code|lua|true}}, the function will also generate links to the current page. The default ({{code|lua|false}}) will not generate a link but generate a bolded "self link" instead. The following special options are processed for each link (both simple text and with embedded wikilinks): * The target page name will be processed to generate the correct entry name. This is done by the [[Module:languages#makeEntryName|makeEntryName]] function in [[Module:languages]], using the <code class="n">entry_name</code> replacements in the language's data file (see [[Template:language data documentation]] for more information). This function is generally used to automatically strip dictionary-only diacritics that are not part of the normal written form of a language. * If the text starts with <code class="n">*</code>, then the term is considered a reconstructed term, and a link to the Reconstruction: namespace will be created. If the text contains embedded wikilinks, then <code class="n">*</code> is automatically applied to each one individually, while preserving the displayed form of each link as it was given. This allows linking to phrases containing multiple reconstructed terms, while only showing the * once at the beginning. * If the text starts with <code class="n">:</code>, then the link is treated as "raw" and the above steps are skipped. This can be used in rare cases where the page name begins with <code class="n">*</code> or if diacritics should not be stripped. For example: ** {{temp|l|en|*nix}} links to the nonexistent page [[Reconstruction:English/nix]] (<code class="n">*</code> is interpreted as a reconstruction), but {{temp|l|en|:*nix}} links to [[*nix]]. ** {{temp|l|sl|Franche-Comté}} links to the nonexistent page [[Franche-Comte]] (<code>é</code> is converted to <code>e</code> by <code class="n">makeEntryName</code>), but {{temp|l|sl|:Franche-Comté}} links to [[Franche-Comté]].]==] function export.language_link(data) if type(data) ~= "table" then error( "The first argument to the function language_link must be a table. See Module:links/documentation for more information.") elseif data.term and data.term:find("\\", nil, true) or data.alt and data.alt:find("\\", nil, true) then track("escaped", "language_link") end -- Categorize links to "und". local lang, cats = data.lang, data.cats if cats and lang:getCode() == "und" then insert(cats, "Undetermined language links") end return simple_link( data.term, data.fragment, data.alt, lang, data.sc, data.id, cats, data.no_alt_ast, data.suppress_redundant_wikilink_cat ) end function export.plain_link(data) if type(data) ~= "table" then error( "The first argument to the function plain_link must be a table. See Module:links/documentation for more information.") elseif data.term and data.term:find("\\", nil, true) or data.alt and data.alt:find("\\", nil, true) then track("escaped", "plain_link") end return simple_link( data.term, data.fragment, data.alt, nil, data.sc, data.id, data.cats, data.no_alt_ast, data.suppress_redundant_wikilink_cat ) end --[==[Replace any links with links to the correct section, but don't link the whole text if no embedded links are found. Returns the display text form.]==] function export.embedded_language_links(data) if type(data) ~= "table" then error( "The first argument to the function embedded_language_links must be a table. See Module:links/documentation for more information.") elseif data.term and data.term:find("\\", nil, true) or data.alt and data.alt:find("\\", nil, true) then track("escaped", "embedded_language_links") end local term, lang, sc = data.term, data.lang, data.sc -- If we don't have a script, get one. if not sc then sc = lang:findBestScript(term) end -- Do we have embedded wikilinks? If so, they need to be processed individually. local open = find(term, "[[", nil, true) if open and find(term, "]]", open + 2, true) then return process_embedded_links(term, data.alt, lang, sc, data.id, data.cats, data.no_alt_ast) end -- If not, return the display text. term = selective_trim(term) -- FIXME: Double-escape any percent-signs, because we don't want to treat non-linked text as having percent-encoded characters. This is a hack: percent-decoding should come out of [[Module:languages]] and only dealt with in this module, as it's specific to links. term = term:gsub("%%", "%%25") return lang:makeDisplayText(term, sc, true) end function export.mark(text, item_type, face, lang) local tag = { "", "" } if item_type == "gloss" then tag = { '<span class="mention-gloss-double-quote">“</span><span class="mention-gloss">', '</span><span class="mention-gloss-double-quote">”</span>' } if type(text) == "string" and text:match("^''[^'].*''$") then -- Temporary tracking for mention glosses that are entirely italicized or bolded, which is probably -- wrong. (Note that this will also find bolded mention glosses since they use triple apostrophes.) track("italicized-mention-gloss", lang and lang:getFullCode() or nil) end elseif item_type == "tr" then if face == "term" then tag = { '<span lang="' .. lang:getFullCode() .. '" class="tr mention-tr Latn">', '</span>' } else tag = { '<span lang="' .. lang:getFullCode() .. '" class="tr Latn">', '</span>' } end elseif item_type == "ts" then -- \226\129\160 = word joiner (zero-width non-breaking space) U+2060 tag = { '<span class="ts mention-ts Latn">/\226\129\160', '\226\129\160/</span>' } elseif item_type == "pos" then tag = { '<span class="ann-pos">', '</span>' } elseif item_type == "non-gloss" then tag = { '<span class="ann-non-gloss">', '</span>' } elseif item_type == "annotations" then tag = { '<span class="mention-gloss-paren annotation-paren">(</span>', '<span class="mention-gloss-paren annotation-paren">)</span>' } elseif item_type == "infl" then tag = { '<span class="ann-infl">', '</span>' } end if type(text) == "string" then return tag[1] .. text .. tag[2] else return "" end end local pos_tags --[==[Formats the annotations that are displayed with a link created by {{code|lua|full_link}}. Annotations are the extra bits of information that are displayed following the linked term, and include things such as gender, transliteration, gloss and so on. * The first argument is a table possessing some or all of the following keys: *:; <code class="n">genders</code> *:: Table containing a list of gender specifications in the style of [[Module:gender and number]]. *:; <code class="n">tr</code> *:: Transliteration. *:; <code class="n">gloss</code> *:: Gloss that translates the term in the link, or gives some other descriptive information. *:; <code class="n">pos</code> *:: Part of speech of the linked term. If the given argument matches one of the aliases in `pos_aliases` in [[Module:headword/data]], or consists of a part of speech or alias followed by `f` (for a non-lemma form), expand it appropriately. Otherwise, just show the given text as it is. *:; <code class="n">ng</code> *:: Arbitrary non-gloss descriptive text for the link. This should be used in preference to putting descriptive text in `gloss` or `pos`. *:; <code class="n">lit</code> *:: Literal meaning of the term, if the usual meaning is figurative or idiomatic. *:; <code class="n">infl</code> *:: Table containing a list of grammar tags in the style of [[Module:form of]] `tagged_inflections`. *:Any of the above values can be omitted from the <code class="n">info</code> argument. If a completely empty table is given (with no annotations at all), then an empty string is returned. * The second argument is a string. Valid values are listed in [[Module:script utilities/data]] "data.translit" table.]==] function export.format_link_annotations(data, face) local output = {} -- Interwiki link if data.interwiki then insert(output, data.interwiki) end -- Genders if type(data.genders) ~= "table" then data.genders = { data.genders } end if data.genders and #data.genders > 0 then local genders, gender_cats = format_genders(data.genders, data.lang) insert(output, "&nbsp;" .. genders) if gender_cats then local cats = data.cats if cats then extend(cats, gender_cats) end end end local annotations = {} -- Transliteration and transcription if data.tr and data.tr[1] or data.ts and data.ts[1] then local kind if face == "term" then kind = face else kind = "default" end if data.tr[1] and data.ts[1] then insert(annotations, tag_translit(data.tr[1], data.lang, kind) .. " " .. export.mark(data.ts[1], "ts")) elseif data.ts[1] then insert(annotations, export.mark(data.ts[1], "ts")) else insert(annotations, tag_translit(data.tr[1], data.lang, kind)) end end -- Gloss/translation if data.gloss then insert(annotations, export.mark(data.gloss, "gloss")) end -- Part of speech if data.pos then -- debug category for pos= containing transcriptions if data.pos:match("/[^><]-/") then data.pos = data.pos .. "[[Category:links likely containing transcriptions in pos]]" end -- Canonicalize part of speech aliases as well as non-lemma aliases like 'nf' or 'nounf' for "noun form". pos_tags = pos_tags or (m_headword_data or get_headword_data()).pos_aliases local pos = pos_tags[data.pos] if not pos and data.pos:find("f$") then local pos_form = data.pos:sub(1, -2) -- We only expand something ending in 'f' if the result is a recognized non-lemma POS. pos_form = (pos_tags[pos_form] or pos_form) .. " form" if (m_headword_data or get_headword_data()).nonlemmas[pos_form .. "s"] then pos = pos_form end end insert(annotations, export.mark(pos or data.pos, "pos")) end -- Inflection data if data.infl then local m_form_of = require(form_of_module) -- Split tag sets manually, since tagged_inflections creates a numbered list, and we do not want that. local infl_outputs = {} local tag_sets = m_form_of.split_tag_set(data.infl) for _, tag_set in ipairs(tag_sets) do table.insert(infl_outputs, m_form_of.tagged_inflections({ tags = tag_set, lang = data.lang, nocat = true, nolink = true, nowrap = true })) end insert(annotations, export.mark(table.concat(infl_outputs, "; "), "infl")) end -- Non-gloss text if data.ng then insert(annotations, export.mark(data.ng, "non-gloss")) end -- Literal/sum-of-parts meaning if data.lit then insert(annotations, "literally " .. export.mark(data.lit, "gloss")) end -- Provide a hook to insert additional annotations such as nested inflections. if data.postprocess_annotations then data.postprocess_annotations { data = data, annotations = annotations } end if #annotations > 0 then insert(output, " " .. export.mark(concat(annotations, ", "), "annotations")) end return concat(output) end -- Encode certain characters to avoid various delimiter-related issues at various stages. We need to encode < and > -- because they end up forming part of CSS class names inside of <span ...> and will interfere with finding the end -- of the HTML tag. I first tried converting them to URL encoding, i.e. %3C and %3E; they then appear in the URL as -- %253C and %253E, which get mapped back to %3C and %3E when passed to [[Module:accel]]. But mapping them to &lt; -- and &gt; somehow works magically without any further work; they appear in the URL as < and >, and get passed to -- [[Module:accel]] as < and >. I have no idea who along the chain of calls is doing the encoding and decoding. If -- someone knows, please modify this comment appropriately! local accel_char_map local function get_accel_char_map() accel_char_map = { ["%"] = ".", [" "] = "_", ["_"] = u(0xFFF0), ["<"] = "&lt;", [">"] = "&gt;", } return accel_char_map end local function encode_accel_param_chars(param) return (param:gsub("[% <>_]", accel_char_map or get_accel_char_map())) end local function encode_accel_param(prefix, param) if not param then return "" end if type(param) == "table" then local filled_params = {} -- There may be gaps in the sequence, especially for translit params. local maxindex = 0 for k in pairs(param) do if type(k) == "number" and k > maxindex then maxindex = k end end for i = 1, maxindex do filled_params[i] = param[i] or "" end -- [[Module:accel]] splits these up again. param = concat(filled_params, "*~!") end -- This is decoded again by [[WT:ACCEL]]. return prefix .. encode_accel_param_chars(param) end local function insert_if_not_blank(list, item) if item == "" then return end insert(list, item) end local function get_class(lang, tr, accel, nowrap) if not accel and not nowrap then return "" end local classes = {} if accel then insert(classes, "form-of lang-" .. lang:getFullCode()) local form = accel.form if form then insert(classes, encode_accel_param_chars(form) .. "-form-of") end insert_if_not_blank(classes, encode_accel_param("gender-", accel.gender)) insert_if_not_blank(classes, encode_accel_param("pos-", accel.pos)) insert_if_not_blank(classes, encode_accel_param("transliteration-", accel.translit or (tr ~= "-" and tr or nil))) insert_if_not_blank(classes, encode_accel_param("target-", accel.target)) insert_if_not_blank(classes, encode_accel_param("origin-", accel.lemma)) insert_if_not_blank(classes, encode_accel_param("origin_transliteration-", accel.lemma_translit)) if accel.no_store then insert(classes, "form-of-nostore") end end if nowrap then insert(classes, nowrap) end return concat(classes, " ") end -- Add any left or right regular or accent qualifiers, labels or references to a formatted term. `data` is the object -- specifying the term, which should optionally contain: -- * a language object in `lang`; required if any accent qualifiers or labels are given; -- * left regular qualifiers in `q` (an array of strings or a single string); an empty array or blank string will be -- ignored; -- * right regular qualifiers in `qq` (an array of strings or a single string); an empty array or blank string will be -- ignored; -- * left accent qualifiers in `a` (an array of strings); an empty array will be ignored; -- * right accent qualifiers in `aa` (an array of strings); an empty array will be ignored; -- * left labels in `l` (an array of strings); an empty array will be ignored; -- * right labels in `ll` (an array of strings); an empty array will be ignored; -- * references in `refs`, an array either of strings (formatted reference text) or objects containing fields `text` -- (formatted reference text) and optionally `name` and/or `group`. -- `formatted` is the formatted version of the term itself. local function add_qualifiers_and_refs_to_term(data, formatted) local q = data.q if type(q) == "string" then q = { q } end local qq = data.qq if type(qq) == "string" then qq = { qq } end if q and q[1] or qq and qq[1] or data.a and data.a[1] or data.aa and data.aa[1] or data.l and data.l[1] or data.ll and data.ll[1] or data.refs and data.refs[1] then formatted = format_qualifiers { lang = data.lang, text = formatted, q = q, qq = qq, a = data.a, aa = data.aa, l = data.l, ll = data.ll, refs = data.refs, } end return formatted end --[==[ Creates a full link, with annotations (see `[[#format_link_annotations|format_link_annotations]]`), in the style of {{tl|l}} or {{tl|m}}. The first argument, `data`, must be a table. It contains the various elements that can be supplied as parameters to {{tl|l}} or {{tl|m}}: { { term = entry_to_link_to, alt = link_text_or_displayed_text, lang = language_object, sc = script_object, track_sc = boolean, no_nonstandard_sc_cat = boolean, fragment = link_fragment, id = sense_id, genders = { "gender1", "gender2", ... }, tr = transliteration, respect_link_tr = boolean, ts = transcription, gloss = gloss, pos = part_of_speech_tag, ng = non-gloss text, lit = literal_translation, infl = { "form_of_grammar_tag1", "form_of_grammar_tag2", ... }, no_alt_ast = boolean, accel = {accelerated_creation_tags}, interwiki = interwiki, pretext = "text_at_beginning" or nil, posttext = "text_at_end" or nil, q = { "left_qualifier1", "left_qualifier2", ...} or "left_qualifier", qq = { "right_qualifier1", "right_qualifier2", ...} or "right_qualifier", l = { "left_label1", "left_label2", ...}, ll = { "right_label1", "right_label2", ...}, a = { "left_accent_qualifier1", "left_accent_qualifier2", ...}, aa = { "right_accent_qualifier1", "right_accent_qualifier2", ...}, refs = { "formatted_ref1", "formatted_ref2", ...} or { {text = "text", name = "name", group = "group"}, ... }, show_qualifiers = boolean, } } Any one of the items in the `data` table may be {nil}, but an error will be shown if neither `term` nor `alt` nor `tr` is present. Thus, calling {full_link{ term = term, lang = lang, sc = sc }}, where `term` is the page to link to (which may have diacritics that will be stripped and/or embedded bracketed links) and `lang` is a [[Module:languages#Language objects|language object]] from [[Module:languages]], will give a plain link similar to the one produced by the template {{tl|l}}, and calling {full_link( { term = term, lang = lang, sc = sc }, "term" )} will give a link similar to the one produced by the template {{tl|m}}. The function will: * Try to determine the script, based on the characters found in the `term` or `alt` argument, if the script was not given. If a script is given and `track_sc` is {true}, it will check whether the input script is the same as the one which would have been automatically generated and add the category [[:Category:LANG terms with redundant script codes]] if yes, or [[:Category:LANG terms with non-redundant manual script codes]] if no. This should be used when the input script object is directly determined by a template's `sc` parameter. * Call `[[#language_link|language_link]]` on the `term` or `alt` forms, to remove diacritics in the page name, process any embedded wikilinks and create links to Reconstruction or Appendix pages when necessary. * Call `[[Module:script utilities#tag_text]]` to add the appropriate language and script tags to the term and italicize terms written in the Latin script if necessary. Accelerated creation tags, as used by [[WT:ACCEL]], are included. * Generate a transliteration, based on the `alt` or `term` arguments, if the script is not Latin, no transliteration was provided in `tr` and the combination of the term's language and script support automatic transliteration. The transliteration itself will be linked if both `.respect_link_tr` is specified and the language of the term has the `link_tr` property set for the script of the term; but not otherwise. * Add the annotations (transliteration, gender, gloss, etc.) after the link. * If `no_alt_ast` is specified, then the `alt` text does not need to contain an asterisk if the language is reconstructed. This should only be used by modules which really need to allow links to reconstructions that don't display asterisks (e.g. number boxes). * If `pretext` or `posttext` is specified, this is text to (respectively) prepend or append to the output, directly before processing qualifiers, labels and references. This can be used to add arbitrary extra text inside of the qualifiers, labels and references. * If `show_qualifiers` is specified or the `show_qualifiers` argument is given, then left and right qualifiers, accent qualifiers, labels and references will be displayed, otherwise they will be ignored. (This is because a fair amount of code stores qualifiers, labels and/or references in these fields and displays them itself, rather than expecting {full_link()} to display them.)]==] function export.full_link(data, face, allow_self_link, show_qualifiers) if type(data) ~= "table" then error("The first argument to the function full_link must be a table. " .. "See Module:links/documentation for more information.") elseif data.term and data.term:find("\\", nil, true) or data.alt and data.alt:find("\\", nil, true) then track("escaped", "full_link") end -- Prevent data from being destructively modified. local data = shallow_copy(data) -- FIXME: this shouldn't be added to `data`, as that means the input table needs to be cloned. data.cats = {} -- Categorize links to "und". local lang, cats = data.lang, data.cats if cats and lang:getCode() == "und" then insert(cats, "Undetermined language links") end local terms = { true } -- Generate multiple forms if applicable. for _, param in ipairs { "term", "alt" } do if type(data[param]) == "string" and data[param]:find("//", nil, true) then data[param] = export.split_on_slashes(data[param]) elseif type(data[param]) == "string" and not (type(data.term) == "string" and data.term:find("//", nil, true)) then if not data.no_generate_forms then data[param] = lang:generateForms(data[param]) else data[param] = { data[param] } end else data[param] = {} end end for _, param in ipairs { "sc", "tr", "ts" } do data[param] = { data[param] } end for _, param in ipairs { "term", "alt", "sc", "tr", "ts" } do for i in pairs(data[param]) do terms[i] = true end end -- Create the link local output = {} local id, no_alt_ast, srwc, accel, nevercalltr = data.id, data.no_alt_ast, data.suppress_redundant_wikilink_cat, data.accel, data.never_call_transliteration_module local link_tr = data.respect_link_tr and lang:link_tr(data.sc[1]) for i in ipairs(terms) do local link -- Is there any text to show? if (data.term[i] or data.alt[i]) then -- Try to detect the script if it was not provided local display_term = data.alt[i] or data.term[i] local best = lang:findBestScript(display_term) -- no_nonstandard_sc_cat is intended for use in [[Module:interproject]] if ( not data.no_nonstandard_sc_cat and best:getCode() == "None" and find_best_script_without_lang(display_term):getCode() ~= "None" ) then insert(cats, lang:getFullName() .. " terms in nonstandard scripts") end if not data.sc[i] then data.sc[i] = best -- Track uses of sc parameter. elseif data.track_sc then if data.sc[i]:getCode() == best:getCode() then insert(cats, lang:getFullName() .. " terms with redundant script codes") else insert(cats, lang:getFullName() .. " terms with non-redundant manual script codes") end end -- If using a discouraged character sequence, add to maintenance category if data.sc[i]:hasNormalizationFixes() == true then if (data.term[i] and data.sc[i]:fixDiscouragedSequences(toNFC(data.term[i])) ~= toNFC(data.term[i])) or (data.alt[i] and data.sc[i]:fixDiscouragedSequences(toNFC(data.alt[i])) ~= toNFC(data.alt[i])) then insert(cats, "Pages using discouraged character sequences") end end link = simple_link( data.term[i], data.fragment, data.alt[i], lang, data.sc[i], id, cats, no_alt_ast, srwc ) end -- simple_link can return nil, so check if a link has been generated. if link then -- Add "nowrap" class to prefixes in order to prevent wrapping after the hyphen local nowrap local display_term = data.alt[i] or data.term[i] if display_term and (display_term:find("^%-") or display_term:find("^־")) then -- Hebrew maqqef -- FIXME, use hyphens from [[Module:affix]] nowrap = "nowrap" end link = tag_text(link, lang, data.sc[i], face, get_class(lang, data.tr[i], accel, nowrap)) else --[[ No term to show. Is there at least a transliteration we can work from? ]] link = request_script(lang, data.sc[i]) -- No link to show, and no transliteration either. Show a term request (unless it's a substrate, as they rarely take terms). if (link == "" or (not data.tr[i]) or data.tr[i] == "-") and lang:getFamilyCode() ~= "qfa-sub" then -- If there are multiple terms, break the loop instead. if i > 1 then remove(output) break elseif NAMESPACE ~= "साँचा" then insert(cats, lang:getFullName() .. " टर्म अनुरोध") end link = "<small>[टर्म?]</small>" end end insert(output, link) if i < #terms then insert(output, "<span class=\"Zsym mention\" style=\"font-size:100%;\">&nbsp;/ </span>") end end -- When suppress_tr is true, do not show or generate any transliteration if data.suppress_tr then data.tr[1] = nil else -- TODO: Currently only handles the first transliteration, pending consensus on how to handle multiple translits for multiple forms, as this is not always desirable (e.g. traditional/simplified Chinese). if data.tr[1] == "" or data.tr[1] == "-" then data.tr[1] = nil else local phonetic_extraction = load_data("Module:links/data").phonetic_extraction phonetic_extraction = phonetic_extraction[lang:getCode()] or phonetic_extraction[lang:getFullCode()] if phonetic_extraction then data.tr[1] = data.tr[1] or require(phonetic_extraction).getTranslit(export.remove_links(data.alt[1] or data.term[1])) elseif (data.term[1] or data.alt[1]) and data.sc[1]:isTransliterated() then -- Track whenever there is manual translit. The categories below like 'terms with redundant transliterations' -- aren't sufficient because they only work with reference to automatic translit and won't operate at all in -- languages without any automatic translit, like Persian and Hebrew. if data.tr[1] then local full_code = lang:getFullCode() track("manual-tr", full_code) end if not nevercalltr then -- Try to generate a transliteration. local text = data.alt[1] or data.term[1] if not link_tr then text = export.remove_links(text, true) end local automated_tr = lang:transliterate(text, data.sc[1]) if automated_tr then local manual_tr = data.tr[1] if manual_tr then if export.remove_links(manual_tr) == export.remove_links(automated_tr) then insert(cats, lang:getFullName() .. " terms with redundant transliterations") else -- Prevents Arabic root categories from flooding the tracking categories. if NAMESPACE ~= "श्रेणी" then insert(cats, lang:getFullName() .. " terms with non-redundant manual transliterations") end end end if not manual_tr or lang:overrideManualTranslit(data.sc[1]) then data.tr[1] = automated_tr end end end end end end -- Link to the transliteration entry for languages that require this if data.tr[1] and link_tr and not data.tr[1]:match("%[%[(.-)%]%]") then data.tr[1] = simple_link( data.tr[1], nil, nil, lang, get_script("Latn"), nil, cats, no_alt_ast, srwc ) elseif data.tr[1] and not link_tr then -- Remove the pseudo-HTML tags added by remove_links. data.tr[1] = data.tr[1]:gsub("</?link>", "") end if data.tr[1] and not umatch(data.tr[1], "[^%s%p]") then data.tr[1] = nil end insert(output, export.format_link_annotations(data, face)) if data.pretext then insert(output, 1, data.pretext) end if data.posttext then insert(output, data.posttext) end local categories = cats[1] and format_categories(cats, lang, "-", nil, nil, data.sc) or "" output = concat(output) if show_qualifiers or data.show_qualifiers then output = add_qualifiers_and_refs_to_term(data, output) end return output .. categories end --[==[Replaces all wikilinks with their displayed text, and removes any categories. This function can be invoked either from a template or from another module. -- Strips links: deletes category links, the targets of piped links, and any double square brackets involved in links (other than file links, which are untouched). If `tag` is set, then any links removed will be given pseudo-HTML tags, which allow the substitution functions in [[Module:languages]] to properly subdivide the text in order to reduce the chance of substitution failures in modules which scrape pages like [[Module:zh-translit]]. -- FIXME: This is quite hacky. We probably want this to be integrated into [[Module:languages]], but we can't do that until we know that nothing is pushing pipe linked transliterations through it for languages which don't have link_tr set. * <code><nowiki>[[page|displayed text]]</nowiki></code> &rarr; <code><nowiki>displayed text</nowiki></code> * <code><nowiki>[[page and displayed text]]</nowiki></code> &rarr; <code><nowiki>page and displayed text</nowiki></code> * <code><nowiki>[[Category:English lemmas|WORD]]</nowiki></code> &rarr; ''(nothing)'']==] function export.remove_links(text, tag) if type(text) == "table" then text = text.args[1] end if not text or text == "" then return "" end text = text :gsub("%[%[", "\1") :gsub("%]%]", "\2") -- Parse internal links for the display text. text = text:gsub("(\1)([^\1\2]-)(\2)", function(c1, c2, c3) -- Don't remove files. for _, false_positive in ipairs({ "file", "image" }) do if c2:lower():match("^" .. false_positive .. ":") then return c1 .. c2 .. c3 end end -- Remove categories completely. for _, false_positive in ipairs({ "category", "cat" }) do if c2:lower():match("^" .. false_positive .. ":") then return "" end end -- In piped links, remove all text before the pipe, unless it's the final character (i.e. the pipe trick), in which case just remove the pipe. c2 = c2:match("^[^|]*|(.+)") or c2:match("([^|]+)|$") or c2 if tag then return "<link>" .. c2 .. "</link>" else return c2 end end) text = text :gsub("\1", "[[") :gsub("\2", "]]") return text end function export.section_link(link) if type(link) ~= "string" then error("The first argument to section_link was a " .. type(link) .. ", but it should be a string.") elseif link:find("\\", nil, true) then track("escaped", "section_link") end local target, section = get_fragment((link:gsub("_", " "))) if not section then error("No \"#\" delineating a section name") end return simple_link( target, section, target .. " §&nbsp;" .. section ) end return export b1tm8s3iluu9xeqd00vb8uqpa48jza3 मॉड्यूल:debug 828 136969 487657 477440 2026-09-01T20:22:37Z SM7 6218 updating... 487657 Scribunto text/plain local export = {} local string_utilities_module = "Module:string utilities" local table_module = "Module:table" local byte = string.byte local concat = table.concat local escape -- defined below local format = string.format local gsub = string.gsub local insert = table.insert local match = string.match local sub = string.sub local toNFC = mw.ustring.toNFC local function is_array(...) is_array = require(table_module).isArray return is_array(...) end local function isutf8(...) isutf8 = require(string_utilities_module).isutf8 return isutf8(...) end local function sorted_pairs(...) sorted_pairs = require(table_module).sortedPairs return sorted_pairs(...) end local function table_size(...) table_size = require(table_module).size return table_size(...) end do local escapes local function get_escapes() escapes, get_escapes = { ["\a"] = [[\a]], ["\b"] = [[\b]], ["\t"] = [[\t]], ["\n"] = [[\n]], ["\v"] = [[\v]], ["\f"] = [[\f]], ["\r"] = [[\r]], ["\""] = [[\"]], ["'"] = [[\']], ["\\"] = [[\\]], }, nil return escapes end local function escape_byte(ch) return (escapes or get_escapes())[ch] or format("\\%03d", byte(ch)) end local function escape_bytes(ch) return (gsub(ch, ".", escape_byte)) end local function escape_char(ch) local ch_len = #ch if ch_len == 1 then return escape_byte(ch) end local b = byte(ch) -- Matching bytes below \128 are all to be escaped, \128 to \191 can't -- be leading bytes in UTF-8, \192 and \193 could only occur in overlong -- encodings, so can't occur in UTF-8, U+0080 (\194\128) to U+009F -- (\194\159) are control characters, U+00A0 (\194\160) is the no-break -- space, and \245 to \255 could only occur in encodings for codepoints -- above U+10FFFF, so can't occur in UTF-8. if b < 194 or b > 244 or (b == 194 and byte(ch, 2) < 161) then return escape_bytes(ch) -- 2-byte encodings starting \194 to \223 are all valid, so no need to -- check them with isutf8(). If there are additional trailing -- bytes, escape them. elseif b < 224 then return ch_len == 2 and ch or (sub(ch, 1, 2) .. escape_bytes(sub(ch, 3))) end -- Check 3- and 4-byte encodings with isutf8(), as they might be -- invalid due to overlong encodings or being above U+10FFFF. As above, -- escape any additional trailing bytes. local n = b < 240 and 3 or 4 if ch_len == n then return isutf8(ch) and ch or escape_bytes(ch) elseif ch_len > n then local init_ch = sub(ch, 1, n) if isutf8(init_ch) then return init_ch .. escape_bytes(sub(ch, n + 1)) end end return escape_bytes(ch) end local function escape_non_NFC(str) local normalized = toNFC(str) if normalized == str then return str end local str_len, i, start, offset, output = #str, 1, 1, 0 while i <= str_len do local b = byte(str, i) if b == byte(normalized, i + offset) then i = i + 1 else if output == nil then output = {} end -- Backtrack to the start of the character. while b >= 128 and b < 192 do i = i - 1 b = byte(str, i) end -- Insert any intermediate characters up to this point. if start ~= i then insert(output, sub(str, start, i - 1)) end -- Get the first character, then find the sequence of characters -- which differs from the normalized string. local seq = match(str, "^.[\128-\191]*", i) -- Find the raw sequence and the normalized sequence by adding -- a character at a time to the raw sequence, and checking if -- it matches the current point in the normalized string. -- This is necessary to ensure that the offset between the two -- strings is correct, when comparing equivalent sections. local seq_len, poss_seq, norm_seq = #seq, seq while true do if not norm_seq then norm_seq = match(normalized, "^" .. toNFC(poss_seq), i + offset) -- Once a matching sequence has been found, check if it's -- still possible to match the same normalized sequence with -- a longer raw sequence, as form NFC will have taken the -- longest sequence when normalizing the input. elseif toNFC(poss_seq) ~= norm_seq then break end seq, seq_len = poss_seq, #poss_seq local nxt_ch = match(str, "^.[\128-\191]*", i + seq_len) if nxt_ch == nil then break end poss_seq = poss_seq .. nxt_ch end -- Modify the offset to account for the difference in length -- between the two sequences. Usually, the NFC form will be -- shorter, but in rare cases it is longer (e.g. U+0F73 -- normalizes to U+0F71 + U+0F72). offset = offset + #norm_seq - seq_len i = i + seq_len start = i -- Escape the non-ASCII portion of the sequence. This ensures -- that escapes added by escape_char don't end up double-escaped -- if they would otherwise be modified by form NFC; e.g. "\n" + -- U+0303 ("\ñ") needs to avoid escaping the "n". if seq ~= "" then insert(output, (gsub(seq, "[\128-\255]", escape_byte))) end end end if output == nil then return str end insert(output, sub(str, start)) return concat(output) end -- Escapes control characters, backslash, double quote, the no-break space, -- bytes that aren't used in UTF-8, invalid UTF-8 character sequences, and -- any bytes necessary to ensure that the output is Unicode form NFC, -- because MediaWiki automatically converts page content to form NFC; e.g. -- "e" + U+0301 ("é") results in "e\204\129", because otherwise the sequence -- would be converted to "é" (U+00E9)); this ensures that results can be -- relied upon to be stable if saved as part of page content. function export.escape(str) return escape_non_NFC(gsub(str, "[%c\"'\\\128-\255][\128-\191]*", escape_char)) end escape = export.escape end -- Convert a value to a string function export.dump(value, prefix, tsort) local t = type(value) prefix = prefix or "" if t == "string" then return '"' .. escape(value) .. '"' elseif t == "table" then local str_table = {} insert(str_table, " {") for key, val in sorted_pairs(value, tsort) do insert(str_table, " " .. prefix .. "\t[" .. export.dump(key, prefix .. "\t") .. "] = " .. gsub(export.dump(val, prefix .. "\t"), "^ ", "") .. ",") end insert(str_table, " " .. prefix .. "}") return concat(str_table, "\n") else return tostring(value) end end function export.highlight_dump(value, prefix, tsort, options) options = options or {} local func = options.modified and "modified_dump" or "dump" local dump = export[func](value, prefix, tsort) -- Remove spaces at beginnings of lines (which are simply to force a <pre></pre> tag). dump = gsub(dump, "%f[^%z\n] ", "") return export.highlight(dump) end -- Returns true if table contains a table as one of its values local function containsTable(t) for _, value in pairs(t) do if type(value) == "table" then return true end end return false end local function containsTablesWithSize(t, size) for _, value in pairs(t) do if type(value) == "table" and table_size(value) ~= size then return false end end return true end --[=[ Convert a value to a string. Like dump below, but if a table has consecutive numbered keys and does not have a table as one of its values, it will be placed on a single line. Used by [[Module:User:Erutuon/script recognition]]. ]=] function export.modified_dump(value, prefix, tsort) local t = type(value) prefix = prefix or "" if t == "string" then return '"' .. value .. '"' elseif t == "table" then local str_table = {} local containsTable = containsTable(value) local consecutive = is_array(value) if consecutive and not containsTable or containsTable and containsTablesWithSize(value, 3) then insert(str_table, "{") for key, val in sorted_pairs(value, tsort) do if containsTable then insert(str_table, "\n\t" .. prefix) else insert(str_table, " ") end if type(key) == "string" then insert(str_table, "[" .. export.modified_dump(key) .. "] = ") end insert(str_table, type(key) == "number" and type(val) == "number" and format("0x%05X", val) or export.modified_dump(val)) if not (consecutive and #value == 3) or type(key) == "number" and value[key + 1] then insert(str_table, ",") end end if containsTable then insert(str_table, "\n" .. prefix) else insert(str_table, " ") end insert(str_table, "}") return concat(str_table) end insert(str_table, " {") for key, val in sorted_pairs(value, tsort) do insert(str_table, " " .. prefix .. "\t[" .. export.modified_dump(key, prefix .. "\t") .. "] = " .. gsub(export.modified_dump(val, prefix .. "\t"), "^ ", "") .. ",") end insert(str_table, " " .. prefix .. "}") return concat(str_table, "\n") elseif t == "number" and value > 46 then return format("0x%05X", value) else return tostring(value) end end export.track = require("Module:debug/track") -- Trigger a script error from a template function export.error(frame) error(frame.args[1] or "(no message specified)") end --[[ Convenience function for generating syntaxhighlight tags. Display defaults to block. Options is a table. To display inline text with HTML highlighting: { inline = true, lang = "html" } ]] function export.highlight(content, options) if type(content) == "table" then options = content options = { lang = options.lang or "lua", inline = options.inline and true } return function(content) return mw.getCurrentFrame():extensionTag("syntaxhighlight", content, options) end else return mw.getCurrentFrame():extensionTag("syntaxhighlight", content, { lang = options and options.lang or "lua", inline = options and options.inline and true or nil }) end end function export.track_unrecognized_args(args, template_name) local function track(code) export.track(template_name .. "/" .. code) end track("unrecognized arg") local arg_list = {} for arg, value in pairs(args) do track("unrecognized arg/" .. arg) insert(arg_list, format("|%s=%s", arg, value)) end mw.log(format("Unrecognized parameter%s in {{%s}}: %s.", arg_list[2] and "s" or "", template_name, concat(arg_list, ", ") )) end do local placeholder = "_message_" function export._placeholder_error(frame) -- A dummy function that throws an error with a placeholder message. error(placeholder, (frame.args.level or 1) + 6) end -- Throw an error via callParserFunction, which generates a real error with traceback, automatic categorization in [[CAT:E]] etc., but the error message is returned as a string. Then, replace the placeholder error message with `message`, which is preprocessed. This is necessary when preprocessing needs to be applied (e.g. when using <pre> tags), since otherwise strip markers and other half-processed text gets displayed instead. function export.formatted_error(message, level) local frame = mw.getCurrentFrame() return (frame:callParserFunction("#invoke", {"debug", "_placeholder_error", level = level}) :gsub(placeholder, frame:preprocess(message))) end end return export flmvh7jakbzodr3hhecvopt1m6pdzph मॉड्यूल:languages 828 302122 487603 479120 2026-09-01T18:10:33Z SM7 6218 updating...BIG 487603 Scribunto text/plain --[==[ intro: This module implements fetching of language-specific information and processing text in a given language. ===Types of languages=== There are two types of languages: full languages and etymology-only languages. The essential difference is that only full languages appear in L2 headings in vocabulary entries, and hence categories like [[:Category:French nouns]] exist only for full languages. Etymology-only languages have either a full language or another etymology-only language as their parent (in the parent-child inheritance sense), and for etymology-only languages with another etymology-only language as their parent, a full language can always be derived by following the parent links upwards. For example, "Canadian French", code `fr-CA`, is an etymology-only language whose parent is the full language "French", code `fr`. An example of an etymology-only language with another etymology-only parent is "Northumbrian Old English", code `ang-nor`, which has "Anglian Old English", code `ang-ang` as its parent; this is an etymology-only language whose parent is "Old English", code `ang`, which is a full language. (This is because Northumbrian Old English is considered a variety of Anglian Old English.) Sometimes the parent is the "Undetermined" language, code `und`; this is the case, for example, for "substrate" languages such as "Pre-Greek", code `qsb-grc`, and "the BMAC substrate", code `qsb-bma`. It is important to distinguish language ''parents'' from language ''ancestors''. The parent-child relationship is one of containment, i.e. if X is a child of Y, X is considered a variety of Y. On the other hand, the ancestor-descendant relationship is one of descent in time. For example, "Classical Latin", code `la-cla`, and "Late Latin", code `la-lat`, are both etymology-only languages with "Latin", code `la`, as their parents, because both of the former are varieties of Latin. However, Late Latin does *NOT* have Classical Latin as its parent because Late Latin is *not* a variety of Classical Latin; rather, it is a descendant. There is in fact a separate `ancestors` field that is used to express the ancestor-descendant relationship, and Late Latin's ancestor is given as Classical Latin. It is also important to note that sometimes an etymology-only language is actually the conceptual ancestor of its parent language. This happens, for example, with "Old Italian" (code `roa-oit`), which is an etymology-only variant of full language "Italian" (code `it`), and with "Old Latin" (code `itc-ola`), which is an etymology-only variant of Latin. In both cases, the full language has the etymology-only variant listed as an ancestor. This allows a Latin term to inherit from Old Latin using the {{tl|inh}} template (where in this template, "inheritance" refers to ancestral inheritance, i.e. inheritance in time, rather than in the parent-child sense); likewise for Italian and Old Italian. Full languages come in three subtypes: * {regular}: This indicates a full language that is attested according to [[WT:CFI]] and therefore permitted in the main namespace. There may also be reconstructed terms for the language, which are placed in the {Reconstruction} namespace and must be prefixed with * to indicate a reconstruction. Most full languages are natural (not constructed) languages, but a few constructed languages (e.g. Esperanto and Volapük, among others) are also allowed in the mainspace and considered regular languages. * {reconstructed}: This language is not attested according to [[WT:CFI]], and therefore is allowed only in the {Reconstruction} namespace. All terms in this language are reconstructed, and must be prefixed with *. Languages such as Proto-Indo-European and Proto-Germanic are in this category. * {appendix-constructed}: This language is attested but does not meet the additional requirements set out for constructed languages ([[WT:CFI#Constructed languages]]). Its entries must therefore be in the Appendix namespace, but they are not reconstructed and therefore should not have * prefixed in links. Most constructed languages are of this subtype. Both full languages and etymology-only languages have a {Language} object associated with them, which is fetched using the {getByCode} function in [[Module:languages]] to convert a language code to a {Language} object. Depending on the options supplied to this function, etymology-only languages may or may not be accepted, and family codes may be accepted (returning a {Family} object as described in [[Module:families]]). There are also separate {getByCanonicalName} functions in [[Module:languages]] and [[Module:etymology languages]] to convert a language's canonical name to a {Language} object (depending on whether the canonical name refers to a full or etymology-only language). ===Textual representations=== Textual strings belonging to a given language come in several different ''text variants'': # The ''input text'' is what the user supplies in wikitext, in the parameters to {{tl|m}}, {{tl|l}}, {{tl|ux}}, {{tl|t}}, {{tl|lang}} and the like. # The ''corrected input text'' is the input text with some corrections and/or normalizations applied, such as bad-character replacements for certain languages, like replacing `l` or `1` to [[palochka]] in some languages written in Cyrillic. (FIXME: This currently goes under the name ''display text'' but that will be repurposed below. Also, [[User:Surjection]] suggests renaming this to ''normalized input text'', but "normalized" is used in a different sense in [[Module:usex]].) # The ''display text'' is the text in the form as it will be displayed to the user. This is what appears in headwords, in usexes, in displayed internal links, etc. This can include accent marks that are removed to form the stripped display text (see below), as well as embedded bracketed links that are variously processed further. The display text is generated from the corrected input text by applying language-specific transformations; for most languages, there will be no such transformations. The general reason for having a difference between input and display text is to allow for extra information in the input text that is not displayed to the user but is sent to the transliteration module. Note that having different display and input text is only supported currently through special-casing but will be generalized. Examples of transformations are: (1) Removing the {{cd|^}} that is used in certain East Asian (and possibly other unicameral) languages to indicate capitalization of the transliteration (which is currently special-cased); (2) for Korean, removing or otherwise processing hyphens (which is currently special-cased); (3) for Arabic, removing a ''sukūn'' diacritic placed over a ''tāʔ marbūṭa'' (like this: ةْ) to indicate that the ''tāʔ marbūṭa'' is pronounced and transliterated as /t/ instead of being silent [NOTE, NOT IMPLEMENTED YET]; (4) for Thai and Khmer, converting space-separated words to bracketed words and resolving respelling substitutions such as `[กรีน/กฺรีน]`, which indicate how to transliterate given words [NOTE, NOT IMPLEMENTED YET except in language-specific templates like {{tl|th-usex}}]. ## The ''right-resolved display text'' is the result of removing brackets around one-part embedded links and resolving two-part embedded links into their right-hand components (i.e. converting two-part links into the displayed form). The process of right-resolution is what happens when you call {{cd|remove_links()}} in [[Module:links]] on some text. When applied to the display text, it produces exactly what the user sees, without any link markup. # The ''stripped display text'' is the result of applying diacritic-stripping to the display text. ## The ''left-resolved stripped display text'' [NEED BETTER NAME] is the result of applying left-resolution to the stripped display text, i.e. similar to right-resolution but resolving two-part embedded links into their left-hand components (i.e. the linked-to page). If the display text refers to a single page, the resulting of applying diacritic stripping and left-resolution produces the ''logical pagename''. # The ''physical pagename text'' is the result of converting the stripped display text into physical page links. If the stripped display text contains embedded links, the left side of those links is converted into physical page links; otherwise, the entire text is considered a pagename and converted in the same fashion. The conversion does three things: (1) converts characters not allowed in pagenames into their "unsupported title" representation, e.g. {{cd|Unsupported titles/`gt`}} in place of the logical name {{cd|>}}; (2) handles certain special-cased unsupported-title logical pagenames, such as {{cd|Unsupported titles/Space}} in place of {{cd|[space]}} and {{cd|Unsupported titles/Ancient Greek dish}} in place of a very long Greek name for a gourmet dish as found in Aristophanes; (3) converts "mammoth" pagenames such as [[a]] into their appropriate split component, e.g. [[a/languages A to L]]. # The ''source translit text'' is the text as supplied to the language-specific {{cd|transliterate()}} method. The form of the source translit text may need to be language-specific, e.g Thai and Khmer will need the corrected input text, whereas other languages may need to work off the display text. [FIXME: It's still unclear to me how embedded bracketed links are handled in the existing code.] In general, embedded links need to be right-resolved (see above), but when this happens is unclear to me [FIXME]. Some languages have a chop-up-and-paste-together scheme that sends parts of the text through the transliterate mechanism, and for others (those listed with "cont" in {{cd|substitution}} in [[Module:languages/data]]) they receive the full input text, but preprocessed in certain ways. (The wisdom of this is still unclear to me.) # The ''transliterated text'' (or ''transliteration'') is the result of transliterating the source translit text. Unlike for all the other text variants except the transcribed text, it is always in the Latin script. # The ''transcribed text'' (or ''transcription'') is the result of transcribing the source translit text, where "transcription" here means a close approximation to the phonetic form of the language in languages (e.g. Akkadian, Sumerian, Ancient Egyptian, maybe Tibetan) that have a wide difference between the written letters and spoken form. Unlike for all the other text variants other than the transliterated text, it is always in the Latin script. Currently, the transcribed text is always supplied manually be the user; there is no such thing as a {{cd|transcribe()}} method on language objects. # The ''sort key'' is the text used in sort keys for determining the placing of pages in categories they belong to. The sort key is generated from the pagename or a specified ''sort base'' by lowercasing, doing language-specific transformations and then uppercasing the result. If the sort base is supplied and is generated from input text, it needs to be converted to display text, have embedded links removed through right-resolution and have diacritic-stripping applied. # There are other text variants that occur in usexes (specifically, there are normalized variants of several of the above text variants), but we can skip them for now. The following methods exist on {Language} objects to convert between different text variants: # {correctInputText} (currently called {makeDisplayText}): This converts input text to corrected input text. # {stripDiacritics}: This converts to stripped display text. [FIXME: This needs some rethinking. In particular, {stripDiacritics} is sometimes called on input text, corrected input text or display text (in various paths inside of [[Module:links]], and, in the case of input text, usually from other modules). We need to make sure we don't try to convert input text to display text twice, but at the same time we need to support calling it directly on input text since so many modules do this. This means we need to add a parameter indicating whether the passed-in text is input, corrected input, or display text; if the former two, we call {correctInputText} ourselves.] # {logicalToPhysical}: This converts logical pagenames to physical pagenames. # {transliterate}: This appears to convert input text with embedded brackets removed into a transliteration. [FIXME: This needs some rethinking. In particular, it calls {processDisplayText} on its input, which won't work for Thai and Khmer, so we may need language-specific flags indicating whether to pass the input text directly to the language transliterate method. In addition, I'm not sure how embedded links are handled in the existing translit code; a lot of callers remove the links themselves before calling {transliterate()}, which I assume is wrong.] # {makeSortKey}: This converts display text (?) to a sort key. [FIXME: Clarify this.] ]==] local export = {} local debug_track_module = "Module:debug/track" local etymology_languages_data_module = "Module:etymology languages/data" local families_module = "Module:families" local headword_page_module = "Module:headword/page" local json_module = "Module:JSON" local language_like_module = "Module:language-like" local languages_data_module = "Module:languages/data" local languages_data_patterns_module = "Module:languages/data/patterns" local links_data_module = "Module:links/data" local load_module = "Module:load" local scripts_module = "Module:scripts" local scripts_data_module = "Module:scripts/data" local string_encode_entities_module = "Module:string/encode entities" local string_pattern_escape_module = "Module:string/patternEscape" local string_replacement_escape_module = "Module:string/replacementEscape" local string_utilities_module = "Module:string utilities" local table_module = "Module:table" local utilities_module = "Module:utilities" local wikimedia_languages_module = "Module:wikimedia languages" local mw = mw local string = string local table = table local char = string.char local concat = table.concat local find = string.find local floor = math.floor local get_by_code -- Defined below. local get_data_module_name -- Defined below. local get_extra_data_module_name -- Defined below. local getmetatable = getmetatable local gmatch = string.gmatch local gsub = string.gsub local insert = table.insert local ipairs = ipairs local is_known_language_tag = mw.language.isKnownLanguageTag local make_object -- Defined below. local match = string.match local next = next local pairs = pairs local remove = table.remove local require = require local select = select local setmetatable = setmetatable local sub = string.sub local type = type local unstrip = mw.text.unstrip -- Loaded as needed by findBestScript. local Hans_chars local Hant_chars local function check_object(...) check_object = require(utilities_module).check_object return check_object(...) end local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local function decode_entities(...) decode_entities = require(string_utilities_module).decode_entities return decode_entities(...) end local function decode_uri(...) decode_uri = require(string_utilities_module).decode_uri return decode_uri(...) end local function deep_copy(...) deep_copy = require(table_module).deepCopy return deep_copy(...) end local function encode_entities(...) encode_entities = require(string_encode_entities_module) return encode_entities(...) end local function get_L2_sort_key(...) get_L2_sort_key = require(headword_page_module).get_L2_sort_key return get_L2_sort_key(...) end local function get_script(...) get_script = require(scripts_module).getByCode return get_script(...) end local function find_best_script_without_lang(...) find_best_script_without_lang = require(scripts_module).findBestScriptWithoutLang return find_best_script_without_lang(...) end local function get_family(...) get_family = require(families_module).getByCode return get_family(...) end local function get_plaintext(...) get_plaintext = require(utilities_module).get_plaintext return get_plaintext(...) end local function get_wikimedia_lang(...) get_wikimedia_lang = require(wikimedia_languages_module).getByCode return get_wikimedia_lang(...) end local function keys_to_list(...) keys_to_list = require(table_module).keysToList return keys_to_list(...) end local function list_to_set(...) list_to_set = require(table_module).listToSet return list_to_set(...) end local function load_data(...) load_data = require(load_module).load_data return load_data(...) end local function make_family_object(...) make_family_object = require(families_module).makeObject return make_family_object(...) end local function pattern_escape(...) pattern_escape = require(string_pattern_escape_module) return pattern_escape(...) end local function replacement_escape(...) replacement_escape = require(string_replacement_escape_module) return replacement_escape(...) end local function safe_require(...) safe_require = require(load_module).safe_require return safe_require(...) end local function shallow_copy(...) shallow_copy = require(table_module).shallowCopy return shallow_copy(...) end local function split(...) split = require(string_utilities_module).split return split(...) end local function to_json(...) to_json = require(json_module).toJSON return to_json(...) end local function u(...) u = require(string_utilities_module).char return u(...) end local function ugsub(...) ugsub = require(string_utilities_module).gsub return ugsub(...) end local function ulen(...) ulen = require(string_utilities_module).len return ulen(...) end local function ulower(...) ulower = require(string_utilities_module).lower return ulower(...) end local function umatch(...) umatch = require(string_utilities_module).match return umatch(...) end local function uupper(...) uupper = require(string_utilities_module).upper return uupper(...) end local function track(page) debug_track("languages/" .. page) return true end local function normalize_code(code) return load_data(languages_data_module).aliases[code] or code end local function check_inputs(self, check, default, ...) local n = select("#", ...) if n == 0 then return false end local ret = check(self, (...)) if ret ~= nil then return ret elseif n > 1 then local inputs = {...} for i = 2, n do ret = check(self, inputs[i]) if ret ~= nil then return ret end end end return default end local function make_link(self, target, display) local prefix, main if self:getFamilyCode() == "qfa-sub" then prefix, main = display:match("^(the )(.*)") if not prefix then prefix, main = display:match("^(a )(.*)") end end return (prefix or "") .. "[[" .. target .. "|" .. (main or display) .. "]]" end -- Convert risky characters to HTML entities, which minimizes interference once returned (e.g. for "sms:a", "<!-- -->" etc.). local function escape_risky_characters(text) -- Spacing characters in isolation generally need to be escaped in order to be properly processed by the MediaWiki software. if umatch(text, "^%s*$") then return encode_entities(text, text) end return encode_entities(text, "!#%&*+/:;<=>?@[\\]_{|}") end -- Temporarily convert various formatting characters to PUA to prevent them from being disrupted by the substitution process. local function doTempSubstitutions(text, subbedChars, keepCarets, noTrim) -- Clone so that we don't insert any extra patterns into the table in package.loaded. For some reason, using require seems to keep memory use down; probably because the table is always cloned. local patterns = shallow_copy(require(languages_data_patterns_module)) if keepCarets then insert(patterns, "((\\+)%^)") insert(patterns, "((%^))") end -- Ensure any whitespace at the beginning and end is temp substituted, to prevent it from being accidentally trimmed. We only want to trim any final spaces added during the substitution process (e.g. by a module), which means we only do this during the first round of temp substitutions. if not noTrim then insert(patterns, "^([\128-\191\244]*(%s+))") insert(patterns, "((%s+)[\128-\191\244]*)$") end -- Pre-substitution, of "[[" and "]]", which makes pattern matching more accurate. text = gsub(text, "%f[%[]%[%[", "\1"):gsub("%f[%]]%]%]", "\2") local i = #subbedChars for _, pattern in ipairs(patterns) do -- Patterns ending in \0 stand are for things like "[[" or "]]"), so the inserted PUA are treated as breaks between terms by modules that scrape info from pages. local term_divider pattern = gsub(pattern, "%z$", function(divider) term_divider = divider == "\0" return "" end) text = gsub(text, pattern, function(...) local m = {...} local m1New = m[1] for k = 2, #m do local n = i + k - 1 subbedChars[n] = m[k] local byte2 = floor(n / 4096) % 64 + (term_divider and 128 or 136) local byte3 = floor(n / 64) % 64 + 128 local byte4 = n % 64 + 128 m1New = gsub(m1New, pattern_escape(m[k]), "\244" .. char(byte2) .. char(byte3) .. char(byte4), 1) end i = i + #m - 1 return m1New end) end text = gsub(text, "\1", "%[%["):gsub("\2", "%]%]") return text, subbedChars end -- Reinsert any formatting that was temporarily substituted. local function undoTempSubstitutions(text, subbedChars) for i = 1, #subbedChars do local byte2 = floor(i / 4096) % 64 + 128 local byte3 = floor(i / 64) % 64 + 128 local byte4 = i % 64 + 128 text = gsub(text, "\244[" .. char(byte2) .. char(byte2+8) .. "]" .. char(byte3) .. char(byte4), replacement_escape(subbedChars[i])) end text = gsub(text, "\1", "%[%["):gsub("\2", "%]%]") return text end -- Check if the raw text is an unsupported title, and if so return that. Otherwise, remove HTML entities. We do the pre-conversion to avoid loading the unsupported title list unnecessarily. local function checkNoEntities(self, text) local textNoEnc = decode_entities(text) if textNoEnc ~= text and load_data(links_data_module).unsupported_titles[text] then return text else return textNoEnc end end -- If no script object is provided (or if it's invalid or None), get one. local function checkScript(text, self, sc) if not check_object("script", true, sc) or sc:getCode() == "None" then return self:findBestScript(text) end return sc end local function normalize(text, sc) text = sc:fixDiscouragedSequences(text) return sc:toFixedNFD(text) end -- Subfunction of iterateSectionSubstitutions(). Process an individual chunk of text according to the specifications in -- `substitution_data`. The input parameters are all as in the documentation of iterateSectionSubstitutions() except for -- `recursed`, which is set to true if we called ourselves recursively to process a script-specific setting or -- script-wide fallback. Returns two values: the processed text and the actual substitution data used to do the -- substitutions (same as the `actual_substitution_data` return value to iterateSectionSubstitutions()). local function doSubstitutions(self, text, sc, substitution_data, data_field, function_name, recursed) -- BE CAREFUL in this function because the value at any level can be `false`, which causes no processing to be done -- and blocks any further fallback processing. local actual_substitution_data = substitution_data -- If there are language-specific substitutes given in the data module, use those. if type(substitution_data) == "table" then -- If a script is specified, run this function with the script-specific data before continuing. local sc_code = sc:getCode() local has_substitution_data = false if substitution_data[sc_code] ~= nil then has_substitution_data = true if substitution_data[sc_code] then text, actual_substitution_data = doSubstitutions(self, text, sc, substitution_data[sc_code], data_field, function_name, true) end -- Hant, Hans and Hani are usually treated the same, so add a special case to avoid having to specify each one -- separately. elseif sc_code:match("^Han") and substitution_data.Hani ~= nil then has_substitution_data = true if substitution_data.Hani then text, actual_substitution_data = doSubstitutions(self, text, sc, substitution_data.Hani, data_field, function_name, true) end -- Substitution data with key 1 in the outer table may be given as a fallback. elseif substitution_data[1] ~= nil then has_substitution_data = true if substitution_data[1] then text, actual_substitution_data = doSubstitutions(self, text, sc, substitution_data[1], data_field, function_name, true) end end -- Iterate over all strings in the "from" subtable, and gsub with the corresponding string in "to". We work with -- the NFD decomposed forms, as this simplifies many substitutions. if substitution_data.from then has_substitution_data = true for i, from in ipairs(substitution_data.from) do -- Normalize each loop, to ensure multi-stage substitutions work correctly. text = sc:toFixedNFD(text) text = ugsub(text, sc:toFixedNFD(from), substitution_data.to[i] or "") end end if substitution_data.remove_diacritics then has_substitution_data = true text = sc:toFixedNFD(text) -- Convert exceptions to PUA. local remove_exceptions, substitutes = substitution_data.remove_exceptions if remove_exceptions then substitutes = {} local i = 0 for _, exception in ipairs(remove_exceptions) do exception = sc:toFixedNFD(exception) text = ugsub(text, exception, function(m) i = i + 1 local subst = u(0x80000 + i) substitutes[subst] = m return subst end) end end -- Strip diacritics. text = ugsub(text, "[" .. substitution_data.remove_diacritics .. "]", "") -- Convert exceptions back. if remove_exceptions then text = text:gsub("\242[\128-\191]*", substitutes) end end if not has_substitution_data and sc._data[data_field] then -- If language-specific sort key (etc.) is nil, fall back to script-wide sort key (etc.). text, actual_substitution_data = doSubstitutions(self, text, sc, sc._data[data_field], data_field, function_name, true) end elseif type(substitution_data) == "string" then -- If there is a dedicated function module, use that. local module = safe_require("Module:" .. substitution_data) if module then -- TODO: translit functions should take objects, not codes. -- TODO: translit functions should be called with form NFD. if function_name == "tr" then if not module[function_name] then error(("Internal error: Module [[%s]] has no function named 'tr'"):format(substitution_data)) end text = module[function_name](text, self._code, sc:getCode()) elseif function_name == "stripDiacritics" then -- FIXME, get rid of this arm after renaming makeEntryName -> stripDiacritics. if module[function_name] then text = module[function_name](sc:toFixedNFD(text), self, sc) elseif module.makeEntryName then text = module.makeEntryName(sc:toFixedNFD(text), self, sc) else error(("Internal error: Module [[%s]] has no function named 'stripDiacritics' or 'makeEntryName'" ):format(substitution_data)) end else if not module[function_name] then error(("Internal error: Module [[%s]] has no function named '%s'"):format( substitution_data, function_name)) end text = module[function_name](sc:toFixedNFD(text), self, sc) end else error("Substitution data '" .. substitution_data .. "' does not match an existing module.") end elseif substitution_data == nil and sc._data[data_field] then -- If language-specific sort key (etc.) is nil, fall back to script-wide sort key (etc.). text, actual_substitution_data = doSubstitutions(self, text, sc, sc._data[data_field], data_field, function_name, true) end -- Don't normalize to NFC if this is the inner loop or if a module returned nil. if recursed or not text then return text, actual_substitution_data end -- Fix any discouraged sequences created during the substitution process, and normalize into the final form. return sc:toFixedNFC(sc:fixDiscouragedSequences(text)), actual_substitution_data end -- Split the text into sections, based on the presence of temporarily substituted formatting characters, then iterate -- over each section to apply substitutions (e.g. transliteration or diacritic stripping). This avoids putting PUA -- characters through language-specific modules, which may be unequipped for them. This function is passed the following -- values: -- * `self` (the Language object); -- * `text` (the text to process); -- * `sc` (the script of the text, which must be specified; callers should call checkScript() as needed to autodetect the -- script of the text if not given explicitly by the user); -- * `subbedChars` (an array of the same length as the text, indicating which characters have been substituted and by -- what, or {nil} if no substitutions are to happen); -- * `keepCarets` (DOCUMENT ME); -- * `substitution_data` (the data indicating which substitutions to apply, taken directly from `data_field` in the -- language's data structure in a submodule of [[Module:languages/data]]); -- * `data_field` (the data field from which `substitution_data` was fetched, such as "sort_key" or "strip_diacritics"); -- * `function_name` (the name of the function to call to do the substitution, in case `substitution_data` specifies a -- module to do the substitution); -- * `notrim` (don't trim whitespace at the edges of `text`; set when computing the sort key, because whitespace at the -- beginning of a sort key is significant and causes the resulting page to be sorted at the beginning of the category -- it's in). -- Returns three values: -- (1) the processed text; -- (2) the value of `subbedChars` that was passed in, possibly modified with additional character substitutions; will be -- {nil} if {nil} was passed in; -- (3) the actual substitution data that was used to apply substitutions to `text`; this may be different from the value -- of `substitution_data` passed in if that value recursively specified script-specific substitutions or if no -- substitution data could be found in the language-specific data (e.g. {nil} was passed in or a structure was passed -- in that had no setting for the script given in `sc`), but a script-wide fallback value was set; currently it is -- only used by makeSortKey(). local function iterateSectionSubstitutions(self, text, sc, subbedChars, keepCarets, substitution_data, data_field, function_name, notrim) local sections -- See [[Module:languages/data]]. if not find(text, "\244") or load_data(languages_data_module).substitution[self._code] == "cont" then sections = {text} else sections = split(text, "\244[\128-\143][\128-\191]*", true) end local actual_substitution_data for _, section in ipairs(sections) do -- Don't bother processing empty strings or whitespace (which may also not be handled well by dedicated -- modules). if gsub(section, "%s+", "") ~= "" then local sub, this_actual_substitution_data = doSubstitutions(self, section, sc, substitution_data, data_field, function_name) actual_substitution_data = this_actual_substitution_data -- Second round of temporary substitutions, in case any formatting was added by the main substitution -- process. However, don't do this if the section contains formatting already (as it would have had to have -- been escaped to reach this stage, and therefore should be given as raw text). if sub and subbedChars then local noSub for _, pattern in ipairs(require(languages_data_patterns_module)) do if match(section, pattern .. "%z?") then noSub = true end end if not noSub then sub, subbedChars = doTempSubstitutions(sub, subbedChars, keepCarets, true) end end if not sub then text = sub break end text = sub and gsub(text, pattern_escape(section), replacement_escape(sub), 1) or text end end if not notrim then -- Trim, unless there are only spacing characters, while ignoring any final formatting characters. -- Do not trim sort keys because spaces at the beginning are significant. text = text and text:gsub("^([\128-\191\244]*)%s+(%S)", "%1%2"):gsub("(%S)%s+([\128-\191\244]*)$", "%1%2") or nil end return text, subbedChars, actual_substitution_data end -- Process carets (and any escapes). Default to simple removal, if no pattern/replacement is given. local function processCarets(text, pattern, repl) local rep repeat text, rep = gsub(text, "\\\\(\\*^)", "\3%1") until rep == 0 return (text:gsub("\\^", "\4") :gsub(pattern or "%^", repl or "") :gsub("\3", "\\") :gsub("\4", "^")) end -- Remove carets if they are used to capitalize parts of transliterations (unless they have been escaped). local function removeCarets(text, sc) if not sc:hasCapitalization() and sc:isTransliterated() and text:find("^", 1, true) then return processCarets(text) else return text end end local Language = {} --[==[Returns the language code of the language. Example: {{code|lua|"fr"}} for French.]==] function Language:getCode() return self._code end --[==[Returns the canonical name of the language. This is the name used to represent that language on Wiktionary, and is guaranteed to be unique to that language alone. Example: {{code|lua|"French"}} for French.]==] function Language:getCanonicalName() local name = self._name if name == nil then name = self._data[1] self._name = name end return name end --[==[ Return the display form of the language. The display form of a language, family or script is the form it takes when appearing as the <code><var>source</var></code> in categories such as <code>English terms derived from <var>source</var></code> or <code>English given names from <var>source</var></code>, and is also the displayed text in {makeCategoryLink()} links. For full and etymology-only languages, this is the same as the canonical name, but for families, it reads <code>"<var>name</var> languages"</code> (e.g. {"Indo-Iranian languages"}), and for scripts, it reads <code>"<var>name</var> script"</code> (e.g. {"Arabic script"}). ]==] function Language:getDisplayForm() local form = self._displayForm if form == nil then form = self:getCanonicalName() -- Add article and " substrate" to substrates that lack them. if self:getFamilyCode() == "qfa-sub" then if not (sub(form, 1, 4) == "the " or sub(form, 1, 2) == "a ") then form = "a " .. form end if not match(form, " [Ss]ubstrate") then form = form .. " substrate" end end self._displayForm = form end return form end --[==[Returns the value which should be used in the HTML lang= attribute for tagged text in the language.]==] function Language:getHTMLAttribute(sc, region) local code = self._code if not find(code, "-", 1, true) then return code .. "-" .. sc:getCode() .. (region and "-" .. region or "") end local parent = self:getParent() region = region or match(code, "%f[%u][%u-]+%f[%U]") if parent then return parent:getHTMLAttribute(sc, region) end -- TODO: ISO family codes can also be used. return "mis-" .. sc:getCode() .. (region and "-" .. region or "") end --[==[Returns a table of the aliases that the language is known by, excluding the canonical name. Aliases are synonyms for the language in question. The names are not guaranteed to be unique, in that sometimes more than one language is known by the same name. Example: {{code|lua|{"High German", "New High German", "Deutsch"} }} for [[:Category:German language|German]].]==] function Language:getAliases() self:loadInExtraData() return require(language_like_module).getAliases(self) end --[==[ Return a table of the known subvarieties of a given language, excluding subvarieties that have been given explicit etymology-only language codes. The names are not guaranteed to be unique, in that sometimes a given name refers to a subvariety of more than one language. Example: {{code|lua|{"Southern Aymara", "Central Aymara"} }} for [[:Category:Aymara language|Aymara]]. Note that the returned value can have nested tables in it, when a subvariety goes by more than one name. Example: {{code|lua|{"North Azerbaijani", "South Azerbaijani", {"Afshar", "Afshari", "Afshar Azerbaijani", "Afchar"}, {"Qashqa'i", "Qashqai", "Kashkay"}, "Sonqor"} }} for [[:Category:Azerbaijani language|Azerbaijani]]. Here, for example, Afshar, Afshari, Afshar Azerbaijani and Afchar all refer to the same subvariety, whose preferred name is Afshar (the one listed first). To avoid a return value with nested tables in it, specify a non-{{code|lua|nil}} value for the <code>flatten</code> parameter; in that case, the return value would be {{code|lua|{"North Azerbaijani", "South Azerbaijani", "Afshar", "Afshari", "Afshar Azerbaijani", "Afchar", "Qashqa'i", "Qashqai", "Kashkay", "Sonqor"} }}. ]==] function Language:getVarieties(flatten) self:loadInExtraData() return require(language_like_module).getVarieties(self, flatten) end --[==[Returns a table of the "other names" that the language is known by, which are listed in the <code>otherNames</code> field. It should be noted that the <code>otherNames</code> field itself is deprecated, and entries listed there should eventually be moved to either <code>aliases</code> or <code>varieties</code>.]==] function Language:getOtherNames() -- To be eventually removed, once there are no more uses of the `otherNames` field. self:loadInExtraData() return require(language_like_module).getOtherNames(self) end --[==[ Return a combined table of the canonical name, aliases, varieties and other names of a given language.]==] function Language:getAllNames() self:loadInExtraData() return require(language_like_module).getAllNames(self) end --[==[Returns a table of types as a lookup table (with the types as keys). The possible types are * {language}: This is a language, either full or etymology-only. * {full}: This is a "full" (not etymology-only) language, i.e. the union of {regular}, {reconstructed} and {appendix-constructed}. Note that the types {full} and {etymology-only} also exist for families, so if you want to check specifically for a full language and you have an object that might be a family, you should use {{lua|hasType("language", "full")}} and not simply {{lua|hasType("full")}}. * {etymology-only}: This is an etymology-only (not full) language, whose parent is another etymology-only language or a full language. Note that the types {full} and {etymology-only} also exist for families, so if you want to check specifically for an etymology-only language and you have an object that might be a family, you should use {{lua|hasType("language", "etymology-only")}} and not simply {{lua|hasType("etymology-only")}}. * {regular}: This indicates a full language that is attested according to [[WT:CFI]] and therefore permitted in the main namespace. There may also be reconstructed terms for the language, which are placed in the {Reconstruction} namespace and must be prefixed with * to indicate a reconstruction. Most full languages are natural (not constructed) languages, but a few constructed languages (e.g. Esperanto and Volapük, among others) are also allowed in the mainspace and considered regular languages. * {reconstructed}: This language is not attested according to [[WT:CFI]], and therefore is allowed only in the {Reconstruction} namespace. All terms in this language are reconstructed, and must be prefixed with *. Languages such as Proto-Indo-European and Proto-Germanic are in this category. * {appendix-constructed}: This language is attested but does not meet the additional requirements set out for constructed languages ([[WT:CFI#Constructed languages]]). Its entries must therefore be in the Appendix namespace, but they are not reconstructed and therefore should not have * prefixed in links. ]==] function Language:getTypes() local types = self._types if types == nil then types = {language = true} if self:getFullCode() == self._code then types.full = true else types["etymology-only"] = true end for t in gmatch(self._data.type, "[^,]+") do types[t] = true end self._types = types end return types end --[==[Given a list of types as strings, returns true if the language has all of them.]==] function Language:hasType(...) Language.hasType = require(language_like_module).hasType return self:hasType(...) end --[==[Returns a table containing <code>WikimediaLanguage</code> objects (see [[Module:wikimedia languages]]), which represent languages and their codes as they are used in Wikimedia projects for interwiki linking and such. More than one object may be returned, as a single Wiktionary language may correspond to multiple Wikimedia languages. For example, Wiktionary's single code <code>sh</code> (Serbo-Croatian) maps to four Wikimedia codes: <code>sh</code> (Serbo-Croatian), <code>bs</code> (Bosnian), <code>hr</code> (Croatian) and <code>sr</code> (Serbian). The code for the Wikimedia language is retrieved from the <code>wikimedia_codes</code> property in the data modules. If that property is not present, the code of the current language is used. If none of the available codes is actually a valid Wikimedia code, an empty table is returned.]==] function Language:getWikimediaLanguages() local wm_langs = self._wikimediaLanguageObjects if wm_langs == nil then local codes = self:getWikimediaLanguageCodes() wm_langs = {} for i = 1, #codes do wm_langs[i] = get_wikimedia_lang(codes[i]) end self._wikimediaLanguageObjects = wm_langs end return wm_langs end function Language:getWikimediaLanguageCodes() local wm_langs = self._wikimediaLanguageCodes if wm_langs == nil then wm_langs = self._data.wikimedia_codes if wm_langs then wm_langs = split(wm_langs, ",", true, true) else local code = self._code if is_known_language_tag(code) then wm_langs = {code} else -- Inherit, but only if no codes are specified in the data *and* -- the language code isn't a valid Wikimedia language code. local parent = self:getParent() wm_langs = parent and parent:getWikimediaLanguageCodes() or {} end end self._wikimediaLanguageCodes = wm_langs end return wm_langs end --[==[ Returns the name of the Wikipedia article for the language. `project` specifies the language and project to retrieve the article from, defaulting to {"enwiki"} for the English Wikipedia. Normally if specified it should be the project code for a specific-language Wikipedia e.g. "zhwiki" for the Chinese Wikipedia, but it can be any project, including non-Wikipedia ones. If the project is the English Wikipedia and the property {wikipedia_article} is present in the data module it will be used first. In all other cases, a sitelink will be generated from {:getWikidataItem} (if set). The resulting value (or lack of value) is cached so that subsequent calls are fast. If no value could be determined, and `noCategoryFallback` is {false}, {:getCategoryName} is used as fallback; otherwise, {nil} is returned. Note that if `noCategoryFallback` is {nil} or omitted, it defaults to {false} if the project is the English Wikipedia, otherwise to {true}. In other words, under normal circumstances, if the English Wikipedia article couldn't be retrieved, the return value will fall back to a link to the language's category, but this won't normally happen for any other project. ]==] function Language:getWikipediaArticle(noCategoryFallback, project) Language.getWikipediaArticle = require(language_like_module).getWikipediaArticle return self:getWikipediaArticle(noCategoryFallback, project) end function Language:makeWikipediaLink() return make_link(self, "w:" .. self:getWikipediaArticle(), self:getCanonicalName()) end --[==[Returns the name of the Wikimedia Commons category page for the language.]==] function Language:getCommonsCategory() Language.getCommonsCategory = require(language_like_module).getCommonsCategory return self:getCommonsCategory() end --[==[Returns the Wikidata item id for the language or <code>nil</code>. This corresponds to the the second field in the data modules.]==] function Language:getWikidataItem() Language.getWikidataItem = require(language_like_module).getWikidataItem return self:getWikidataItem() end --[==[Returns a table of <code>Script</code> objects for all scripts that the language is written in. See [[Module:scripts]].]==] function Language:getScripts() local scripts = self._scriptObjects if scripts == nil then local codes = self:getScriptCodes() if codes[1] == "All" then scripts = load_data(scripts_data_module) else scripts = {} for i = 1, #codes do scripts[i] = get_script(codes[i]) end end self._scriptObjects = scripts end return scripts end --[==[Returns the table of script codes in the language's data file.]==] function Language:getScriptCodes() local scripts = self._scriptCodes if scripts == nil then scripts = self._data[4] if scripts then local codes, n = {}, 0 for code in gmatch(scripts, "[^,]+") do n = n + 1 -- Special handling of "Hants", which represents "Hani", "Hant" and "Hans" collectively. if code == "Hants" then codes[n] = "Hani" codes[n + 1] = "Hant" codes[n + 2] = "Hans" n = n + 2 else codes[n] = code end end scripts = codes else scripts = {"None"} end self._scriptCodes = scripts end return scripts end --[==[Given some text, this function iterates through the scripts of a given language and tries to find the script that best matches the text. It returns a {{code|lua|Script}} object representing the script. If no match is found at all, it returns the {{code|lua|None}} script object.]==] function Language:findBestScript(text, forceDetect) if not text or text == "" or text == "-" then return get_script("None") end -- Differs from table returned by getScriptCodes, as Hants is not normalized into its constituents. local codes = self._bestScriptCodes if codes == nil then codes = self._data[4] codes = codes and split(codes, ",", true, true) or {"None"} self._bestScriptCodes = codes end local first_sc = codes[1] if first_sc == "All" then return find_best_script_without_lang(text) end local codes_len = #codes if not (forceDetect or first_sc == "Hants" or codes_len > 1) then first_sc = get_script(first_sc) local charset = first_sc.characters return charset and umatch(text, "[" .. charset .. "]") and first_sc or get_script("None") end -- Remove all formatting characters. text = get_plaintext(text) -- Remove all spaces and any ASCII punctuation. Some non-ASCII punctuation is script-specific, so can't be removed. text = ugsub(text, "[%s!\"#%%&'()*,%-./:;?@[\\%]_{}]+", "") if #text == 0 then return get_script("None") end -- Try to match every script against the text, -- and return the one with the most matching characters. local bestcount, bestscript, length = 0 for i = 1, codes_len do local sc = codes[i] -- Special case for "Hants", which is a special code that represents whichever of "Hant" or "Hans" best matches, or "Hani" if they match equally. This avoids having to list all three. In addition, "Hants" will be treated as the best match if there is at least one matching character, under the assumption that a Han script is desirable in terms that contain a mix of Han and other scripts (not counting those which use Jpan or Kore). if sc == "Hants" then local Hani = get_script("Hani") if not Hant_chars then Hant_chars = load_data("Module:zh/data/ts") Hans_chars = load_data("Module:zh/data/st") end local t, s, found = 0, 0 -- This is faster than using mw.ustring.gmatch directly. for ch in gmatch((ugsub(text, "[" .. Hani.characters .. "]", "\255%0")), "\255(.[\128-\191]*)") do found = true if Hant_chars[ch] then t = t + 1 if Hans_chars[ch] then s = s + 1 end elseif Hans_chars[ch] then s = s + 1 else t, s = t + 1, s + 1 end end if found then if t == s then return Hani end return get_script(t > s and "Hant" or "Hans") end else sc = get_script(sc) if not length then length = ulen(text) end -- Count characters by removing everything in the script's charset and comparing to the original length. local charset = sc.characters local count = charset and length - ulen((ugsub(text, "[" .. charset .. "]+", ""))) or 0 if count >= length then return sc elseif count > bestcount then bestcount = count bestscript = sc end end end -- Return best matching script, or otherwise None. return bestscript or get_script("None") end --[==[Returns a <code>Family</code> object for the language family that the language belongs to. See [[Module:families]].]==] function Language:getFamily() local family = self._familyObject if family == nil then family = self:getFamilyCode() -- If the value is nil, it's cached as false. family = family and get_family(family) or false self._familyObject = family end return family or nil end --[==[Returns the family code in the language's data file.]==] function Language:getFamilyCode() local family = self._familyCode if family == nil then -- If the value is nil, it's cached as false. family = self._data[3] or false self._familyCode = family end return family or nil end function Language:getFamilyName() local family = self._familyName if family == nil then family = self:getFamily() -- If the value is nil, it's cached as false. family = family and family:getCanonicalName() or false self._familyName = family end return family or nil end do local function check_family(self, family) if type(family) == "table" then family = family:getCode() end if self:getFamilyCode() == family then return true end local self_family = self:getFamily() if self_family:inFamily(family) then return true -- If the family isn't a real family (e.g. creoles) check any ancestors. elseif self_family:inFamily("qfa-not") then local ancestors = self:getAncestors() for _, ancestor in ipairs(ancestors) do if ancestor:inFamily(family) then return true end end end end --[==[Check whether the language belongs to `family` (which can be a family code or object). A list of objects can be given in place of `family`; in that case, return true if the language belongs to any of the specified families. Note that some languages (in particular, certain creoles) can have multiple immediate ancestors potentially belonging to different families; in that case, return true if the language belongs to any of the specified families.]==] function Language:inFamily(...) if self:getFamilyCode() == nil then return false end return check_inputs(self, check_family, false, ...) end end function Language:getParent() local parent = self._parentObject if parent == nil then parent = self:getParentCode() -- If the value is nil, it's cached as false. parent = parent and get_by_code(parent, nil, true, true) or false self._parentObject = parent end return parent or nil end function Language:getParentCode() local parent = self._parentCode if parent == nil then -- If the value is nil, it's cached as false. parent = self._data.parent or false self._parentCode = parent end return parent or nil end function Language:getParentName() local parent = self._parentName if parent == nil then parent = self:getParent() -- If the value is nil, it's cached as false. parent = parent and parent:getCanonicalName() or false self._parentName = parent end return parent or nil end function Language:getParentChain() local chain = self._parentChain if chain == nil then chain = {} local parent, n = self:getParent(), 0 while parent do n = n + 1 chain[n] = parent parent = parent:getParent() end self._parentChain = chain end return chain end do local function check_lang(self, lang) for _, parent in ipairs(self:getParentChain()) do if (type(lang) == "string" and lang or lang:getCode()) == parent:getCode() then return true end end end function Language:hasParent(...) return check_inputs(self, check_lang, false, ...) end end --[==[ If the language is etymology-only, this iterates through parents until a full language or family is found, and the corresponding object is returned. If the language is a full language, then it simply returns itself. ]==] function Language:getFull() local full = self._fullObject if full == nil then full = self:getFullCode() full = full == self._code and self or get_by_code(full) self._fullObject = full end return full end --[==[ If the language is an etymology-only language, this iterates through parents until a full language or family is found, and the corresponding code is returned. If the language is a full language, then it simply returns the language code. ]==] function Language:getFullCode() return self._fullCode or self._code end --[==[ If the language is an etymology-only language, this iterates through parents until a full language or family is found, and the corresponding canonical name is returned. If the language is a full language, then it simply returns the canonical name of the language. ]==] function Language:getFullName() local full = self._fullName if full == nil then full = self:getFull():getCanonicalName() self._fullName = full end return full end --[==[Returns a table of <code class="nf">Language</code> objects for all languages that this language is directly descended from. Generally this is only a single language, but creoles, pidgins and mixed languages can have multiple ancestors.]==] function Language:getAncestors() local ancestors = self._ancestorObjects if ancestors == nil then ancestors = {} local ancestor_codes = self:getAncestorCodes() if #ancestor_codes > 0 then for _, ancestor in ipairs(ancestor_codes) do insert(ancestors, get_by_code(ancestor, nil, true)) end else local fam = self:getFamily() local protoLang = fam and fam:getProtoLanguage() or nil -- For the cases where the current language is the proto-language -- of its family, or an etymology-only language that is ancestral to that -- proto-language, we need to step up a level higher right from the -- start. if protoLang and ( protoLang:getCode() == self._code or (self:hasType("etymology-only") and protoLang:hasAncestor(self)) ) then fam = fam:getFamily() protoLang = fam and fam:getProtoLanguage() or nil end while not protoLang and not (not fam or fam:getCode() == "qfa-not") do fam = fam:getFamily() protoLang = fam and fam:getProtoLanguage() or nil end insert(ancestors, protoLang) end self._ancestorObjects = ancestors end return ancestors end do -- Avoid a language being its own ancestor via class inheritance. We only need to check for this if the language has inherited an ancestor table from its parent, because we never want to drop ancestors that have been explicitly set in the data. -- Recursively iterate over ancestors until we either find self or run out. If self is found, return true. local function check_ancestor(self, lang) local codes = lang:getAncestorCodes() if not codes then return nil end for i = 1, #codes do local code = codes[i] if code == self._code then return true end local anc = get_by_code(code, nil, true) if check_ancestor(self, anc) then return true end end end --[==[Returns a table of <code class="nf">Language</code> codes for all languages that this language is directly descended from. Generally this is only a single language, but creoles, pidgins and mixed languages can have multiple ancestors.]==] function Language:getAncestorCodes() if self._ancestorCodes then return self._ancestorCodes end local data = self._data local codes = data.ancestors if codes == nil then codes = {} self._ancestorCodes = codes return codes end codes = split(codes, ",", true, true) self._ancestorCodes = codes -- If there are no codes or the ancestors weren't inherited data, there's nothing left to check. if #codes == 0 or self:getData(false, "raw").ancestors ~= nil then return codes end local i, code = 1 while i <= #codes do code = codes[i] if check_ancestor(self, self) then remove(codes, i) else i = i + 1 end end return codes end end --[==[Given a list of language objects or codes, returns true if at least one of them is an ancestor. This includes any etymology-only children of that ancestor. If the language's ancestor(s) are etymology-only languages, it will also return true for those language parent(s) (e.g. if Vulgar Latin is the ancestor, it will also return true for its parent, Latin). However, a parent is excluded from this if the ancestor is also ancestral to that parent (e.g. if Classical Persian is the ancestor, Persian would return false, because Classical Persian is also ancestral to Persian).]==] function Language:hasAncestor(...) local function iterateOverAncestorTree(node, func, parent_check) local ancestors = node:getAncestors() local ancestorsParents = {} for _, ancestor in ipairs(ancestors) do -- When checking the parents of the other language, and the ancestor is also a parent, skip to the next ancestor, so that we exclude any etymology-only children of that parent that are not directly related (see below). local ret = (parent_check or not node:hasParent(ancestor)) and func(ancestor) or iterateOverAncestorTree(ancestor, func, parent_check) if ret then return ret end end -- Check the parents of any ancestors. We don't do this if checking the parents of the other language, so that we exclude any etymology-only children of those parents that are not directly related (e.g. if the ancestor is Vulgar Latin and we are checking New Latin, we want it to return false because they are on different ancestral branches. As such, if we're already checking the parent of New Latin (Latin) we don't want to compare it to the parent of the ancestor (Latin), as this would be a false positive; it should be one or the other). if not parent_check then return nil end for _, ancestor in ipairs(ancestors) do local ancestorParents = ancestor:getParentChain() for _, ancestorParent in ipairs(ancestorParents) do if ancestorParent:getCode() == self._code or ancestorParent:hasAncestor(ancestor) then break else insert(ancestorsParents, ancestorParent) end end end for _, ancestorParent in ipairs(ancestorsParents) do local ret = func(ancestorParent) if ret then return ret end end end local function do_iteration(otherlang, parent_check) -- otherlang can't be self if (type(otherlang) == "string" and otherlang or otherlang:getCode()) == self._code then return false end repeat if iterateOverAncestorTree( self, function(ancestor) return ancestor:getCode() == (type(otherlang) == "string" and otherlang or otherlang:getCode()) end, parent_check ) then return true elseif type(otherlang) == "string" then otherlang = get_by_code(otherlang, nil, true) end otherlang = otherlang:getParent() parent_check = false until not otherlang end local parent_check = true for _, otherlang in ipairs{...} do local ret = do_iteration(otherlang, parent_check) if ret then return true end end return false end do local function construct_node(lang, memo) local branch, ancestors = {lang = lang:getCode()} memo[lang:getCode()] = branch for _, ancestor in ipairs(lang:getAncestors()) do if ancestors == nil then ancestors = {} end insert(ancestors, memo[ancestor:getCode()] or construct_node(ancestor, memo)) end branch.ancestors = ancestors return branch end function Language:getAncestorChain() local chain = self._ancestorChain if chain == nil then chain = construct_node(self, {}) self._ancestorChain = chain end return chain end end function Language:getAncestorChainOld() local chain = self._ancestorChain if chain == nil then chain = {} local step = self while true do local ancestors = step:getAncestors() step = #ancestors == 1 and ancestors[1] or nil if not step then break end insert(chain, step) end self._ancestorChain = chain end return chain end local function fetch_descendants(self, fmt) local descendants, family = {}, self:getFamily() -- Iterate over all three datasets. for _, data in ipairs{ require("Module:languages/code to canonical name"), require("Module:etymology languages/code to canonical name"), require("Module:families/code to canonical name"), } do for code in pairs(data) do local lang = get_by_code(code, nil, true, true) if not lang then error(("Internal error: code '%s' can't be fetched"):format(code)) end -- Test for a descendant. Earlier tests weed out most candidates, while the more intensive tests are only used sparingly. if ( code ~= self._code and -- Not self. lang:inFamily(family) and -- In the same family. ( family:getProtoLanguageCode() == self._code or -- Self is the protolanguage. self:hasDescendant(lang) or -- Full hasDescendant check. (lang:getFullCode() == self._code and not self:hasAncestor(lang)) -- Etymology-only child which isn't an ancestor. ) ) then if fmt == "object" then insert(descendants, lang) elseif fmt == "code" then insert(descendants, code) elseif fmt == "name" then insert(descendants, lang:getCanonicalName()) end end end end return descendants end function Language:getDescendants() local descendants = self._descendantObjects if descendants == nil then descendants = fetch_descendants(self, "object") self._descendantObjects = descendants end return descendants end function Language:getDescendantCodes() local descendants = self._descendantCodes if descendants == nil then descendants = fetch_descendants(self, "code") self._descendantCodes = descendants end return descendants end function Language:getDescendantNames() local descendants = self._descendantNames if descendants == nil then descendants = fetch_descendants(self, "name") self._descendantNames = descendants end return descendants end do local function check_lang(self, lang) if type(lang) == "string" then lang = get_by_code(lang, nil, true) end if lang:hasAncestor(self) then return true end end function Language:hasDescendant(...) return check_inputs(self, check_lang, false, ...) end end local function fetch_children(self, fmt) local m_etym_data = require(etymology_languages_data_module) local self_code, children = self._code, {} for code, lang in pairs(m_etym_data) do local _lang = lang repeat local parent = _lang.parent if parent == self_code then if fmt == "object" then insert(children, get_by_code(code, nil, true)) elseif fmt == "code" then insert(children, code) elseif fmt == "name" then insert(children, lang[1]) end break end _lang = m_etym_data[parent] until not _lang end return children end function Language:getChildren() local children = self._childObjects if children == nil then children = fetch_children(self, "object") self._childObjects = children end return children end function Language:getChildrenCodes() local children = self._childCodes if children == nil then children = fetch_children(self, "code") self._childCodes = children end return children end function Language:getChildrenNames() local children = self._childNames if children == nil then children = fetch_children(self, "name") self._childNames = children end return children end function Language:hasChild(...) local lang = ... if not lang then return false elseif type(lang) == "string" then lang = get_by_code(lang, nil, true) end if lang:hasParent(self) then return true end return self:hasChild(select(2, ...)) end --[==[Returns the name of the main category of that language. Example: {{code|lua|"French language"}} for French, whose category is at [[:Category:French language]]. Unless optional argument <code>nocap</code> is given, the language name at the beginning of the returned value will be capitalized. This capitalization is correct for category names, but not if the language name is lowercase and the returned value of this function is used in the middle of a sentence.]==] function Language:getCategoryName(nocap) local name = self._categoryName if name == nil then name = self:getCanonicalName() -- If a substrate, omit any leading article. if self:getFamilyCode() == "qfa-sub" then name = name:gsub("^the ", ""):gsub("^a ", "") end -- Only add " language" if a full language. if self:hasType("full") then -- Unless the canonical name already ends with "language", "lect" or their derivatives, add " language". if not (match(name, "[Ll]anguage$") or match(name, "[Ll]ect$")) then name = name .. " language" end end self._categoryName = name end if nocap then return name end return mw.getContentLanguage():ucfirst(name) end --[==[Creates a link to the category; the link text is the canonical name.]==] function Language:makeCategoryLink() return make_link(self, ":Category:" .. self:getCategoryName(), self:getDisplayForm()) end function Language:getStandardCharacters(sc) local standard_chars = self._data.standard_chars if type(standard_chars) ~= "table" then return standard_chars elseif sc and type(sc) ~= "string" then check_object("script", nil, sc) sc = sc:getCode() end if (not sc) or sc == "None" then local scripts = {} for _, script in pairs(standard_chars) do insert(scripts, script) end return concat(scripts) end if standard_chars[sc] then return standard_chars[sc] .. (standard_chars[1] or "") end end --[==[ Strip diacritics from display text `text` (in a language-specific fashion), which is in the script `sc`. If `sc` is omitted or {nil}, the script is autodetected. This also strips certain punctuation characters from the end and (in the case of Spanish upside-down question mark and exclamation points) from the beginning; strips any whitespace at the end of the text or between the text and final stripped punctuation characters; and applies some language-specific Unicode normalizations to replace discouraged characters with their prescribed alternatives. Return the stripped text. ]==] function Language:stripDiacritics(text, sc) if (not text) or text == "" then return text end sc = checkScript(text, self, sc) text = normalize(text, sc) -- FIXME, rename makeEntryName to stripDiacritics and get rid of second and third return values -- everywhere text, _, _ = iterateSectionSubstitutions(self, text, sc, nil, nil, self._data.strip_diacritics or self._data.entry_name, "strip_diacritics", "stripDiacritics") text = umatch(text, "^[¿¡]?(.-[^%s%p].-)%s*[؟?!;՛՜ ՞ ՟?!︖︕।॥။၊་།]?$") or text return text end --[==[ Convert a ''logical'' pagename (the pagename as it appears to the user, after diacritics and punctuation have been stripped) to a ''physical'' pagename (the pagename as it appears in the MediaWiki database). Reasons for a difference between the two are (a) unsupported titles such as `[ ]` (with square brackets in them), `#` (pound/hash sign) and `¯\_(ツ)_/¯` (with underscores), as well as overly long titles of various sorts; (b) "mammoth" pages that are split into parts (e.g. `a`, which is split into physical pagenames `a/languages A to L` and `a/languages M to Z`). For almost all purposes, you should work with logical and not physical pagenames. But there are certain use cases that require physical pagenames, such as checking the existence of a page or retrieving a page's contents. `pagename` is the logical pagename to be converted. `is_reconstructed_or_appendix` indicates whether the page is in the `Reconstruction` or `Appendix` namespaces. If it is omitted or has the value {nil}, the pagename is checked for an initial asterisk, and if found, the page is assumed to be a `Reconstruction` page. Setting a value of `false` or `true` to `is_reconstructed_or_appendix` disables this check and allows for mainspace pagenames that begin with an asterisk. ]==] function Language:logicalToPhysical(pagename, is_reconstructed_or_appendix) -- FIXME: This probably shouldn't happen but it happens when makeEntryName() receives nil. if pagename == nil then track("nil-passed-to-logicalToPhysical") return nil end local initial_asterisk if is_reconstructed_or_appendix == nil then local pagename_minus_initial_asterisk initial_asterisk, pagename_minus_initial_asterisk = pagename:match("^(%*)(.*)$") if pagename_minus_initial_asterisk then is_reconstructed_or_appendix = true pagename = pagename_minus_initial_asterisk elseif self:hasType("appendix-constructed") then is_reconstructed_or_appendix = true end end if not is_reconstructed_or_appendix then -- Check if the pagename is a listed unsupported title. local unsupportedTitles = load_data(links_data_module).unsupported_titles if unsupportedTitles[pagename] then return "Unsupported titles/" .. unsupportedTitles[pagename] end end -- Set `unsupported` as true if certain conditions are met. local unsupported -- Check if there's an unsupported character. \239\191\189 is the replacement character U+FFFD, which can't be typed -- directly here due to an abuse filter. Unix-style dot-slash notation is also unsupported, as it is used for -- relative paths in links, as are 3 or more consecutive tildes. Note: match is faster with magic -- characters/charsets; find is faster with plaintext. if ( match(pagename, "[#<>%[%]_{|}]") or find(pagename, "\239\191\189") or match(pagename, "%f[^%z/]%.%.?%f[%z/]") or find(pagename, "~~~") ) then unsupported = true -- If it looks like an interwiki link. elseif find(pagename, ":") then local prefix = gsub(pagename, "^:*(.-):.*", ulower) if ( load_data("Module:data/namespaces")[prefix] or load_data("Module:data/interwikis")[prefix] ) then unsupported = true end end -- Escape unsupported characters so they can be used in titles. ` is used as a delimiter for this, so a raw use of -- it in an unsupported title is also escaped here to prevent interference; this is only done with unsupported -- titles, though, so inclusion won't in itself mean a title is treated as unsupported (which is why it's excluded -- from the earlier test). if unsupported then -- FIXME: This conversion needs to be different for reconstructed pages with unsupported characters. There -- aren't any currently, but if there ever are, we need to fix this e.g. to put them in something like -- Reconstruction:Proto-Indo-European/Unsupported titles/`lowbar``num`. local unsupported_characters = load_data(links_data_module).unsupported_characters pagename = pagename:gsub("[#<>%[%]_`{|}\239]\191?\189?", unsupported_characters) :gsub("%f[^%z/]%.%.?%f[%z/]", function(m) return (gsub(m, "%.", "`period`")) end) :gsub("~~~+", function(m) return (gsub(m, "~", "`tilde`")) end) pagename = "Unsupported titles/" .. pagename elseif not is_reconstructed_or_appendix then -- Check if this is a mammoth page. If so, which subpage should we link to? local m_links_data = load_data(links_data_module) local mammoth_page_type = m_links_data.mammoth_pages[pagename] if mammoth_page_type then local canonical_name = self:getFullName() if canonical_name ~= "Translingual" and canonical_name ~= "English" then local this_subpage local L2_sort_key = get_L2_sort_key(canonical_name) for _, subpage_spec in ipairs(m_links_data.mammoth_page_subpage_types[mammoth_page_type]) do -- unpack() fails utterly on data loaded using mw.loadData() even if offsets are given local subpage, pattern = subpage_spec[1], subpage_spec[2] if pattern == true or L2_sort_key:match(pattern) then this_subpage = subpage break end end if not this_subpage then error(("Internal error: Bad data in mammoth_page_subpage_pages in [[Module:links/data]] for mammoth page %s, type %s; last entry didn't have 'true' in it"):format( pagename, mammoth_page_type)) end pagename = pagename .. "/" .. this_subpage end end end return (initial_asterisk or "") .. pagename end --[==[ Strip the diacritics from a display pagename and convert the resulting logical pagename into a physical pagename. This allows you, for example, to retrieve the contents of the page or check its existence. WARNING: This is deprecated and will be going away. It is a simple composition of `self:stripDiacritics` and `self:logicalToPhysical`; most callers only want the former, and if you need both, call them both yourself. `text` and `sc` are as in `self:stripDiacritics`, and `is_reconstructed_or_appendix` is as in `self:logicalToPhysical`. ]==] function Language:makeEntryName(text, sc, is_reconstructed_or_appendix) return self:logicalToPhysical(self:stripDiacritics(text, sc), is_reconstructed_or_appendix) end --[==[Generates alternative forms using a specified method, and returns them as a table. If no method is specified, returns a table containing only the input term.]==] function Language:generateForms(text, sc) local generate_forms = self._data.generate_forms if generate_forms == nil then return {text} end sc = checkScript(text, self, sc) return require("Module:" .. self._data.generate_forms).generateForms(text, self, sc) end --[==[Creates a sort key for the given stripped text, following the rules appropriate for the language. This removes diacritical marks from the stripped text if they are not considered significant for sorting, and may perform some other changes. Any initial hyphen is also removed, and anything in parentheses is removed as well. The <code>sort_key</code> setting for each language in the data modules defines the replacements made by this function, or it gives the name of the module that takes the stripped text and returns a sortkey.]==] function Language:makeSortKey(text, sc) if (not text) or text == "" then return text end if match(text, "<[^<>]+>") then track("track HTML tag") end -- Remove directional characters, bold, italics, soft hyphens, strip markers and HTML tags. -- FIXME: Partly duplicated with remove_formatting() in [[Module:links]]. text = ugsub(text, "[\194\173\226\128\170-\226\128\174\226\129\166-\226\129\169]", "") text = text:gsub("('*)'''(.-'*)'''", "%1%2"):gsub("('*)''(.-'*)''", "%1%2") text = gsub(unstrip(text), "<[^<>]+>", "") text = decode_uri(text, "PATH") text = checkNoEntities(self, text) -- Remove initial hyphens and * unless the term only consists of spacing + punctuation characters. text = ugsub(text, "^([􀀀-􏿽]*)[-־ـ᠊*]+([􀀀-􏿽]*)(.*[^%s%p].*)", "%1%2%3") sc = checkScript(text, self, sc) text = normalize(text, sc) text = removeCarets(text, sc) -- For languages with dotted dotless i, ensure that "İ" is sorted as "i", and "I" is sorted as "ı". if self:hasDottedDotlessI() then text = gsub(text, "I\204\135", "i") -- decomposed "İ" :gsub("I", "ı") text = sc:toFixedNFD(text) end -- Convert to lowercase, make the sortkey, then convert to uppercase. Where the language has dotted dotless i, it is -- usually not necessary to convert "i" to "İ" and "ı" to "I" first, because "I" will always be interpreted as -- conventional "I" (not dotless "İ") by any sorting algorithms, which will have been taken into account by the -- sortkey substitutions themselves. However, if no sortkey substitutions have been specified, then conversion is -- necessary so as to prevent "i" and "ı" both being sorted as "I". -- -- An exception is made for scripts that (sometimes) sort by scraping page content, as that means they are sensitive -- to changes in capitalization (as it changes the target page). if not sc:sortByScraping() then text = ulower(text) end local actual_substitution_data -- Don't trim whitespace here because it's significant at the beginning of a sort key or sort base. text, _, actual_substitution_data = iterateSectionSubstitutions(self, text, sc, nil, nil, self._data.sort_key, "sort_key", "makeSortKey", "notrim") if not sc:sortByScraping() then if self:hasDottedDotlessI() and not actual_substitution_data then text = text:gsub("ı", "I"):gsub("i", "İ") text = sc:toFixedNFC(text) end text = uupper(text) end -- Remove parentheses, as long as they are either preceded or followed by something. text = gsub(text, "(.)[()]+", "%1"):gsub("[()]+(.)", "%1") text = escape_risky_characters(text) return text end --[==[Create the form used as as a basis for display text and transliteration. FIXME: Rename to correctInputText().]==] local function processDisplayText(text, self, sc, keepCarets, keepPrefixes) local subbedChars = {} text, subbedChars = doTempSubstitutions(text, subbedChars, keepCarets) text = decode_uri(text, "PATH") text = checkNoEntities(self, text) sc = checkScript(text, self, sc) text = normalize(text, sc) text, subbedChars = iterateSectionSubstitutions(self, text, sc, subbedChars, keepCarets, self._data.display_text, "display_text", "makeDisplayText") text = removeCarets(text, sc) -- Remove any interwiki link prefixes (unless they have been escaped or this has been disabled). if find(text, ":") and not keepPrefixes then local rep repeat text, rep = gsub(text, "\\\\(\\*:)", "\3%1") until rep == 0 text = gsub(text, "\\:", "\4") while true do local prefix = gsub(text, "^(.-):.+", function(m1) return (gsub(m1, "\244[\128-\191]*", "")) end) -- Check if the prefix is an interwiki, though ignore capitalised Wiktionary:, which is a namespace. if not prefix or prefix == text or prefix == "Wiktionary" or not (load_data("Module:data/interwikis")[ulower(prefix)] or prefix == "") then break end text = gsub(text, "^(.-):(.*)", function(m1, m2) local ret = {} for subbedChar in gmatch(m1, "\244[\128-\191]*") do insert(ret, subbedChar) end return concat(ret) .. m2 end) end text = gsub(text, "\3", "\\"):gsub("\4", ":") end return text, subbedChars end --[==[Make the display text (i.e. what is displayed on the page).]==] function Language:makeDisplayText(text, sc, keepPrefixes) if not text or text == "" then return text end local subbedChars text, subbedChars = processDisplayText(text, self, sc, nil, keepPrefixes) text = escape_risky_characters(text) return undoTempSubstitutions(text, subbedChars) end --[==[Transliterates the text from the given script into the Latin script (see [[Wiktionary:Transliteration and romanization]]). The language must have the <code>translit</code> property for this to work; if it is not present, {{code|lua|nil}} is returned. The <code>sc</code> parameter is handled by the transliteration module, and how it is handled is specific to that module. Some transliteration modules may tolerate {{code|lua|nil}} as the script, others require it to be one of the possible scripts that the module can transliterate, and will throw an error if it's not one of them. For this reason, the <code>sc</code> parameter should always be provided when writing non-language-specific code. The <code>module_override</code> parameter is used to override the default module that is used to provide the transliteration. This is useful in cases where you need to demonstrate a particular module in use, but there is no default module yet, or you want to demonstrate an alternative version of a transliteration module before making it official. It should not be used in real modules or templates, only for testing. All uses of this parameter are tracked by [[Wiktionary:Tracking/languages/module_override]]. '''Known bugs''': * This function assumes {tr(s1) .. tr(s2) == tr(s1 .. s2)}. When this assertion fails, wikitext markups like <nowiki>'''</nowiki> can cause wrong transliterations. * HTML entities like <code>&amp;apos;</code>, often used to escape wikitext markups, do not work. ]==] function Language:transliterate(text, sc, module_override) -- If there is no text, or the language doesn't have transliteration data and there's no override, return nil. if not text or text == "" or text == "-" then return text end -- If the script is not transliteratable (and no override is given), return nil. sc = checkScript(text, self, sc) if not (sc:isTransliterated() or module_override) then -- temporary tracking to see if/when this gets triggered track("non-transliterable") track("non-transliterable/" .. self._code) track("non-transliterable/" .. sc:getCode()) track("non-transliterable/" .. sc:getCode() .. "/" .. self._code) return nil end -- Remove any strip markers. text = unstrip(text) -- Do not process the formatting into PUA characters for certain languages. local processed = load_data(languages_data_module).substitution[self._code] ~= "none" -- Get the display text with the keepCarets flag set. local subbedChars if processed then text, subbedChars = processDisplayText(text, self, sc, true) end -- Transliterate (using the module override if applicable). text, subbedChars = iterateSectionSubstitutions(self, text, sc, subbedChars, true, module_override or self._data.translit, "translit", "tr") if not text then return nil end -- Incomplete transliterations return nil. local charset = sc.characters if charset and umatch(text, "[" .. charset .. "]") then -- Remove any characters in Latin, which includes Latin characters also included in other scripts (as these are -- false positives), as well as any PUA substitutions. Anything remaining should only be script code "None" -- (e.g. numerals). local check_text = ugsub(text, "[" .. get_script("Latn").characters .. "􀀀-􏿽]+", "") -- Set none_is_last_resort_only flag, so that any non-None chars will cause a script other than "None" to be -- returned. if find_best_script_without_lang(check_text, true):getCode() ~= "None" then return nil end end if processed then text = escape_risky_characters(text) text = undoTempSubstitutions(text, subbedChars) end -- If the script does not use capitalization, then capitalize any letters of the transliteration which are -- immediately preceded by a caret (and remove the caret). if text and not sc:hasCapitalization() and text:find("^", 1, true) then text = processCarets(text, "%^([\128-\191\244]*%*?)([^\128-\191\244][\128-\191]*)", function(m1, m2) return m1 .. uupper(m2) end) end -- Track module overrides. if module_override ~= nil then track("module_override") end return text end do local function handle_language_spec(self, spec, sc) local ret = self["_" .. spec] if ret == nil then ret = self._data[spec] if type(ret) == "string" then ret = list_to_set(split(ret, ",", true, true)) end self["_" .. spec] = ret end if type(ret) == "table" then ret = ret[sc:getCode()] end return not not ret end function Language:overrideManualTranslit(sc) return handle_language_spec(self, "override_translit", sc) end function Language:link_tr(sc) return handle_language_spec(self, "link_tr", sc) end end --[==[Returns {{code|lua|true}} if the language has a transliteration module, or {{code|lua|false}} if it doesn't.]==] function Language:hasTranslit() return not not self._data.translit end --[==[Returns {{code|lua|true}} if the language uses the letters I/ı and İ/i, or {{code|lua|false}} if it doesn't.]==] function Language:hasDottedDotlessI() return not not self._data.dotted_dotless_i end function Language:toJSON(opts) local strip_diacritics, strip_diacritics_patterns, strip_diacritics_remove_diacritics = self._data.strip_diacritics if strip_diacritics then if strip_diacritics.from then strip_diacritics_patterns = {} for i, from in ipairs(strip_diacritics.from) do insert(strip_diacritics_patterns, {from = from, to = strip_diacritics.to[i] or ""}) end end strip_diacritics_remove_diacritics = strip_diacritics.remove_diacritics end -- mainCode should only end up non-nil if dontCanonicalizeAliases is passed to make_object(). -- props should either contain zero-argument functions to compute the value, or the value itself. local props = { ancestors = function() return self:getAncestorCodes() end, canonicalName = function() return self:getCanonicalName() end, categoryName = function() return self:getCategoryName("nocap") end, code = self._code, mainCode = self._mainCode, parent = function() return self:getParentCode() end, full = function() return self:getFullCode() end, stripDiacriticsPatterns = strip_diacritics_patterns, stripDiacriticsRemoveDiacritics = strip_diacritics_remove_diacritics, family = function() return self:getFamilyCode() end, aliases = function() return self:getAliases() end, varieties = function() return self:getVarieties() end, otherNames = function() return self:getOtherNames() end, scripts = function() return self:getScriptCodes() end, type = function() return keys_to_list(self:getTypes()) end, wikimediaLanguages = function() return self:getWikimediaLanguageCodes() end, wikidataItem = function() return self:getWikidataItem() end, wikipediaArticle = function() return self:getWikipediaArticle(true) end, } local ret = {} for prop, val in pairs(props) do if not opts.skip_fields or not opts.skip_fields[prop] then if type(val) == "function" then ret[prop] = val() else ret[prop] = val end end end -- Use `deep_copy` when returning a table, so that there are no editing restrictions imposed by `mw.loadData`. return opts and opts.lua_table and deep_copy(ret) or to_json(ret, opts) end function export.getDataModuleName(code) local letter = match(code, "^(%l)%l%l?$") return "Module:" .. ( letter == nil and "languages/data/exceptional" or #code == 2 and "languages/data/2" or "languages/data/3/" .. letter ) end get_data_module_name = export.getDataModuleName function export.getExtraDataModuleName(code) return get_data_module_name(code) .. "/extra" end get_extra_data_module_name = export.getExtraDataModuleName do local function make_stack(data) local key_types = { [2] = "unique", aliases = "unique", otherNames = "unique", type = "append", varieties = "unique", wikipedia_article = "unique", wikimedia_codes = "unique" } local function __index(self, k) local stack, key_type = getmetatable(self), key_types[k] -- Data that isn't inherited from the parent. if key_type == "unique" then local v = stack[stack[make_stack]][k] if v == nil then local layer = stack[0] if layer then -- Could be false if there's no extra data. v = layer[k] end end return v -- Data that is appended by each generation. elseif key_type == "append" then local parts, offset, n = {}, 0, stack[make_stack] for i = 1, n do local part = stack[i][k] if part == nil then offset = offset + 1 else parts[i - offset] = part end end return offset ~= n and concat(parts, ",") or nil end local n = stack[make_stack] while true do local layer = stack[n] if not layer then -- Could be false if there's no extra data. return nil end local v = layer[k] if v ~= nil then return v end n = n - 1 end end local function __newindex() error("table is read-only") end local function __pairs(self) -- Iterate down the stack, caching keys to avoid duplicate returns. local stack, seen = getmetatable(self), {} local n = stack[make_stack] local iter, state, k, v = pairs(stack[n]) return function() repeat repeat k = iter(state, k) if k == nil then n = n - 1 local layer = stack[n] if not layer then -- Could be false if there's no extra data. return nil end iter, state, k = pairs(layer) end until not (k == nil or seen[k]) -- Get the value via a lookup, as the one returned by the -- iterator will be the raw value from the current layer, -- which may not be the one __index will return for that -- key. Also memoize the key in `seen` (even if the lookup -- returns nil) so that it doesn't get looked up again. -- TODO: store values in `self`, avoiding the need to create -- the `seen` table. The iterator will need to iterate over -- `self` with `next` first to find these on future loops. v, seen[k] = self[k], true until v ~= nil return k, v end end local __ipairs = require(table_module).indexIpairs function make_stack(data) local stack = { data, [make_stack] = 1, -- stores the length and acts as a sentinel to confirm a given metatable is a stack. __index = __index, __newindex = __newindex, __pairs = __pairs, __ipairs = __ipairs, } stack.__metatable = stack return setmetatable({}, stack), stack end return make_stack(data) end local function get_stack(data) local stack = getmetatable(data) return stack and type(stack) == "table" and stack[make_stack] and stack or nil end --[==[ <span style="color: var(--wikt-palette-red,#BA0000)">This function is not for use in entries or other content pages.</span> Returns a blob of data about the language. The format of this blob is undocumented, and perhaps unstable; it's intended for things like the module's own unit-tests, which are "close friends" with the module and will be kept up-to-date as the format changes. If `extra` is set, any extra data in the relevant `/extra` module will be included. (Note that it will be included anyway if it has already been loaded into the language object.) If `raw` is set, then the returned data will not contain any data inherited from parent objects. -- Do NOT use these methods! -- All uses should be pre-approved on the talk page! ]==] function Language:getData(extra, raw) if extra then self:loadInExtraData() end local data = self._data -- If raw is not set, just return the data. if not raw then return data end local stack = get_stack(data) -- If there isn't a stack or its length is 1, return the data. Extra data (if any) will be included, as it's stored at key 0 and doesn't affect the reported length. if stack == nil then return data end local n = stack[make_stack] if n == 1 then return data end local extra = stack[0] -- If there isn't any extra data, return the top layer of the stack. if extra == nil then return stack[n] end -- If there is, return a new stack which has the top layer at key 1 and the extra data at key 0. data, stack = make_stack(stack[n]) stack[0] = extra return data end function Language:loadInExtraData() -- Only full languages have extra data. if not self:hasType("language", "full") then return end local data = self._data -- If there's no stack, create one. local stack = get_stack(self._data) if stack == nil then data, stack = make_stack(data) -- If already loaded, return. elseif stack[0] ~= nil then return end self._data = data -- Load extra data from the relevant module and add it to the stack at key 0, so that the __index and __pairs metamethods will pick it up, since they iterate down the stack until they run out of layers. local code = self._code local modulename = get_extra_data_module_name(code) -- No data cached as false. stack[0] = modulename and load_data(modulename)[code] or false end --[==[Returns the name of the module containing the language's data. Currently, this is always [[Module:scripts/data]].]==] function Language:getDataModuleName() local name = self._dataModuleName if name == nil then name = self:hasType("etymology-only") and etymology_languages_data_module or get_data_module_name(self._mainCode or self._code) self._dataModuleName = name end return name end --[==[Returns the name of the module containing the language's data. Currently, this is always [[Module:scripts/data]].]==] function Language:getExtraDataModuleName() local name = self._extraDataModuleName if name == nil then name = not self:hasType("etymology-only") and get_extra_data_module_name(self._mainCode or self._code) or false self._extraDataModuleName = name end return name or nil end function export.makeObject(code, data, dontCanonicalizeAliases) local data_type = type(data) if data_type ~= "table" then error(("bad argument #2 to 'makeObject' (table expected, got %s)"):format(data_type)) end -- Convert any aliases. local input_code = code code = normalize_code(code) input_code = dontCanonicalizeAliases and input_code or code local parent if data.parent then parent = get_by_code(data.parent, nil, true, true) else parent = Language end parent.__index = parent local lang = {_code = input_code} -- This can only happen if dontCanonicalizeAliases is passed to make_object(). if code ~= input_code then lang._mainCode = code end local parent_data = parent._data if parent_data == nil then -- Full code is the same as the code. lang._fullCode = parent._code or code else -- Copy full code. lang._fullCode = parent._fullCode local stack = get_stack(parent_data) if stack == nil then parent_data, stack = make_stack(parent_data) end -- Insert the input data as the new top layer of the stack. local n = stack[make_stack] + 1 data, stack[n], stack[make_stack] = parent_data, data, n end lang._data = data return setmetatable(lang, parent) end make_object = export.makeObject end --[==[Finds the language whose code matches the one provided. If it exists, it returns a <code class="nf">Language</code> object representing the language. Otherwise, it returns {{code|lua|nil}}, unless <code class="n">paramForError</code> is given, in which case an error is generated. If <code class="n">paramForError</code> is {{code|lua|true}}, a generic error message mentioning the bad code is generated; otherwise <code class="n">paramForError</code> should be a string or number specifying the parameter that the code came from, and this parameter will be mentioned in the error message along with the bad code. If <code class="n">allowEtymLang</code> is specified, etymology-only language codes are allowed and looked up along with normal language codes. If <code class="n">allowFamily</code> is specified, language family codes are allowed and looked up along with normal language codes.]==] function export.getByCode(code, paramForError, allowEtymLang, allowFamily) -- Track uses of paramForError, ultimately so it can be removed, as error-handling should be done by [[Module:parameters]], not here. if paramForError ~= nil then track("paramForError") end if type(code) ~= "string" then local typ if not code then typ = "nil" elseif check_object("language", true, code) then typ = "a language object" elseif check_object("family", true, code) then typ = "a family object" else typ = "a " .. type(code) end error("The function getByCode expects a string as its first argument, but received " .. typ .. ".") end local m_data = load_data(languages_data_module) if m_data.aliases[code] or m_data.track[code] then track(code) end local norm_code = normalize_code(code) -- Get the data, checking for etymology-only languages if allowEtymLang is set. local data = load_data(get_data_module_name(norm_code))[norm_code] or allowEtymLang and load_data(etymology_languages_data_module)[norm_code] -- If no data was found and allowFamily is set, check the family data. If the main family data was found, make the object with [[Module:families]] instead, as family objects have different methods. However, if it's an etymology-only family, use make_object in this module (which handles object inheritance), and the family-specific methods will be inherited from the parent object. if data == nil and allowFamily then data = load_data("Module:families/data")[norm_code] if data ~= nil then if data.parent == nil then return make_family_object(norm_code, data) elseif not allowEtymLang then data = nil end end end local retval = code and data and make_object(code, data) if not retval and paramForError then require("Module:languages/errorGetBy").code(code, paramForError, allowEtymLang, allowFamily) end return retval end get_by_code = export.getByCode --[==[Finds the language whose canonical name (the name used to represent that language on Wiktionary) or other name matches the one provided. If it exists, it returns a <code class="nf">Language</code> object representing the language. Otherwise, it returns {{code|lua|nil}}, unless <code class="n">paramForError</code> is given, in which case an error is generated. If <code class="n">allowEtymLang</code> is specified, etymology-only language codes are allowed and looked up along with normal language codes. If <code class="n">allowFamily</code> is specified, language family codes are allowed and looked up along with normal language codes. The canonical name of languages should always be unique (it is an error for two languages on Wiktionary to share the same canonical name), so this is guaranteed to give at most one result. This function is powered by [[Module:languages/canonical names]], which contains a pre-generated mapping of full-language canonical names to codes. It is generated by going through the [[:Category:Language data modules]] for full languages. When <code class="n">allowEtymLang</code> is specified for the above function, [[Module:etymology languages/canonical names]] may also be used, and when <code class="n">allowFamily</code> is specified for the above function, [[Module:families/canonical names]] may also be used.]==] function export.getByCanonicalName(name, errorIfInvalid, allowEtymLang, allowFamily) local byName = load_data("Module:languages/canonical names") local code = byName and byName[name] if not code and allowEtymLang then byName = load_data("Module:etymology languages/canonical names") code = byName and byName[name] or byName[gsub(name, " [Ss]ubstrate$", "")] or byName[gsub(name, "^a ", "")] or byName[gsub(name, "^a ", ""):gsub(" [Ss]ubstrate$", "")] or -- For etymology families like "ira-pro". -- FIXME: This is not ideal, as it allows " languages" to be appended to any etymology-only language, too. byName[match(name, "^(.*) languages$")] end if not code and allowFamily then byName = load_data("Module:families/canonical names") code = byName[name] or byName[match(name, "^(.*) languages$")] end local retval = code and get_by_code(code, errorIfInvalid, allowEtymLang, allowFamily) if not retval and errorIfInvalid then require("Module:languages/errorGetBy").canonicalName(name, allowEtymLang, allowFamily) end return retval end --[==[Used by [[Module:languages/data/2]] (et al.) and [[Module:etymology languages/data]], [[Module:families/data]], [[Module:scripts/data]] and [[Module:writing systems/data]] to finalize the data into the format that is actually returned.]==] function export.finalizeData(data, main_type, variety) local fields = {"type"} if main_type == "language" then insert(fields, 4) -- script codes insert(fields, "ancestors") insert(fields, "link_tr") insert(fields, "override_translit") insert(fields, "wikimedia_codes") elseif main_type == "script" then insert(fields, 3) -- writing system codes end -- Families and writing systems have no extra fields to process. local fields_len = #fields for _, entity in next, data do if variety then -- Move parent from 3 to "parent" and family from "family" to 3. These are different for the sake of convenience, since very few varieties have the family specified, whereas all of them have a parent. entity.parent, entity[3], entity.family = entity[3], entity.family -- Give the type "regular" iff not a variety and no other types are assigned. elseif not (entity.type or entity.parent) then entity.type = "regular" end for i = 1, fields_len do local key = fields[i] local field = entity[key] if field and type(field) == "string" then entity[key] = gsub(field, "%s*,%s*", ",") end end end return data end --[==[For backwards compatibility only; modules should require the error themselves.]==] function export.err(lang_code, param, code_desc, template_tag, not_real_lang) return require("Module:languages/error")(lang_code, param, code_desc, template_tag, not_real_lang) end return export jc4t7va4g7z5pc8b7fsslx5x608b1da मॉड्यूल:links/templates 828 302125 487656 477444 2026-09-01T20:21:46Z SM7 6218 updating...+local 487656 Scribunto text/plain -- Prevent substitution. if mw.isSubsting() then return require("Module:unsubst") end local export = {} local links_module = "Module:links" local process_params = require("Module:parameters").process local remove = table.remove local upper = require("Module:string utilities").upper --[=[ Modules used: [[Module:links]] [[Module:languages]] [[Module:scripts]] [[Module:parameters]] [[Module:debug]] ]=] do local function get_args(frame) -- `compat` is a compatibility mode for {{term}}. -- If given a nonempty value, the function uses lang= to specify the -- language, and all the positional parameters shift one number lower. local iargs = frame.args iargs.compat = iargs.compat and iargs.compat ~= "" iargs.langname = iargs.langname and iargs.langname ~= "" iargs.notself = iargs.notself and iargs.notself ~= "" local alias_of_4 = {alias_of = 4} local boolean = {type = "boolean"} local params = { [1] = {required = true, type = "language", default = "und"}, [2] = true, [3] = true, [4] = true, g = {list = true, type = "genders", flatten = true}, gloss = alias_of_4, id = true, lit = true, ng = true, pos = true, sc = {type = "script"}, t = alias_of_4, tr = true, ts = true, q = {type = "qualifier"}, qq = {type = "qualifier"}, l = {type = "labels"}, ll = {type = "labels"}, ref = {type = "references"}, ["accel-form"] = true, ["accel-translit"] = true, ["accel-lemma"] = true, ["accel-lemma-translit"] = true, ["accel-gender"] = true, ["accel-nostore"] = boolean, } if iargs.compat then params.lang = {type = "language", default = "und"} remove(params, 1) alias_of_4.alias_of = 3 end if iargs.langname then params.w = boolean end return process_params(frame:getParent().args, params), iargs end -- Used in [[Template:l]] and [[Template:m]]. function export.l_term_t(frame) local args, iargs = get_args(frame) local compat = iargs.compat local lang = args[compat and "lang" or 1] -- Tracking for und. if not compat and lang:getCode() == "und" then require("Module:debug").track("link/und") end local term = args[(compat and 1 or 2)] local alt = args[(compat and 2 or 3)] term = term ~= "" and term or nil if not term and not alt and iargs.demo then term = iargs.demo end local langname = iargs.langname and ( args.w and lang:makeWikipediaLink() or lang:getCanonicalName() ) or nil if langname and term == "-" then return langname end -- Forward the information to full_link return (langname and langname .. " " or "") .. require(links_module).full_link( { lang = lang, sc = args.sc, track_sc = true, term = term, alt = alt, gloss = args[4], id = args.id, tr = args.tr, ts = args.ts, genders = args.g, pos = args.pos, ng = args.ng, lit = args.lit, q = args.q, qq = args.qq, l = args.l, ll = args.ll, refs = args.ref, show_qualifiers = true, accel = args["accel-form"] and { form = args["accel-form"], translit = args["accel-translit"], lemma = args["accel-lemma"], lemma_translit = args["accel-lemma-translit"], gender = args["accel-gender"], nostore = args["accel-nostore"], } or nil }, iargs.face, not iargs.notself ) end -- Used in [[Template:link-annotations]]. function export.l_annotations_t(frame) local args, iargs = get_args(frame) -- Forward the information to format_link_annotations return require(links_module).format_link_annotations( { lang = args[1], tr = { args.tr }, ts = { args.ts }, genders = args.g, pos = args.pos, ng = args.ng, lit = args.lit }, iargs.face ) end end -- Used in [[Template:ll]]. do local function get_args(frame) return process_params(frame:getParent().args, { [1] = {required = true, type = "language", default = "und"}, [2] = {allow_empty = true}, [3] = true, id = true, sc = {type = "script"}, }) end function export.ll(frame) local args = get_args(frame) local lang = args[1] local sc = args.sc local term = args[2] term = term ~= "" and term or nil return require(links_module).language_link{ lang = lang, sc = sc, term = term, alt = args[3], id = args.id } or "<small>[टर्म?]</small>" .. require("Module:utilities").format_categories( {lang:getFullName() .. " टर्म अनुरोध"}, lang, "-", nil, nil, sc ) end end function export.def_t(frame) local args = process_params(frame:getParent().args, { [1] = {required = true, default = ""}, }) local face = frame.args.face local ret = require("Module:script utilities").tag_definition(require(links_module).embedded_language_links{ term = args[1], lang = require("Module:languages").getByCode("hi"), sc = require("Module:scripts").getByCode("Deva") }, face) if face == "non-gloss" then return ret end return '<span class="mention-gloss-paren">(</span>' .. ret .. '<span class="mention-gloss-paren">)</span>' end function export.linkify_t(frame) local args = process_params(frame:getParent().args, { [1] = {required = true, default = ""}, }) args[1] = mw.text.trim(args[1]) if args[1] == "" or args[1]:find("[[", nil, true) then return args[1] end return "[[" .. args[1] .. "]]" end function export.cap_t(frame) local args = process_params(frame:getParent().args, { [1] = {required = true}, [2] = true, lang = {type = "language", default = "hi"}, }) local term = args[1] return require(links_module).full_link{ lang = args.lang, term = term, alt = term:gsub("^.[\128-\191]*", upper) .. (args[2] or "") } end function export.section_link_t(frame) local args = process_params(frame:getParent().args, { [1] = {}, }) return require(links_module).section_link(args[1]) end return export kc80qkb312333stad14xhqao0k5hvqb मॉड्यूल:scripts 828 302126 487620 477965 2026-09-01T18:45:16Z SM7 6218 updating... 487620 Scribunto text/plain local export = {} local combining_classes_module = "Module:Unicode data/combining classes" local debug_track_module = "Module:debug/track" local json_module = "Module:JSON" local language_like_module = "Module:language-like" local load_module = "Module:load" local scripts_canonical_names_module = "Module:scripts/canonical names" local scripts_chartoscript_module = "Module:scripts/charToScript" local scripts_data_module = "Module:scripts/data" local string_utilities_module = "Module:string utilities" local table_module = "Module:table" local writing_systems_module = "Module:writing systems" local writing_systems_data_module = "Module:writing systems/data" local concat = table.concat local get_by_code -- Defined below. local gmatch = string.gmatch local insert = table.insert local make_object -- Defined below. local match = string.match local require = require local select = select local setmetatable = setmetatable local toNFC = mw.ustring.toNFC local toNFD = mw.ustring.toNFD local toNFKC = mw.ustring.toNFKC local toNFKD = mw.ustring.toNFKD local type = type --[==[ Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==] local function category_name_has_suffix(...) category_name_has_suffix = require(language_like_module).categoryNameHasSuffix return category_name_has_suffix(...) end local function category_name_to_code(...) category_name_to_code = require(language_like_module).categoryNameToCode return category_name_to_code(...) end local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local function deep_copy(...) deep_copy = require(table_module).deepCopy return deep_copy(...) end local function explode(...) explode = require(string_utilities_module).explode_utf8 return explode(...) end local function get_writing_system(...) get_writing_system = require(writing_systems_module).getByCode return get_writing_system(...) end local function keys_to_list(...) keys_to_list = require(table_module).keysToList return keys_to_list(...) end local function load_data(...) load_data = require(load_module).load_data return load_data(...) end local function split(...) split = require(string_utilities_module).split return split(...) end local function to_json(...) to_json = require(json_module).toJSON return to_json(...) end local function track(page) debug_track("scripts/" .. page) return true end local function ugsub(...) ugsub = require(string_utilities_module).gsub return ugsub(...) end local function umatch(...) umatch = require(string_utilities_module).match return umatch(...) end --[==[ Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==] local scripts_canonical_names local function get_scripts_canonical_names() scripts_canonical_names, get_scripts_canonical_names = load_data(scripts_canonical_names_module), nil return scripts_canonical_names end local scripts_data local function get_scripts_data() scripts_data, get_scripts_data = load_data(scripts_data_module), nil return scripts_data end local scripts_suffixes local function get_scripts_suffixes() scripts_suffixes, get_scripts_suffixes = { "script", "code", "notation", "letters", "numerals", "semaphore", }, nil for _, v in pairs(load_data(writing_systems_data_module)) do insert(scripts_suffixes, v[1]) end return scripts_suffixes end local Script = {} Script.__index = Script --[==[Returns the script code of the script. Example: {{lua|"Cyrl"}} for Cyrillic.]==] function Script:getCode() return self._code end --[==[ Return the canonical name of the script. This is the name used to represent that script on Wiktionary. Example: {"Cyrillic"} for Cyrillic. If `lang` is specified and the script has a language-specific name, return that (e.g. {"Shahmukhi"} for script `Aran` with Punjabi and certain related languages); otherwise, return the default name (if the script has different names in different languages, e.g. {"Arabic"} for `Aran`), or the only name if there is only one. ]==] function Script:getCanonicalName(lang) local rawdata = self._data[1] if type(rawdata) == "string" then return rawdata end local name if lang then name = rawdata[lang:getCode()] if name then return name end name = rawdata[lang:getFullCode()] if name then return name end end name = rawdata.default if not name then error(("Internal error: no default key in script name table for script %s"):format(self:getCode())) end return name end --[==[ Return the table mapping languages to names for the script. If the script has only one name (as most scripts do), return a string consisting of that name. Otherwise, return a table mapping language codes to names, where the key named `default` contains the default name used for languages not specified in the table. ]==] function Script:getCanonicalNameTable() return self._data[1] end --[==[ Return all canonical names of the script. The default name is first. ]==] function Script:getCanonicalNames() local rawdata = self._data[1] if type(rawdata) == "string" then return {rawdata} end local names = {} for lang, name in pairs(rawdata) do if lang ~= "default" then require(table_module).insertIfNot(names, name) end end table.sort(names) require(table_module).insertIfNot(names, rawdata.default, {pos = 1}) return names end --[==[ Return the display form of the script. For scripts, this is the same as the value returned by {:getCategoryName("nocap")}, i.e. it reads <code>"<var>NAME</var> script"</code> (e.g. {"Arabic script"}). The displayed text used in {:makeCategoryLink()} is always the same as the display form. If the script has different names in different languages (e.g. `Aran`, which is called {"Shahmukhi"} in Punjabi and certain related languages but otherwise {"Arabic"}), and `lang` is given, return the language-specific name; otherwise return the default or only name. ]==] function Script:getDisplayForm(lang) return self:getCategoryName("nocap", lang) end function Script:getAliases() Script.getAliases = require(language_like_module).getAliases return self:getAliases() end function Script:getVarieties(flatten) Script.getVarieties = require(language_like_module).getVarieties return self:getVarieties(flatten) end function Script:getOtherNames() Script.getOtherNames = require(language_like_module).getOtherNames return self:getOtherNames() end function Script:getAllNames() Script.getAllNames = require(language_like_module).getAllNames return self:getAllNames() end --[==[Returns the {{w|IETF language tag#Syntax of language tags|IETF subtag}} used for the script, which should always be a valid {{w|ISO 15924}} script code. This is used when constructing HTML {{code|html|lang{{=}}}} tags. The {{lua|ietf_subtag}} value from the script's data file is used, if present; otherwise, the script code is used. For script codes which contain a hyphen, only the part after the hyphen is used (e.g. {{lua|"fa-Arab"}} becomes {{lua|"Arab"}}).]==] function Script:getIETFSubtag() local code = self._ietf_subtag if code == nil then code = self._data.ietf_subtag or match(self:getCode(), "[^%-]+$") self._ietf_subtag = code end return code end --[==[Returns a script object for the parent of the script, such as {"Arab"} for {"fa-Arab"}. It returns {nil} for scripts without a parent, like {"Latn"}, {"Grek"}, etc.]==] function Script:getParent() local parent = self._parentObject if parent == nil then parent = self:getParentCode() -- If the value is nil, it's cached as false. parent = parent and get_by_code(parent) or false self._parentObject = parent end return parent or nil end --[==[Returns the script code of the parent of the script, such as {"Arab"} for {"fa-Arab"}. It returns {nil} for scripts without a parent, like {"Latn"}, {"Grek"}, etc.]==] function Script:getParentCode() local parent = self._parentCode if parent == nil then -- If the value is nil, it's cached as false. parent = self._data.parent or false self._parentCode = parent end return parent or nil end function Script:getSystemCodes() if not self._systemCodes then local system_codes = self._data[3] if type(system_codes) == "table" then self._systemCodes = system_codes elseif type(system_codes) == "string" then self._systemCodes = split(system_codes, ",", true, true) else self._systemCodes = {} end end return self._systemCodes end function Script:getSystems() if not self._systemObjects then self._systemObjects = {} for _, system in ipairs(self:getSystemCodes()) do insert(self._systemObjects, get_writing_system(system)) end end return self._systemObjects end --[==[Check whether the script is of type `system`, which can be a writing system code or object. If multiple systems are passed, return true if the script is any of the specified systems.]==] function Script:isSystem(...) for _, system in ipairs{...} do if type(system) == "table" then system = system:getCode() end for _, s in ipairs(self:getSystemCodes()) do if system == s then return true end end end return false end --[==[Returns a table of types as a lookup table (with the types as keys). Currently, the only possible type is {script}.]==] function Script:getTypes() local types = self._types if types == nil then types = {script = true} local rawtypes = self._data.type if rawtypes then for t in gmatch(rawtypes, "[^,]+") do types[t] = true end end self._types = types end return types end --[==[Given a list of types as strings, returns true if the script has all of them. Use {{lua|hasType("script")}} to determine if an object that may be a language, family or script is a script.]==] function Script:hasType(...) Script.hasType = require(language_like_module).hasType return self:hasType(...) end --[==[ Return the name of the main category of that script. Example: {"Cyrillic script"} for Cyrillic, whose category is at [[:Category:Cyrillic script]]. Unless optional argument `nocap` is given, the script name at the beginning of the returned value will be capitalized. This capitalization is correct for category names, but not if the script name is lowercase and the returned value of this function is used in the middle of a sentence. (For example, the script with the code `Semap` has the name {"flag semaphore"}, which should remain lowercase when used as part of the category name [[:Category:Translingual letters in flag semaphore]] but should be capitalized in [[:Category:Flag semaphore templates]].) If you are considering using {getCategoryName("nocap")}, use {getDisplayForm()} instead. If the script has different names in different languages (e.g. `Aran`, which is called {"Shahmukhi"} in Punjabi and certain related languages but otherwise {"Arabic"}), and `lang` is given, return the language-specific name; otherwise return the default or only name. ]==] function Script:getCategoryName(nocap, lang) local name = self:getCanonicalName(lang) if category_name_has_suffix(name, scripts_suffixes or get_scripts_suffixes()) then name = name .. " script" end if not nocap then name = mw.getContentLanguage():ucfirst(name) end return name end --[==[ Return a link to the appropriate category for the script, displaying using the display form of the script. For example, `Cyrl` returns `[[:Category:Cyrillic script|Cyrillic script]]`. The display form is not automatically capitalized, so e.g. the script code `Semap` will return `[[:Category:Flag semaphore|flag semaphore]]`. If the script has different names in different languages (e.g. `Aran`, which is called {"Shahmukhi"} in Punjabi and certain related languages but otherwise {"Arabic"}), and `lang` is given, return the language-specific name; otherwise return the default or only name. ]==] function Script:makeCategoryLink(lang) return "[[:श्रेणी:" .. self:getCategoryName(lang) .. "|" .. self:getDisplayForm(lang) .. "]]" end --[==[Returns the Wikidata item id for the script or <code>nil</code>. This corresponds to the the second field in the data modules.]==] function Script:getWikidataItem() Script.getWikidataItem = require(language_like_module).getWikidataItem return self:getWikidataItem() end --[==[ Returns the name of the Wikipedia article for the script. `project` specifies the language and project to retrieve the article from, defaulting to {"enwiki"} for the English Wikipedia. Normally if specified it should be the project code for a specific-language Wikipedia e.g. "zhwiki" for the Chinese Wikipedia, but it can be any project, including non-Wikipedia ones. If the project is the English Wikipedia and the property {wikipedia_article} is present in the data module it will be used first. In all other cases, a sitelink will be generated from {:getWikidataItem} (if set). The resulting value (or lack of value) is cached so that subsequent calls are fast. If no value could be determined, and `noCategoryFallback` is {false}, {:getCategoryName} is used as fallback; otherwise, {nil} is returned. Note that if `noCategoryFallback` is {nil} or omitted, it defaults to {false} if the project is the English Wikipedia, otherwise to {true}. In other words, under normal circumstances, if the English Wikipedia article couldn't be retrieved, the return value will fall back to a link to the script's category, but this won't normally happen for any other project. ]==] function Script:getWikipediaArticle(noCategoryFallback, project) Script.getWikipediaArticle = require(language_like_module).getWikipediaArticle return self:getWikipediaArticle(noCategoryFallback, project) end --[==[Returns the name of the Wikimedia Commons category page for the script.]==] function Script:getCommonsCategory() Script.getCommonsCategory = require(language_like_module).getCommonsCategory return self:getCommonsCategory() end --[==[Returns the charset defining the script's characters from the script's data file. This can be used to search for words consisting only of this script, but see the warning above.]==] function Script:getCharacters() return self.characters or nil end --[==[Returns the number of characters in the text that are part of this script. '''Note:''' You should never assume that text consists entirely of the same script. Strings may contain spaces, punctuation and even wiki markup or HTML tags. HTML tags will skew the counts, as they contain Latin-script characters. So it's best to avoid them.]==] function Script:countCharacters(text) local charset = self._data.characters if charset == nil then return 0 end return select(2, ugsub(text, "[" .. charset .. "]", "")) end function Script:hasCapitalization() return not not self._data.capitalized end function Script:hasSpaces() return self._data.spaces ~= false end function Script:isTransliterated() return self._data.translit ~= false end --[==[Returns true if the script is (sometimes) sorted by scraping page content, meaning that it is sensitive to changes in capitalization during sorting.]==] function Script:sortByScraping() return not not self._data.sort_by_scraping end --[==[Returns the text direction. Horizontal scripts return {{lua|"ltr"}} (left-to-right) or {{lua|"rtl"}} (right-to-left), while vertical scripts return {{lua|"vertical-ltr"}} (vertical left-to-right) or {{lua|"vertical-rtl"}} (vertical right-to-left).]==] function Script:getDirection() return self._data.direction or "ltr" end function Script:getData() return self._data end --[==[Returns the name of the module containing the script's data. Currently, this is always [[Module:scripts/data]].]==] function Script:getDataModuleName() return scripts_data_module end --[==[Returns {{lua|true}} if the script contains characters that require fixes to Unicode normalization under certain circumstances, {{lua|false}} if it doesn't.]==] function Script:hasNormalizationFixes() return not not self._data.normalizationFixes end --[==[Corrects discouraged sequences of Unicode characters to the encouraged equivalents.]==] function Script:fixDiscouragedSequences(text) if self:hasNormalizationFixes() then local norm_fixes = self._data.normalizationFixes local to = norm_fixes.to if to then for i, v in ipairs(norm_fixes.from) do text = ugsub(text, v, to[i] or "") end end end return text end do local combining_classes -- Obtain the list of default combining classes. local function get_combining_classes() combining_classes, get_combining_classes = load_data(combining_classes_module), nil return combining_classes end -- Implements a modified form of Unicode normalization for instances where there are identified deficiencies in the default Unicode combining classes. local function fixNormalization(text, self) if not self:hasNormalizationFixes() then return text end local norm_fixes = self._data.normalizationFixes local new_classes = norm_fixes.combiningClasses if not (new_classes and umatch(text, "[" .. norm_fixes.combiningClassCharacters .. "]")) then return text end text = explode(text) -- Manual sort based on new combining classes. -- We can't use table.sort, as it compares the first/last values in an array as a shortcut, which messes things up. for i = 2, #text do local char = text[i] local class = new_classes[char] or (combining_classes or get_combining_classes())[char] if class then repeat i = i - 1 local prev = text[i] if (new_classes[prev] or (combining_classes or get_combining_classes())[prev] or 0) < class then break end text[i], text[i + 1] = char, prev until i == 1 end end return concat(text) end function Script:toFixedNFC(text) return fixNormalization(toNFC(text), self) end function Script:toFixedNFD(text) return fixNormalization(toNFD(text), self) end function Script:toFixedNFKC(text) return fixNormalization(toNFKC(text), self) end function Script:toFixedNFKD(text) return fixNormalization(toNFKD(text), self) end end function Script:toJSON(opts) local ret = { canonicalName = self:getCanonicalName(), canonicalNameTable = self:getCanonicalNameTable(), categoryName = self:getCategoryName("nocap"), code = self:getCode(), parent = self:getParentCode(), systems = self:getSystemCodes(), aliases = self:getAliases(), varieties = self:getVarieties(), otherNames = self:getOtherNames(), type = keys_to_list(self:getTypes()), direction = self:getDirection(), characters = self:getCharacters(), ietfSubtag = self:getIETFSubtag(), wikidataItem = self:getWikidataItem(), wikipediaArticle = self:getWikipediaArticle(true), } -- Use `deep_copy` when returning a table, so that there are no editing restrictions imposed by `mw.loadData`. return opts and opts.lua_table and deep_copy(ret) or to_json(ret, opts) end function export.makeObject(code, data) local data_type = type(data) if data_type ~= "table" then error(("bad argument #2 to 'makeObject' (table expected, got %s)"):format(data_type)) end return setmetatable({_data = data, _code = code, characters = data.characters}, Script) end make_object = export.makeObject local scripts_to_track = { ["fa-Arab"] = true, ["kk-Arab"] = true, ["ks-Arab"] = true, ["ku-Arab"] = true, ["ms-Arab"] = true, ["mzn-Arab"] = true, ["ota-Arab"] = true, ["pa-Arab"] = true, ["ps-Arab"] = true, ["sd-Arab"] = true, ["tt-Arab"] = true, ["ug-Arab"] = true, ["ur-Arab"] = true, } --[==[ Finds the script whose code matches the one provided. If it exists, it returns a {Script} object representing the script. Otherwise, it returns {nil}.]==] function export.getByCode(code) if scripts_to_track[code] then track(code) end local data = (scripts_data or get_scripts_data())[code] return data ~= nil and make_object(code, data) or nil end get_by_code = export.getByCode --[==[ Look for the script whose canonical name (the name used to represent that script on Wiktionary) matches the one provided. If it exists, it returns a {Script} object representing the script. Otherwise, it returns {nil}. The canonical name of scripts should always be unique (it is an error for two scripts on Wiktionary to share the same canonical name), so this is guaranteed to give at most one result.]==] function export.getByCanonicalName(name) if name == nil then return nil end local code = (scripts_canonical_names or get_scripts_canonical_names())[name] if code == nil then return nil end return get_by_code(code) end --[==[ Look for the script whose category name (the name used in categories for that script) matches the one provided. If it exists, it returns a {Script} object representing the script. Otherwise, it returns {nil}. In almost all cases, the category name for a script is its canonical name plus the word "script", e.g. "Cyrillic" has the category name "Cyrillic script". Where a canonical name ends with "script", "code" or "semaphore", the category name is identical to the canonical name. ]==] function export.getByCategoryName(name) if name == nil then return nil end local code, canonical_name = category_name_to_code( name, " script", scripts_canonical_names or get_scripts_canonical_names(), scripts_suffixes or get_scripts_suffixes() ) if code == nil then return nil, nil end return get_by_code(code), canonical_name end --[==[ Convert a canonical name to the corresponding category name. Unless optional argument `nocap` is given, the script name at the beginning of the returned value will be capitalized. See {:getCategoryName()} for more discussion. ]==] function export.canonicalNameToCategoryName(name, nocap) if category_name_has_suffix(name, scripts_suffixes or get_scripts_suffixes()) then name = name .. " script" end if not nocap then name = mw.getContentLanguage():ucfirst(name) end return name end --[==[ Takes a codepoint or a character and finds the script code (if any) that is appropriate for it based on the codepoint, using the data module [[Module:scripts/recognition data]]. The data module was generated from the patterns in [[Module:scripts/data]] using [[Module:User:Erutuon/script recognition]]. Converts the character to a codepoint. Returns a script code if the codepoint is in the list of individual characters, or if it is in one of the defined ranges in the 4096-character block that it belongs to, else returns "None". ]==] function export.charToScript(char) export.charToScript = require(scripts_chartoscript_module).charToScript return export.charToScript(char) end --[==[ Returns the code for the script that has the greatest number of characters in `text`. Useful for script tagging text that is unspecified for language. Uses [[Module:scripts/recognition data]] to determine a script code for a character language-agnostically. Specifically, it works as follows: Convert each character to a codepoint. Increment the counter for the script code if the codepoint is in the list of individual characters, or if it is in one of the defined ranges in the 4096-character block that it belongs to. Each script has a two-part counter, for primary and secondary matches. Primary matches are when the script is the first one listed; otherwise, it's a secondary match. When comparing scripts, first the total of both are compared (i.e. the overall number of matches). If these are the same, the number of primary and then secondary matches are used as tiebreakers. For example, this is used to ensure that `Grek` takes priority over `Polyt` if no characters which exclusively match `Polyt` are found, as `Grek` is a subset of `Polyt`. If `none_is_last_resort_only` is specified, this will never return {"None"} if any characters in `text` belong to a script. Otherwise, it will return {"None"} if there are more characters that don't belong to a script than belong to any individual script. (FIXME: This behavior is probably wrong, and `none_is_last_resort_only` should probably become the default.) ]==] function export.findBestScriptWithoutLang(text, none_is_last_resort_only) export.findBestScriptWithoutLang = require(scripts_chartoscript_module).findBestScriptWithoutLang return export.findBestScriptWithoutLang(text, none_is_last_resort_only) end return export i2qmmc79em1emkp7yr38qtm3yxy24ob मॉड्यूल:scripts/data 828 302127 487549 477917 2026-09-01T15:14:04Z SM7 6218 असमिया 487549 Scribunto text/plain --[=[ When adding new scripts to this file, please don't forget to add style definitons for the script in [[MediaWiki:Common.css]]. ]=] local u = mw.ustring.char local m = {} m["Adlm"] = { "Adlam", "alphabet", characters = "؟ـ𞤀-𞥟", capitalized = true, direction = "rtl", } m["Afak"] = { "Afaka", "syllabary", } m["Aghb"] = { "Caucasian Albanian", "alphabet", characters = "𐔰-𐕯", } m["Ahom"] = { "Ahom", "abugida", characters = "𑜀-𑝏", } m["Arab"] = { "अरबी", "abjad", -- more precisely, impure abjad varieties = {"Jawi", {"नस्तालीक", "नस्तालीक़"}}, characters = "؀-ۿݐ-ݿࡰ-ࣿﭐ-﷏ﷰ-﷿ﹰ-﻾𐋠-𐋻𐹠-𐹿𐻀-𐻿𞸀-𞻿", direction = "rtl", normalizationFixes = { from = {"ٳ"}, to = {"اٟ"} }, } m["fa-Arab"] = { "अरबी", m["Arab"][2], characters = m["Arab"].characters, otherNames = {"Perso-Arabic"}, direction = "rtl", parent = "Arab", normalizationFixes = m["Arab"].normalizationFixes, } m["kk-Arab"] = { "Arabic", m["Arab"][2], characters = m["Arab"].characters, direction = "rtl", parent = "Arab", normalizationFixes = m["Arab"].normalizationFixes, } m["ks-Arab"] = { "Arabic", m["Arab"][2], characters = m["Arab"].characters, direction = "rtl", parent = "Arab", normalizationFixes = m["Arab"].normalizationFixes, } m["ku-Arab"] = { "Arabic", m["Arab"][2], characters = m["Arab"].characters, direction = "rtl", parent = "Arab", normalizationFixes = m["Arab"].normalizationFixes, } m["ms-Arab"] = { "Arabic", m["Arab"][2], characters = m["Arab"].characters, direction = "rtl", parent = "Arab", normalizationFixes = m["Arab"].normalizationFixes, } m["mzn-Arab"] = { "Arabic", m["Arab"][2], characters = m["Arab"].characters, direction = "rtl", parent = "Arab", normalizationFixes = m["Arab"].normalizationFixes, } m["ota-Arab"] = { "Arabic", m["Arab"][2], characters = m["Arab"].characters, direction = "rtl", parent = "Arab", normalizationFixes = m["Arab"].normalizationFixes, } m["pa-Arab"] = { "Shahmukhi", m["Arab"][2], characters = m["Arab"].characters, otherNames = {"Arabic"}, direction = "rtl", parent = "Arab", normalizationFixes = m["Arab"].normalizationFixes, } m["ps-Arab"] = { "Arabic", m["Arab"][2], characters = m["Arab"].characters, direction = "rtl", parent = "Arab", normalizationFixes = m["Arab"].normalizationFixes, } m["sd-Arab"] = { "Arabic", m["Arab"][2], characters = m["Arab"].characters, direction = "rtl", parent = "Arab", normalizationFixes = m["Arab"].normalizationFixes, } m["tt-Arab"] = { "Arabic", m["Arab"][2], characters = m["Arab"].characters, direction = "rtl", parent = "Arab", normalizationFixes = m["Arab"].normalizationFixes, } m["ug-Arab"] = { "Arabic", m["Arab"][2], characters = m["Arab"].characters, direction = "rtl", parent = "Arab", normalizationFixes = m["Arab"].normalizationFixes, } m["ur-Arab"] = { "Arabic", m["Arab"][2], characters = m["Arab"].characters, direction = "rtl", parent = "Arab", normalizationFixes = m["Arab"].normalizationFixes, } m["xka-Arab"] = { "Arabic", m["Arab"][2], characters = m["Arab"].characters, direction = "rtl", parent = "Arab", normalizationFixes = m["Arab"].normalizationFixes, } -- Aran (Nastaliq) is subsumed into Arab m["Armi"] = { "Imperial Aramaic", "abjad", characters = "𐡀-𐡟", direction = "rtl", } m["Armn"] = { "Armenian", "alphabet", characters = "԰-֏ﬓ-ﬗ", capitalized = true, } m["Avst"] = { "Avestan", "alphabet", characters = "𐬀-𐬿", direction = "rtl", } m["pal-Avst"] = { "Pazend", m["Avst"][2], characters = m["Avst"].characters, direction = "rtl", parent = "Avst", } m["Bali"] = { "Balinese", "abugida", characters = "ᬀ-᭿", } m["Bamu"] = { "Bamum", "syllabary", characters = "ꚠ-꛿𖠀-𖨿", } m["Bass"] = { "Bassa", "alphabet", aliases = {"Bassa Vah", "Vah"}, characters = "𖫐-𖫿", } m["Batk"] = { "Batak", "abugida", characters = "ᯀ-᯿", } m["Beng"] = { "Bengali", "abugida", characters = "॒॑।॥ঀ-৯৲-৿᳕᳖᳘᳐᳒᳡ᳪ᳭ᳲᳵ-᳷꣱", normalizationFixes = { from = {"অা", "ঋৃ", "ঌৢ"}, to = {"আ", "ৠ", "ৡ"} }, } m["as-Beng"] = { "असमिया", m["Beng"][2], otherNames = {"बंगाली-असमिया", "पूर्वी नागरी"}, characters = "॒॑।॥ঀ-য঱-৿᳕᳖᳘᳐᳒᳡ᳪ᳭ᳲᳵ-᳷꣱", normalizationFixes = m["Beng"].normalizationFixes, } m["Bhks"] = { "Bhaiksuki", "abugida", characters = "𑰀-𑱯", } m["Blis"] = { "Blissymbols", "logography", aliases = {"Blissymbolics"}, -- Not in Unicode } m["Bopo"] = { "Zhuyin", "semisyllabary", aliases = {"Zhuyin Fuhao", "Bopomofo"}, characters = "ˇˉˊˋ˙˪˫、-〃〈-】〓-〟〪-〭〰〷・㄀-ㄯ﹅﹆。-・", } m["Brah"] = { "Brahmi", "abugida", characters = "𑀀-𑁿", normalizationFixes = { from = {"𑀅𑀸", "𑀋𑀾", "𑀏𑁂"}, to = {"𑀆", "𑀌", "𑀐"} }, } m["Brai"] = { "Braille", "alphabet", characters = "⠀-⣿", } m["Bugi"] = { "Buginese", "abugida", aliases = {"Lontara"}, characters = "ᨀ-᨟ꧏ", } m["Buhd"] = { "Buhid", "abugida", characters = "᜵᜶ᝀ-᝟ꧏ", } m["Cakm"] = { "Chakma", "abugida", characters = "০-৯၀-၉𑄀-𑅏", } m["Cans"] = { "Canadian syllabics", "abugida", characters = "᐀-ᙿᢰ-᣿𑪰-𑪿", } m["Cari"] = { "Carian", "alphabet", characters = "𐊠-𐋟", } m["Cham"] = { "Cham", "abugida", characters = "ꨀ-꩟", } m["Cher"] = { "Cherokee", "syllabary", characters = "Ꭰ-᏿ꭰ-ꮿ", } m["Chrs"] = { "Chorasmian", "abjad", characters = "𐾰-𐿟", direction = "rtl", } m["Copt"] = { "Coptic", "alphabet", characters = "Ϣ-ϯⲀ-⳿𐋠-𐋻", -- this is mostly "Coptic", not unified "Greek and Coptic" capitalized = true, } m["Cpmn"] = { "Cypro-Minoan", "syllabary", aliases = {"Cypro Minoan"}, characters = "𐄀𐄁𒾐-𒿿", } m["Cprt"] = { "Cypriot", "syllabary", characters = "𐄀-𐄂𐄇-𐄳𐄷-𐄿𐠀-𐠿", direction = "rtl", } m["Cyrl"] = { "Cyrillic", "alphabet", characters = "Ѐ-ԯᲀ-᲏ᴫᵸ᷸ⷠ-ⷿ⹃Ꙁ-ꚟ︮︯𞀰-𞂏", capitalized = true, } m["Cyrs"] = { "Old Cyrillic", m["Cyrl"][2], aliases = {"Early Cyrillic"}, characters = m["Cyrl"].characters, capitalized = m["Cyrl"].capitalized, wikipedia_article = "Early Cyrillic alphabet", } m["Deva"] = { "देवनागरी", "abugida", characters = "ऀ-ॿ꣠-ꣿ𑬀-𑬉", normalizationFixes = { from = {"ॆॆ", "ेे", "ाॅ", "ाॆ", "ाꣿ", "ॊॆ", "ाे", "ाै", "ोे", "ाऺ", "ॖॖ", "अॅ", "अॆ", "अा", "एॅ", "एॆ", "एे", "एꣿ", "ऎॆ", "अॉ", "आॅ", "अॊ", "आॆ", "अो", "आे", "अौ", "आै", "ओे", "अऺ", "अऻ", "आऺ", "अाꣿ", "आꣿ", "ऒॆ", "अॖ", "अॗ", "ॶॖ", "्‍?ा"}, to = {"ꣿ", "ै", "ॉ", "ॊ", "ॏ", "ॏ", "ो", "ौ", "ौ", "ऻ", "ॗ", "ॲ", "ऄ", "आ", "ऍ", "ऎ", "ऐ", "ꣾ", "ꣾ", "ऑ", "ऑ", "ऒ", "ऒ", "ओ", "ओ", "औ", "औ", "औ", "ॳ", "ॴ", "ॴ", "ॵ", "ॵ", "ॵ", "ॶ", "ॷ", "ॷ"} }, } m["Diak"] = { "Dhives Akuru", "abugida", aliases = {"Dives Akuru"}, characters = "𑤀-𑤆𑤉𑤌-𑤓𑤕𑤖𑤘-𑤵𑤷𑤸𑤻-𑥆𑥐-𑥙", } m["Dogr"] = { "Dogra", "abugida", characters = "𑠀-𑠻", } m["Dsrt"] = { "Deseret", "alphabet", characters = "𐐀-𐑏", capitalized = true, } m["Dupl"] = { "Duployan", "alphabet", characters = "𛰀-𛱪𛱰-𛱼𛲀-𛲈𛲐-𛲙𛲜-𛲟", } m["Egyd"] = { "Demotic", "abjad, logography", } m["Egyh"] = { "Hieratic", "abjad, logography", } m["Egyp"] = { "Egyptian hieroglyphic", "abjad, logography", characters = "𓀀-𓑕", varieties = {"Hieratic"}, wikipedia_article = "Egyptian hieroglyphs", normalizationFixes = { from = {"𓈗", "𓃁", "𓆖"}, to = {"𓈖𓐰𓈖𓐰𓈖", "𓃀𓐶𓂝", "𓆓𓐳𓐷𓏏𓐰𓇿𓐸"} }, } m["Elba"] = { "Elbasan", "alphabet", characters = "𐔀-𐔧", } m["Elym"] = { "Elymaic", "abjad", characters = "𐿠-𐿶", direction = "rtl", } m["Ethi"] = { "Ethiopic", "abugida", aliases = {"Ge'ez"}, characters = "ሀ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚ፝-፼ᎀ-᎙ⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮ𞟠-𞟦𞟨-𞟫𞟭𞟮𞟰-𞟾", } m["Geok"] = { "Khutsuri", "alphabet", characters = "Ⴀ-ჅჇჍ჻ⴀ-ⴥⴧⴭ", -- Ⴀ-Ⴭ is Asomtavruli, ⴀ-ⴭ is Nuskhuri varieties = {"Nuskhuri", "Asomtavruli"}, capitalized = true, } m["Geor"] = { "Georgian", "alphabet", characters = "ა-ჿᲐ-ᲺᲽ-Ჿ", -- ა-ჿ is lowercase Mkhedruli; Ა-Ჿ is uppercase Mkhedruli (Mtavruli) varieties = {"Mkhedruli", "Mtavruli"}, capitalized = true, } m["Glag"] = { "Glagolitic", "alphabet", characters = "Ⰰ-ⱟ𞀀-𞀆𞀈-𞀘𞀛-𞀡𞀣𞀤𞀦-𞀪", capitalized = true, } m["Gong"] = { "Gunjala Gondi", "abugida", characters = "𑵠-𑵥𑵧𑵨𑵪-𑶎𑶐𑶑𑶓-𑶘𑶠-𑶩", } m["Gonm"] = { "Masaram Gondi", "abugida", characters = "𑴀-𑴆𑴈𑴉𑴋-𑴶𑴺𑴼𑴽𑴿-𑵇𑵐-𑵙", } m["Goth"] = { "Gothic", "alphabet", characters = "𐌰-𐍊", } m["Gran"] = { "Grantha", "abugida", characters = "𑌀-𑌃𑌅-𑌌𑌏-𑌐𑌓-𑌨𑌪-𑌰𑌲𑌳𑌵-𑌹𑌼-𑍄𑍇𑍈𑍋-𑍍𑍐𑍗𑍝-𑍣𑍦-𑍬𑍰-𑍴", } m["Grek"] = { "Greek", "alphabet", characters = "Ͱ-ͷͺ-Ϳ΄-ΊΌΎ-ΡΣ-ϡϰ-Ͽᴦ-ᴪᵝ-ᵡᵦ-ᵪᶿΩ℩ꭥ𐅀-𐆎𐆠𝈀-𝉅", capitalized = true, } m["polytonic"] = { "Greek", m["Grek"][2], characters = "ἀ-῾" .. m["Grek"].characters, capitalized = m["Grek"].capitalized, parent = "Grek", } m["Gujr"] = { "Gujarati", "abugida", characters = "ઁ-ઃઅ-ઍએ-ઑઓ-નપ-રલળવ-હ઼-ૅે-ૉો-્ૐૠ-ૣ૦-૱ૺ-૿", normalizationFixes = { from = {"ઓ", "અાૈ", "અા", "અૅ", "અે", "અૈ", "અૉ", "અો", "અૌ", "આૅ", "આૈ", "ૅા"}, to = {"અાૅ", "ઔ", "આ", "ઍ", "એ", "ઐ", "ઑ", "ઓ", "ઔ", "ઓ", "ઔ", "ૉ"} }, } m["Guru"] = { "Gurmukhi", "abugida", characters = "ਁ-ਃਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹ਼ਾ-ੂੇੈੋ-੍ੑਖ਼-ੜਫ਼੦-੶", normalizationFixes = { from = {"ਅਾ", "ਅੈ", "ਅੌ", "ੲਿ", "ੲੀ", "ੲੇ", "ੳੁ", "ੳੂ", "ੳੋ"}, to = {"ਆ", "ਐ", "ਔ", "ਇ", "ਈ", "ਏ", "ਉ", "ਊ", "ਓ"} }, } m["Hang"] = { "Hangul", "syllabary", aliases = {"Hangeul"}, characters = ( "가-힣".. -- Syllables "ᄀ-ᇿ".. -- Jamo "ꥠ-ꥼ".. -- Jamo Ext-A "ힰ-ퟻ".. -- Jamo Ext-B "ㄱ-ㆎ".. -- Compat Jamo "ᅠ-ᅵ" -- Halfwidth ), } m["Hani"] = { "Han", "logography", characters = ( "一-鿿".. "㐀-䶿".. -- ExtA "𠀀-𮯯".. -- SIP "𰀀-𲎯".. -- ExtG-H "﨎﨏﨑﨓﨔﨟﨡﨣﨤﨧﨨﨩".. "⺀-⻿".. -- Radicals Supplement " -〿".. -- CJK Symbols and Punctuation "𖿢𖿣𖿰𖿱".. -- Ideographic Symbols and Punctuation "㇀-㇯".. -- Strokes "㋿㍻-㍿" .. -- 組文字 "㈠-㉇㊀-㊰㋀-㋋㍘-㍰㏠-㏾🈐-🈒🈔-🈻🉀-🉈🉐🉑🉠-🉥" ), varieties = {"Hanzi", "Kanji", "Hanja", "Chu Nom"}, spaces = false, } m["Hans"] = { "Simplified Han", m["Hani"][2], characters = m["Hani"].characters, spaces = m["Hani"].spaces, parent = "Hani", } m["Hant"] = { "Traditional Han", m["Hani"][2], characters = m["Hani"].characters, spaces = m["Hani"].spaces, parent = "Hani", } m["Hano"] = { "Hanunoo", "abugida", characters = "ᜠ-᜴", } m["Hatr"] = { "Hatran", "abjad", characters = "𐣠-𐣿", direction = "rtl", } m["Hebr"] = { "Hebrew", "abjad", -- more precisely, impure abjad characters = u(0x0590) .. "-" .. u(0x05FF) .. u(0xFB1D) .. "-" .. u(0xFB4F), direction = "rtl", } m["Hira"] = { "Hiragana", "syllabary", characters = "ぁ-ゟ𛀁-𛄞𛅐𛅑𛅒🈀", varieties = {"Hentaigana"}, spaces = false, } m["Hluw"] = { "Anatolian Hieroglyphs", "logography, syllabary", characters = "𔐀-𔙆", wikipedia_article = "Anatolian hieroglyphs", } m["Hmng"] = { "Pahawh Hmong", "semisyllabary", aliases = {"Hmong"}, characters = "𖬀-𖮏", } m["Hmnp"] = { "Nyiakeng Puachue Hmong", "alphabet", characters = "𞄀‎-𞅏", } m["Hung"] = { "Old Hungarian", "alphabet", aliases = {"Hungarian runic"}, characters = "𐲀-𐲲", capitalized = true, direction = "rtl", } m["Ibrn"] = { "Iberian", "semisyllabary", } m["Imag"] = { -- To be used to avoid any formatting or link processing "Image-rendered", -- This should not have any characters listed translit = false, character_category = false, } m["Inds"] = { "Indus", aliases = {"Harappan", "Indus Valley"}, } m["IPAchar"] = { "International Phonetic Alphabet", aliases = {"IPA"}, } m["Ital"] = { "Old Italic", "alphabet", characters = "𐌀-𐌯", } m["Java"] = { "Javanese", "abugida", characters = "ꦀ-꧟", } m["Jurc"] = { "Jurchen", spaces = false, } m["Kali"] = { "Kayah Li", "abugida", characters = "꤀-꤯", } m["Kana"] = { "Katakana", "syllabary", characters = "゠-ヿㇰ-ㇿ㌀-㍗ヲ-゚𛀀𛅤𛅥𛅦𛅧", spaces = false, } m["Kawi"] = { "Kawi", "abugida", characters = "𑼀-𑽙", } m["Khar"] = { "Kharoshthi", "abugida", characters = "𐨀-𐩘", direction = "rtl", } m["Khmr"] = { "Khmer", "abugida", characters = "ក-៝០-៩៰-៹᧠-᧿", spaces = false, normalizationFixes = { from = {"ឣ", "ឤ"}, to = {"អ", "អា"} }, } m["Khoj"] = { "Khojki", "abugida", characters = "𑈀-𑈾", normalizationFixes = { from = {"𑈀𑈬𑈱", "𑈀𑈬", "𑈀𑈱", "𑈀𑈳", "𑈁𑈱", "𑈆𑈬", "𑈬𑈰", "𑈬𑈱", "𑉀𑈮"}, to = {"𑈇", "𑈁", "𑈅", "𑈇", "𑈇", "𑈃", "𑈲", "𑈳", "𑈂"} }, } m["Kitl"] = { "Khitan Large", "logography, syllabary", spaces = false, } m["Kits"] = { "Khitan Small", "logography, syllabary", characters = "𘬀-𘳕"..u(0x16FE4), spaces = false, } m["Knda"] = { "Kannada", "abugida", characters = "ಀ-ೲ", normalizationFixes = { from = {"ಉಾ", "ಋಾ", "ಒೌ"}, to = {"ಊ", "ೠ", "ಔ"} }, } m["Kpel"] = { "Kpelle", "syllabary", -- Not in Unicode } m["Kthi"] = { "कैथी", "abugida", characters = "𑂀-𑃍", } m["Lana"] = { "Tai Tham", "abugida", aliases = {"Tham", "Tua Mueang", "Lanna"}, characters = "ᨠ-ᩞ᩠-᩿᩼᪀-᪉᪐-᪙᪠-᪭", spaces = false, } m["Laoo"] = { "Lao", "abugida", characters = "ກຂຄຆ-ຊຌ-ຣລວ-ຽເ-ໄໆ່-໎໐-໙ໜ-ໟ", spaces = false, } m["Latn"] = { "लैटिन", "alphabet", aliases = {"रोमन"}, characters = "A-Za-zªºÀ-ÖØ-öø-ɏḀ-ỿ", varieties = {"Rumi", "Romaji", "Rōmaji", "Romaja"}, capitalized = true, translit = false, } m["Latf"] = { "Fraktur", m["Latn"][2], characters = m["Latn"].characters, otherNames = {"Blackletter"}, -- Blackletter is actually the parent "script" capitalized = m["Latn"].capitalized, translit = m["Latn"].translit, parent = "Latn", } m["Latg"] = { "Gaelic", m["Latn"][2], characters = m["Latn"].characters, otherNames = {"Irish"}, capitalized = m["Latn"].capitalized, translit = m["Latn"].translit, parent = "Latn", } m["Latinx"] = { "Latin", m["Latn"][2], characters = m["Latn"].characters .. "ɐ-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꟊꟐꟑꟓꟕ-ꟙꟲ-ꟿꬰ-ꭚꭜ-ꭤꭦ-ꭩff-stA-Za-z𐞀-𐞅𐞇-𐞰𐞲-𐞺𝼀-𝼞𝼥-𝼪", capitalized = m["Latn"].capitalized, translit = m["Latn"].translit, parent = "Latn", } m["pjt-Latn"] = { "Latin", m["Latn"][2], characters = m["Latn"].characters, capitalized = m["Latn"].capitalized, translit = m["Latn"].translit, parent = "Latn", } m["Leke"] = { "Leke", "abugida", } m["Lepc"] = { "Lepcha", "abugida", characters = "ᰀ-ᱏ", } m["Limb"] = { "Limbu", "abugida", characters = "ᤀ-᥏", } m["Lina"] = { "Linear A", characters = "𐘀-𐝧", } m["Linb"] = { "Linear B", characters = "𐀀-𐃺", } m["Lisu"] = { "Lisu", "alphabet", aliases = {"Fraser"}, characters = "ꓐ-꓿𑾰", normalizationFixes = { from = {"['’]", "[.ꓸ][.ꓸ]", "[.ꓸ][,ꓹ]"}, to = {"ʼ", "ꓺ", "ꓻ"} }, } m["Loma"] = { "Loma", "syllabary", -- Not in Unicode } m["Lyci"] = { "Lycian", "alphabet", characters = "𐊀-𐊜", } m["Lydi"] = { "Lydian", "alphabet", characters = "𐤠-𐤿", direction = "rtl", } m["Mahj"] = { "Mahajani", "abugida", characters = "𑅐-𑅶", } m["Maka"] = { "Lontara", "abugida", aliases = {"Makasar"}, characters = "𑻠-𑻸", } m["Mand"] = { "Mandaic", aliases = {"Mandaean"}, characters = "ࡀ-࡞", direction = "rtl", } m["Mani"] = { "Manichaean", "abjad", characters = "𐫀-𐫶", direction = "rtl", } m["Marc"] = { "Marchen", "abugida", characters = "𑱰-𑲶", } m["Maya"] = { "Maya", aliases = {"Maya hieroglyphic", "Mayan", "Mayan hieroglyphic"}, characters = "𝋠-𝋳", } m["Medf"] = { "Medefaidrin", aliases = {"Oberi Okaime", "Oberi Ɔkaimɛ"}, characters = "𖹀-𖺚", capitalized = true, } m["Mend"] = { "Mende", aliases = {"Mende Kikakui"}, characters = "𞠀-𞣖", direction = "rtl", } m["Merc"] = { "Meroitic cursive", "abugida", characters = "𐦠-𐦿", direction = "rtl", } m["Mero"] = { "Meroitic hieroglyphic", "abugida", characters = "𐦀-𐦟", direction = "rtl", } m["Mlym"] = { "Malayalam", "abugida", characters = "ഀ-ൿ", normalizationFixes = { from = {"ഇൗ", "ഉൗ", "എെ", "ഒാ", "ഒൗ", "ക്‍", "ണ്‍", "ന്‍റ", "ന്‍", "മ്‍", "യ്‍", "ര്‍", "ല്‍", "ള്‍", "ഴ്‍", "െെ", "ൻ്റ"}, to = {"ഈ", "ഊ", "ഐ", "ഓ", "ഔ", "ൿ", "ൺ", "ൻറ", "ൻ", "ൔ", "ൕ", "ർ", "ൽ", "ൾ", "ൖ", "ൈ", "ന്റ"} }, } m["Modi"] = { "Modi", "abugida", characters = "𑘀-𑙙", normalizationFixes = { from = {"𑘀𑘹", "𑘀𑘺", "𑘁𑘹", "𑘁𑘺"}, to = {"𑘊", "𑘋", "𑘌", "𑘍"} }, } m["Mong"] = { "Mongolian", "alphabet", aliases = {"Mongol bichig", "Hudum Mongol bichig"}, characters = "᠀-᠅᠊-᠙ᠠ-ᡂᡸᢀ-ᢗᢦᢩ‌‍ 𑙠-𑙨", direction = "down", } m["mnc-Mong"] = { "Manchu", m["Mong"][2], characters = "᠁᠄᠈-᠏ᠠᠣᠨ-ᠪᠮ-ᠰᠴ-ᠸᠺᡝᡟ-ᡡᡤ-ᡩᡬ-ᡱᡳ-ᡷᢀ-ᢈᢏᢚ-ᢥᢨᢪ‌‍ ", direction = "down", parent = "Mong", } m["sjo-Mong"] = { "Xibe", m["Mong"][2], aliases = {"Sibe"}, characters = "᠄᠇᠊-᠏ᠠᠣᠨᠪᠮ-ᠰᠴ-ᠸᠺᡝ-ᡲ‌‍ ", direction = "down", parent = "mnc-Mong", } m["xwo-Mong"] = { "Clear Script", m["Mong"][2], aliases = {"Todo", "Todo bichig"}, characters = "᠀᠁᠄-᠆᠊-ᠠᠨᠯ-ᠱᠴᠷᠸᠺᠻᡀᡃ-ᡜᢀ-ᢇᢉ-ᢏᢔᢖ-ᢙᢧ‌‍ 𑙩-𑙬", direction = "down", parent = "Mong", } m["Moon"] = { "Moon", "alphabet", aliases = {"Moon System of Embossed Reading", "Moon type", "Moon writing", "Moon alphabet", "Moon code"}, -- Not in Unicode } m["Morse"] = { "Morse code", } m["Mroo"] = { "Mro", characters = "𖩀-𖩯", } m["Mtei"] = { "Meitei Mayek", "abugida", aliases = {"Meetei Mayek", "Manipuri"}, characters = "ꯀ-꯹ꫠ-꫶", } m["Mult"] = { "Multani", "abugida", characters = "𑊀-𑊩", } m["musical"] = { "Musical notation", "pictography", characters = "𝄀-𝇨", translit = false, } m["Mymr"] = { "Burmese", "abugida", aliases = {"Myanmar"}, characters = "က-႟ꩠ-ꩿꧠ-ꧾ", spaces = false, } m["Nagm"] = { "Nag Mundari", "alphabet", characters = "𞓐-𞓹", } m["Nand"] = { "Nandinagari", "abugida", characters = "𑦠-𑧤", } m["Narb"] = { "Old North Arabian", "abjad", characters = "𐪀-𐪟", direction = "rtl", } m["Nbat"] = { "Nabataean", "abjad", aliases = {"Nabatean"}, characters = "𐢀-𐢯", direction = "rtl", } m["Newa"] = { "Newa", "abugida", aliases = {"Newar", "Newari", "Prachalit Nepal"}, characters = "𑐀-𑑡", } m["Nkdb"] = { "Dongba", "pictography", aliases = {"Naxi Dongba", "Nakhi Dongba", "Tomba", "Tompa", "Mo-so"}, spaces = false, -- Not in Unicode } m["Nkgb"] = { "Geba", "syllabary", aliases = {"Nakhi Geba", "Naxi Geba"}, spaces = false, -- Not in Unicode } m["Nkoo"] = { "N'Ko", "alphabet", characters = "߀-߿", direction = "rtl", } m["None"] = { "Unspecified", -- renders as 'unspecified script' -- This should not have any characters listed translit = false, character_category = false, } m["Nshu"] = { "Nüshu", "syllabary", aliases = {"Nushu"}, characters = "𖿡𛅰-𛋻", spaces = false, } m["Ogam"] = { "Ogham", characters = " -᚜", } m["Olck"] = { "Ol Chiki", characters = "᱐-᱿", } m["Orkh"] = { "Orkhon runes", aliases = {"Old Turkic"}, characters = "𐰀-𐱈", direction = "rtl", } m["Orya"] = { "Oriya", "abugida", aliases = {"Odia"}, characters = "ଁ-୷", normalizationFixes = { from = {"ଅା", "ଏୗ", "ଓୗ"}, to = {"ଆ", "ଐ", "ଔ"} }, } m["Osge"] = { "Osage", characters = "𐒰-𐓻", capitalized = true, } m["Osma"] = { "Osmanya", characters = "𐒀-𐒩", } m["Ougr"] = { "Old Uyghur", "abjad, alphabet", characters = "𐽰-𐾉", direction = "down", } m["Palm"] = { "Palmyrene", characters = "𐡠-𐡿", direction = "rtl", } m["Pauc"] = { "Pau Cin Hau", characters = "𑫀-𑫸", } m["Perm"] = { "Old Permic", characters = "𐍐-𐍺", } m["Phag"] = { "Phags-pa", "abugida", characters = "᠂᠃᠅‌‍ 。ꡀ-꡷", direction = "down", } m["Phli"] = { "Inscriptional Pahlavi", "abjad", characters = "𐭠-𐭿", direction = "rtl", } m["Phlp"] = { "Psalter Pahlavi", "abjad", characters = "𐮀-𐮯", direction = "rtl", } m["Phlv"] = { "Book Pahlavi", "abjad", direction = "rtl", -- Not in Unicode } m["Phnx"] = { "Phoenician", "abjad", characters = "𐤀-𐤟", direction = "rtl", } m["Plrd"] = { "Pollard", "abugida", aliases = {"Miao"}, characters = "𖼀-𖾟", } m["Prti"] = { "Inscriptional Parthian", characters = "𐭀-𐭟", direction = "rtl", } m["Ranj"] = { "Ranjana", "abugida", -- Not in Unicode } m["Rjng"] = { "Rejang", "abugida", characters = "ꤰ-꥟", } m["Rohg"] = { "Hanifi Rohingya", "alphabet", characters = "𐴀-𐴹", direction = "rtl", } m["Roro"] = { "Rongorongo", -- Not in Unicode } m["Ruminumerals"] = { "Rumi numerals", characters = "𐹠-𐹾", character_category = "Rumi numerals", } m["Runr"] = { "Runic", "alphabet", characters = "ᚠ-ᛰ", } m["Samr"] = { "Samaritan", "abjad", characters = "ࠀ-࠾", direction = "rtl", } m["Sarb"] = { "Old South Arabian", "abjad", characters = "𐩠-𐩿", direction = "rtl", } m["Saur"] = { "Saurashtra", "abugida", characters = "ꢀ-꣙", } m["Semap"] = { "flag semaphore", "pictography", } m["Sgnw"] = { "SignWriting", "pictography", characters = "𝠀-𝪯", translit = false, } m["Shaw"] = { "Shavian", characters = "𐑐-𐑿", } m["Shrd"] = { "Sharada", "abugida", characters = "𑆀-𑇙", } m["Shui"] = { "Sui", "logography", spaces = false, -- Not in Unicode } m["Sidd"] = { "Siddham", "abugida", characters = "𑖀-𑗝", } m["Sind"] = { "Khudawadi", "abugida", characters = "𑊰-𑋹", normalizationFixes = { from = {"𑊰𑋠", "𑊰𑋥", "𑊰𑋦", "𑊰𑋧", "𑊰𑋨"}, to = {"𑊱", "𑊶", "𑊷", "𑊸", "𑊹"} }, } m["Sinh"] = { "Sinhalese", "abugida", aliases = {"Sinhala"}, characters = "ං-෴", normalizationFixes = { from = {"අා", "අැ", "අෑ", "උෟ", "ඍෘ", "ඏෟ", "එ්", "එෙ", "ඔෟ", "ෘෘ"}, to = {"ආ", "ඇ", "ඈ", "ඌ", "ඎ", "ඐ", "ඒ", "ඓ", "ඖ", "ෲ"} }, } m["Sogd"] = { "Sogdian", "abjad", characters = "𐼰-𐽙", direction = "rtl", } m["Sogo"] = { "Old Sogdian", "abjad", characters = "𐼀-𐼧", direction = "rtl", } m["Sora"] = { "Sorang Sompeng", aliases = {"Sora Sompeng"}, characters = "𑃐-𑃹", } m["Soyo"] = { "Soyombo", "abugida", characters = "𑩐-𑪢", } m["Sund"] = { "Sundanese", "abugida", characters = "ᮀ-ᮿ", } m["Sylo"] = { "Syloti Nagri", "abugida", aliases = {"Sylheti Nagari"}, characters = "ꠀ-꠫", } m["Syrc"] = { "Syriac", "abjad", -- more precisely, impure abjad characters = "܀-ݏ"..u(0x0860).."-"..u(0x086A), direction = "rtl", } -- Syre, Syrj, Syrn are apparently subsumed into Syrc; discuss if this causes issues m["Tagb"] = { "Tagbanwa", "abugida", characters = "ᝠ-ᝳ", } m["Takr"] = { "Takri", "abugida", characters = "𑚀-𑛉", normalizationFixes = { from = {"𑚀𑚭", "𑚀𑚴", "𑚀𑚵", "𑚆𑚲"}, to = {"𑚁", "𑚈", "𑚉", "𑚇"} }, } m["Tale"] = { "Tai Nüa", "abugida", aliases = {"Tai Nuea", "New Tai Nüa", "New Tai Nuea", "Dehong Dai", "Tai Dehong", "Tai Le"}, characters = "ᥐ-ᥭᥰ-ᥴ", spaces = false, } m["Talu"] = { "New Tai Lue", "abugida", characters = "ᦀ-ᦫᦰ-ᧉ᧐-᧚᧞᧟", spaces = false, } m["Taml"] = { "Tamil", "abugida", characters = "ஂ-௺𑿀-𑿿", normalizationFixes = { from = {"அூ", "ஸ்ரீ"}, to = {"ஆ", "ஶ்ரீ"} }, } m["Tang"] = { "Tangut", "logography, syllabary", characters = "𖿠𗀀-𘫿𘴀-𘴈", spaces = false, } m["Tavt"] = { "Tai Viet", "abugida", characters = "ꪀ-ꫂꫛ-꫟", spaces = false, } m["Telu"] = { "Telugu", "abugida", characters = "ఀ-౿", normalizationFixes = { from = {"ఒౌ", "ఒౕ", "ిౕ", "ెౕ", "ొౕ"}, to = {"ఔ", "ఓ", "ీ", "ే", "ో"} }, } m["Teng"] = { "Tengwar", } m["Tfng"] = { "Tifinagh", "abjad, alphabet", characters = "ⴰ-⵿", otherNames = {"Libyco-Berber", "Berber"}, -- per Wikipedia, Libyco-Berber is the parent } m["Tglg"] = { "Baybayin", "abugida", aliases = {"Tagalog"}, characters = "ᜀ-᜔", } m["Thaa"] = { "Thaana", "abugida", characters = "ހ-ޱ", direction = "rtl", } m["Thai"] = { "Thai", "abugida", characters = "ก-ฺเ-๛", spaces = false, } m["Tibt"] = { "Tibetan", "abugida", characters = "ༀ-࿚", normalizationFixes = { combiningClasses = {["༹"] = 1}, from = {"ཷ", "ཹ"}, to = {"ྲཱྀ", "ླཱྀ"} }, } m["sit-tam-Tibt"] = { "Tamyig", m["Tibt"][2], characters = m["Tibt"].characters, parent = "Tibt", normalizationFixes = m["Tibt"].normalizationFixes, } m["xzh-Tibt"] = { "Zhang-Zhung", m["Tibt"][2], characters = m["Tibt"].characters, parent = "Tibt", normalizationFixes = m["Tibt"].normalizationFixes, } m["Tirh"] = { "Tirhuta", "abugida", characters = "𑒀-𑓙", normalizationFixes = { from = {"𑒁𑒰", "𑒋𑒺", "𑒍𑒺", "𑒪𑒵", "𑒪𑒶"}, to = {"𑒂", "𑒌", "𑒎", "𑒉", "𑒊"} }, } m["Tnsa"] = { "Tangsa", "alphabet", characters = "𖩰-𖫉", } m["Toto"] = { "Toto", "abugida", characters = "𞊐-𞊮", } m["Ugar"] = { "Ugaritic", "abjad", characters = "𐎀-𐎟", } m["Vaii"] = { "Vai", "syllabary", characters = "ꔀ-ꘫ", } m["Visp"] = { "Visible Speech", "alphabet", -- Not in Unicode } m["Vith"] = { "Vithkuqi", "alphabet", characters = "𐕰-𐖼", capitalized = true, } m["Wara"] = { "Varang Kshiti", aliases = {"Warang Citi"}, characters = "𑢠-𑣿", capitalized = true, } m["Wcho"] = { "Wancho", "alphabet", characters = "𞋀-𞋿", } m["Wole"] = { "Woleai", "syllabary", -- Not in Unicode } m["Xpeo"] = { "Old Persian", characters = "𐎠-𐏕", } m["Xsux"] = { "Cuneiform", aliases = {"Sumero-Akkadian Cuneiform"}, characters = "𒀀-𒎙𒐀-𒑳", } m["Yezi"] = { "Yezidi", "alphabet", characters = "𐺀-𐺱", direction = "rtl", } m["Yiii"] = { "Yi", "syllabary", characters = "ꀀ-꓆", } m["Zanb"] = { "Zanabazar Square", characters = u(0x11A00).."-"..u(0x11A47), } m["Zmth"] = { "mathematical notation", characters = "ℵ∀-⋿⟀-⟯⦀-⫿𝐀-𝟿", translit = false, character_category = "Mathematical notation symbols", -- ? } m["Zsym"] = { "symbol", "pictography", characters = "─-➿←-⇿⌀-⏿⬀-⯾🀀-🃵🌀-🩭", translit = false, character_category = false, -- none } m["Zyyy"] = { "undetermined", -- This should not have any characters listed, probably translit = false, character_category = false, -- none } m["Zzzz"] = { "uncoded", -- This should not have any characters listed translit = false, character_category = false, -- none } -- These should be defined after the scripts they are composed of m["Jpan"] = { "Japanese", "logography, syllabary", characters = m["Hira"].characters .. m["Kana"].characters .. m["Hani"].characters .. m["Latn"].characters, spaces = false, sort_by_scraping = true, } m["Kore"] = { "Korean", "logography, syllabary", characters = m["Hang"].characters .. m["Hani"].characters, } return m mbnzltyapuo9rp8k36f91n68zqay3wa मॉड्यूल:parameters 828 302128 487594 487386 2026-09-01T17:55:31Z SM7 6218 updating... 487594 Scribunto text/plain --[==[TODO: * Change certain flag names, as some are misnomers: * Change `allow_holes` to `keep_holes`, because it's not the inverse of `disallow_holes`. * Change `allow_empty` to `keep_empty`, as it causes them to be kept as "" instead of deleted. * Sort out all the internal error calls. Manual error(format()) calls are used when certain parameters shouldn't be dumped, so find a way to avoid that. ]==] local export = {} local collation_module = "Module:collation" local families_module = "Module:families" local functions_module = "Module:fun" local gender_and_number_utilities_module = "Module:gender and number utilities" local labels_module = "Module:labels" local languages_module = "Module:languages" local math_module = "Module:math" local pages_module = "Module:pages" local parameters_finalize_set_module = "Module:parameters/finalizeSet" local parameters_track_module = "Module:parameters/track" local parse_utilities_module = "Module:parse utilities" local references_module = "Module:references" local scribunto_module = "Module:Scribunto" local scripts_module = "Module:scripts" local string_utilities_module = "Module:string utilities" local table_module = "Module:table" local wikimedia_languages_module = "Module:wikimedia languages" local yesno_module = "Module:yesno" local mw = mw local mw_title = mw.title local string = string local table = table local dump = mw.dumpObject local find = string.find local format = string.format local gsub = string.gsub local insert = table.insert local ipairs = ipairs local list_to_text = mw.text.listToText local make_title = mw_title.makeTitle local match = string.match local max = math.max local new_title = mw_title.new local next = next local pairs = pairs local pcall = pcall local require = require local sub = string.sub local tonumber = tonumber local type = type local unpack = unpack or table.unpack -- Lua 5.2 compatibility local current_title_text, current_namespace, sets -- Defined when needed. local namespaces = mw.site.namespaces --[==[ Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==] local function decode_entities(...) decode_entities = require(string_utilities_module).decode_entities return decode_entities(...) end local function extend(...) extend = require(table_module).extend return extend(...) end local function finalize_set(...) finalize_set = require(parameters_finalize_set_module) return finalize_set(...) end local function get_family_by_code(...) get_family_by_code = require(families_module).getByCode return get_family_by_code(...) end local function get_family_by_name(...) get_family_by_name = require(families_module).getByCanonicalName return get_family_by_name(...) end local function get_language_by_code(...) get_language_by_code = require(languages_module).getByCode return get_language_by_code(...) end local function get_language_by_name(...) get_language_by_name = require(languages_module).getByCanonicalName return get_language_by_name(...) end local function get_script_by_code(...) get_script_by_code = require(scripts_module).getByCode return get_script_by_code(...) end local function get_script_by_name(...) get_script_by_name = require(scripts_module).getByCanonicalName return get_script_by_name(...) end local function get_wm_lang_by_code(...) get_wm_lang_by_code = require(wikimedia_languages_module).getByCode return get_wm_lang_by_code(...) end local function get_wm_lang_by_code_with_fallback(...) get_wm_lang_by_code_with_fallback = require(wikimedia_languages_module).getByCodeWithFallback return get_wm_lang_by_code_with_fallback(...) end local function gsplit(...) gsplit = require(string_utilities_module).gsplit return gsplit(...) end local function is_callable(...) is_callable = require(functions_module).is_callable return is_callable(...) end local function is_integer(...) is_integer = require(math_module).is_integer return is_integer(...) end local function is_internal_title(...) is_internal_title = require(pages_module).is_internal_title return is_internal_title(...) end local function is_positive_integer(...) is_positive_integer = require(math_module).is_positive_integer return is_positive_integer(...) end local function iterate_list(...) iterate_list = require(table_module).iterateList return iterate_list(...) end local function num_keys(...) num_keys = require(table_module).numKeys return num_keys(...) end local function parse_gender_and_number_spec(...) parse_gender_and_number_spec = require(gender_and_number_utilities_module).parse_gender_and_number_spec return parse_gender_and_number_spec(...) end local function parse_references(...) parse_references = require(references_module).parse_references return parse_references(...) end local function pattern_escape(...) pattern_escape = require(string_utilities_module).pattern_escape return pattern_escape(...) end local function php_trim(...) php_trim = require(scribunto_module).php_trim return php_trim(...) end local function scribunto_parameter_key(...) scribunto_parameter_key = require(scribunto_module).scribunto_parameter_key return scribunto_parameter_key(...) end local function sort(...) sort = require(collation_module).sort return sort(...) end local function sorted_pairs(...) sorted_pairs = require(table_module).sortedPairs return sorted_pairs(...) end local function split(...) split = require(string_utilities_module).split return split(...) end local function split_labels_on_comma(...) split_labels_on_comma = require(labels_module).split_labels_on_comma return split_labels_on_comma(...) end local function split_on_comma(...) split_on_comma = require(parse_utilities_module).split_on_comma return split_on_comma(...) end local function tonumber_extended(...) tonumber_extended = require(math_module).tonumber_extended return tonumber_extended(...) end local function track(...) track = require(parameters_track_module) return track(...) end local function yesno(...) yesno = require(yesno_module) return yesno(...) end --[==[ intro: This module is used to standardize template argument processing and checking. A typical workflow is as follows (based on [[Module:translations]]): { ... local parent_args = frame:getParent().args local params = { [1] = {required = true, type = "language", default = "und"}, [2] = true, [3] = {list = true}, ["alt"] = true, ["id"] = true, ["sc"] = {type = "script"}, ["tr"] = true, ["ts"] = true, ["lit"] = true, } local args = require("Module:parameters").process(parent_args, params) -- Do further processing of the parsed arguments in `args`. ... } The `params` table should have the parameter names as the keys, and a (possibly empty) table of parameter tags as the value. An empty table as the value merely states that the parameter exists, but should not receive any special treatment; if desired, empty tables can be replaced with the value `true` as a perforamnce optimization. Possible parameter tags are listed below: ; {required = true} : The parameter is required; an error is shown if it is not present. The template's page itself is an exception; no error is shown there. ; {default =} : Specifies a default input value for the parameter, if it is absent or empty. This will be processed as though it were the input instead, so (for example) {default = "und"} with the type {"language"} will return a language object for [[:Category:Undetermined language|Undetermined language]] if no language code is provided. When used on list parameters, this specifies a default value for the first item in the list only. Note that it is not possible to generate a default that depends on the value of other parameters. If used together with {required = true}, the default applies only to template pages (see the following entry), as a side effect of the fact that "required" parameters aren't actually required on template pages. This can be used to show an example of the template in action when the template page is visited; however, it is preferred to use `template_default` for this purpose, for clarity. ; {template_default =} : Specifies a default input value for absent or empty parameters only on the template demo invocation (the invocation of the template that is displayed when the template page that implements the template is viewed). Template pages are pages in template space that invoke (through {{tl|#invoke:}}) the module that implements the template and calls [[Module:parameters]]. For example, the page [[Template:en-noun]] implements the {{tl|en-noun}} template, which in turn invokes [[Module:en-headword]], and is a template page for [[Module:en-headword]]. When the template page [[Template:en-noun]] is visited, the {{tl|#invoke:}} of the template's module is expanded as if the template were called without arguments, and the output is inserted at that point into the processed page. This output serves as a sort of demo of the template's functionality. `template_default` can be used to supply default values for use only in this demo. Since the template page may also contain other invocations of the same template (e.g. on the template's documentation page, which is typically transcluded into the template page itself), `template_default` does not apply if there are any arguments passed to the template or if the template is invoked on any other page but its own template page (which is checked by comparing the name of the invoking template to the current pagename). Both `template_default` and `default` can be specified for the same parameter. If this is done, `template_default` applies for the argumentless template invocation on the template page, and `default` in all other circumstances As an example, {{tl|cs-IPA}} uses the equivalent of {[1] = {default = "+", template_default = "příklad"}} to supply a default of {"+"} for mainspace and documentation pages (which tells the module to use the value of the {{para|pagename}} parameter, falling back to the actual pagename), but {"příklad"} (which means "example"), on [[Template:cs-IPA]]. ; {alias_of =} : Treat the parameter as an alias of another. When arguments are specified for this parameter, they will automatically be renamed and stored under the alias name. This allows for parameters with multiple alternative names, while still treating them as if they had only one name. The conversion-related properties of an aliased parameter (e.g. `type`, `set`, `convert`, `sublist`) are taken from the aliasee, and the corrresponding properties set on the alias itself are ignored; but other properties on the alias are taken from the alias's spec and not from the aliasee's spec. This means, for example, that if you create an alias of a list parameter, the alias must also specify the `list` property or it is not a list. (In such a case, a value specified for the alias goes into the first item of the aliasee's list. You cannot make a list alias of a non-list parameter; this causes an error to be thrown.) Similarly, if you specify `separate_no_index` on an aliasee but not on the alias, uses of the unindexed aliasee parameter are stored into the `.default` key, but uses of the unindexed alias are stored into the first numbered key of the aliasee's list. Aliases cannot be required, as this prevents the other name or names of the parameter from being used. Parameters that are aliases and required at the same time cause an error to be thrown. ; {allow_empty = true} : If the argument is an empty string value, it is not converted to {nil}, but kept as-is. The use of `allow_empty` is disallowed if a type has been specified, and causes an error to be thrown. ; {no_trim = true} : Spacing characters such as spaces and newlines at the beginning and end of a positional parameter are not removed. (MediaWiki itself automatically trims spaces and newlines at the edge of named parameters.) The use of `no_trim` is disallowed if a type has been specified, and causes an error to be thrown. ; {type =} : Specifies what value type to convert the argument into. The default is to leave it as a text string. Alternatives are: :; {type = "boolean"} :: The value is treated as a boolean value, either true or false. No value, the empty string, and the strings {"0"}, {"no"}, {"n"}, {"false"}, {"f"} and {"off"} are treated as {false}, all other values are considered {true}. :; {type = "number"} :: The value is converted into a number, and throws an error if the value is not parsable as a number. Input values may be signed (`+` or `-`), and may contain decimal points and leading zeroes. If {allow_hex = true}, then hexadecimal values in the form {"0x100"} may optionally be used instead, which otherwise have the same syntax restrictions (including signs, decimal digits, and leading zeroes after {"0x"}). Hexadecimal inputs are not case-sensitive. Lua's special number values (`inf` and `nan`) are not possible inputs. :; {type = "range"} :: The value is interpreted as a hyphen-separated range of two numbers (e.g. {"2-4"} is interpreted as the range from {2} to {4}). A number input without a hyphen is interpreted as a range from that number to itself (e.g. the input {"1"} is interpreted as the range from {1} to {1}). Any optional flags which are available for numbers will also work for ranges. :; {type = "language"} :: The value is interpreted as a full or [[Wiktionary:Languages#Etymology-only languages|etymology-only language]] code language code (or name, if {method = "name"}) and converted into the corresponding object (see [[Module:languages]]). If the code or name is invalid, then an error is thrown. The additional setting {family = true} can be given to allow [[Wiktionary:Language families|language family codes]] to be considered valid and the corresponding object returned. Note that to distinguish an etymology-only language object from a full language object, use {object:hasType("language", "etymology-only")}. :; {type = "full language"} :: The value is interpreted as a full language code (or name, if {method = "name"}) and converted into the corresponding object (see [[Module:languages]]). If the code or name is invalid, then an error is thrown. Etymology-only languages are not allowed. The additional setting {family = true} can be given to allow [[Wiktionary:Language families|language family codes]] to be considered valid and the corresponding object returned. :; {type = "Wikimedia language"} :: The value is interpreted as a code and converted into a Wikimedia language object. If the code is invalid, then an error is thrown. If {fallback = true} is specified, conventional language codes which are different from their Wikimedia equivalent will also be accepted as a fallback. :; {type = "family"} :: The value is interpreted as a language family code (or name, if {method = "name"}) and converted into the corresponding object (see [[Module:families]]). If the code or name is invalid, then an error is thrown. :; {type = "script"} :: The value is interpreted as a script code (or name, if {method = "name"}) and converted into the corresponding object (see [[Module:scripts]]). If the code or name is invalid, then an error is thrown. :; {type = "title"} :: The value is interpreted as a page title and converted into the corresponding object (see the [[mw:Extension:Scribunto/Lua_reference_manual#Title_library|Title library]]). If the page title is invalid, then an error is thrown; by default, external titles (i.e. those on other wikis) are not treated as valid. Options are: ::; {namespace = n} ::: The default namespace, where {n} is a namespace number; this is treated as {0} (the mainspace) if not specified. ::; {allow_external = true} ::: External titles are treated as valid. ::; {prefix = "namespace override"} (default) ::: The default namespace prefix will be prefixed to the value is already prefixed by a namespace prefix. For instance, the input {"Foo"} with namespace {10} returns {"Template:Foo"}, {"Wiktionary:Foo"} returns {"Wiktionary:Foo"}, and {"Template:Foo"} returns {"Template:Foo"}. Interwiki prefixes cannot act as overrides, however: the input {"fr:Foo"} returns {"Template:fr:Foo"}. ::; {prefix = "force"} ::: The default namespace prefix will be prefixed unconditionally, even if the value already appears to be prefixed. This is the way that {{tl|#invoke:}} works when calling modules from the module namespace ({828}): the input {"Foo"} returns {"Module:Foo"}, {"Wiktionary:Foo"} returns {"Module:Wiktionary:Foo"}, and {"Module:Foo"} returns {"Module:Module:Foo"}. ::; {prefix = "full override"} ::: The same as {prefix = "namespace override"}, except that interwiki prefixes can also act as overrides. For instance, {"el:All topics"} with namespace {14} returns {"el:Category:All topics"}. Due to the limitations of MediaWiki, only the first prefix in the value may act as an override, so the namespace cannot be overridden if the first prefix is an interwiki prefix: e.g. {"el:Template:All topics"} with namespace {14} returns {"el:Category:Template:All topics"}. :; {type = "parameter"} :: The value is interpreted as the name of a parameter, and will be normalized using the method that Scribunto uses when constructing a {frame.args} table of arguments. This means that integers will be converted to numbers, but all other arguments will remain as strings (e.g. {"1"} will be normalized to {1}, but {"foo"} and {"1.5"} will remain unchanged). Note that Scribunto also trims parameter names, following the same trimming method that this module applies by default to all parameter types. :: This type is useful when one set of input arguments is used to construct a {params} table for use in a subsequent {export.process()} call with another set of input arguments; for instance, the set of valid parameters for a template might be defined as {{tl|#invoke:[some module]|args=}} in the template, where {args} is a sublist of valid parameters for the template. :; {type = "qualifier"} :: The value is interpreted as a qualifier and converted into the correct format for passing into `format_qualifiers()` in [[Module:qualifier]] (which currently just means converting it to a one-item list). :; {type = "labels"} :: The value is interpreted as a comma-separated list of labels and converted into the correct format for passing into `show_labels()` in [[Module:labels]] (which is currently a list of strings). Splitting is done on commas not followed by whitespace, except that commas inside of double angle brackets do not count even if not followed by whitespace. This type should be used by for normal labels (typically specified using {{para|l}} or {{para|ll}}) and accent qualifiers (typically specified using {{para|a}} and {{para|aa}}). :; {type = "references"} :: The value is interpreted as one or more references, in the format prescribed by `parse_references()` in [[Module:references]], and converted into a list of objects of the form accepted by `format_references()` in the same module. If a syntax error is found in the reference format, an error is thrown. :; {type = "genders"} :: The value is interpreted as one or more comma-separated gender/number specs, in the format prescribed by [[Module:gender and number]]. Inline modifiers (`<q:...>`, `<qq:...>`, `<l:...>`, `<ll:...>` or `<ref:...>`) may be attached to a gender/number spec. :; {type = "form of tags"} :: The value is interpreted as an ampersand-separated list of grammar tags and converted into the correct format for passing as `tags` into `tagged_inflections()` in [[Module:form of]] (which is currently a list of strings). Splitting is always done by ampersands. This type should be used by for inflection qualifiers that act as grammar tags (typically specified using {{para|infl}}). :; {type = function(val) ... end} :: `type` may be set to a function (or callable table), which must take the argument value as its sole argument, and must output one of the other recognized types. This is particularly useful for lists (see below), where certain values need to be interpreted differently to others. ; {list =} : Treat the parameter as a list of values, each having its own parameter name, rather than a single value. The parameters will have a number at the end, except optionally for the first (but see also {require_index = true}). For example, {list = true} on a parameter named "head" will include the parameters {{para|head}} (or {{para|head1}}), {{para|head2}}, {{para|head3}} and so on. If the parameter name is a number, another number doesn't get appended, but the counting simply continues, e.g. for parameter {3} the sequence is {{para|3}}, {{para|4}}, {{para|5}} etc. List parameters are returned as numbered lists, so for a template that is given the parameters `|head=a|head2=b|head3=c`, the processed value of the parameter {"head"} will be { { "a", "b", "c" }}}. : The value for {list =} can also be a string. This tells the module that parameters other than the first should have a different name, which is useful when the first parameter in a list is a number, but the remainder is named. An example would be for genders: {list = "g"} on a parameter named {1} would have parameters {{para|1}}, {{para|g2}}, {{para|g3}} etc. : If the number is not located at the end, it can be specified by putting {"\1"} at the number position. For example, parameters {{para|f1accel}}, {{para|f2accel}}, ... can be captured by using the parameter name {"f\1accel"}, as is done in [[Module:headword/templates]]. ; {set =} : Require that the value of the parameter be one of the specified values (or omitted, if {required = true} isn't given). Two formats are allowed; either a list of possible values can be supplied, or a table can be supplied where the keys are allowed values and the values are either `true` or a string naming a value found elsewhere in the table as a key. In the latter case, the key is an alias and the value is the canonical value, and if the user uses the alias, it will automatically be mapped to the canonical value. In such a case, the canonical value cannot itself be an alias. The use of `set` is disallowed if {type = "boolean"} and causes an error to be thrown. ; {sublist =} : The value of the parameter is a delimiter-separated list of individual raw values. The resulting field in `args` will be a Lua list (i.e. a table with numeric indices) of the converted values. If {sublist = true} is given, the values will be split on commas (possibly with whitespace on one or both sides of the comma, which is ignored). If {sublist = "comma without whitespace"} is given, the values will be split on commas which are not followed by whitespace, and which aren't preceded by an escaping backslash. Otherwise, the value of `sublist` should be either a Lua pattern specifying the delimiter(s) to split on or a function (or callable table) to do the splitting, which is passed two values (the value to split and a function to signal an error) and should return a list of the split values. ; {convert =} : If given, this specifies a function (or callable table) to convert the raw parameter value into the Lua object used during further processing. The function is passed two arguments, the raw parameter value itself and a function used to signal an error during parsing or conversion, and should return one value, the converted parameter. The error-signaling function contains the name and raw value of the parameter embedded into the message it generates, so these do not need to specified in the message passed into it. If `type` is specified in conjunction with `convert`, the processing by `type` happens first. If `sublist` is given in conjunction with `convert`, the raw parameter value will be split appropriately and `convert` called on each resulting item. ; {allow_hex = true} : When used in conjunction with {type = "number"}, allows hexadecimal numbers as inputs, in the format {"0x100"} (which is not case-sensitive). ; {family = true} : When used in conjunction with {type = "language"}, allows [[Wiktionary:Language families|language family codes]] to be returned. To check if a given object refers to a language family, use {object:hasType("family")}. ; {method = "name"} : When used in conjunction with {type = "language"}, {type = "family"} or {type = "script"}, checks for and parses a language, family or script name instead of a code. ; {allow_holes = true} : This is used in conjunction with list-type parameters. By default, the values are tightly packed in the resulting list. This means that if, for example, an entry specified `head=a|head3=c` but not {{para|head2}}, the returned list will be { {"a", "c"}}}, with the values stored at the indices {1} and {2}, not {1} and {3}. If it is desirable to keep the numbering intact, for example if the numbers of several list parameters correlate with each other (like those of {{tl|affix}}), then this tag should be specified. : If {allow_holes = true} is given, there may be {nil} values in between two real values, which makes many of Lua's table processing functions no longer work, like {#} or {ipairs()}. To remedy this, the resulting table will contain an additional named value, `maxindex`, which tells you the highest numeric index that is present in the table. In the example above, the resulting table will now be { { "a", nil, "c", maxindex = 3}}}. That way, you can iterate over the values from {1} to `maxindex`, while skipping {nil} values in between. ; {disallow_holes = true} : This is used in conjunction with list-type parameters. As mentioned above, normally if there is a hole in the source arguments, e.g. `head=a|head3=c` but not {{para|head2}}, it will be removed in the returned list. If {disallow_holes = true} is specified, however, an error is thrown in such a case. This should be used whenever there are multiple list-type parameters that need to line up (e.g. both {{para|head}} and {{para|tr}} are available and {{para|head3}} lines up with {{para|tr3}}), unless {allow_holes = true} is given and you are prepared to handle the holes in the returned lists. ; {disallow_missing = true} : This is similar to {disallow_holes = true}, but an error will not be thrown if an argument is blank, rather than completely missing. This may be used to tolerate intermediate blank numerical parameters, which sometimes occur in list templates. For instance, `head=a|head2=|head3=c` will not throw an error, but `head=a|head3=c` will. ; {require_index = true} : This is used in conjunction with list-type parameters. By default, the first parameter can have its index omitted. For example, a list parameter named `head` can have its first parameter specified as either {{para|head}} or {{para|head1}}. If {require_index = true} is specified, however, only {{para|head1}} is recognized, and {{para|head}} will be treated as an unknown parameter. {{tl|affixusex}} (and variants {{tl|suffixusex}}, {{tl|prefixusex}}) use this, for example, on all list parameters. ; {separate_no_index = true} : This is used to distinguish between {{para|head}} and {{para|head1}} as different parameters. For example, in {{tl|affixusex}}, to distinguish between {{para|sc}} (a script code for all elements in the usex's language) and {{para|sc1}} (the script code of the first element, used when the first element is prefixed with a language code to indicate that it is in a different language). When this is used, the resulting table will contain an additional named value, `default`, which contains the value for the indexless argument. ; {flatten = true} : This is used in conjunction with list-type parameters when `sublist` or a list-generating type such as {"labels"} or {"genders"} is also specified, and causes the resulting list to be flattened. Not currently compatible with {allow_holes = true}. ; {replaced_by =} : Specifies that the parameter is no longer valid, and has been replaced by some other mechanism. If the value of `replaced_by` is a string, it is the name of the new parameter to use instead. Use the `reason` tag to specify the reason why this change has been made, e.g. {reason = "for consistency with the corresponding parameter in other Romance-language headword templates"}. If the value of `replaced_by` is {false}, there is no replacement parameter. In this case, `instead` should be supplied with a description of what to do instead, e.g. {instead = "use an inline modifier on |2= such as <q:...>, <qq:...>, <l:...> or <ll:...>"}. You can also supply a justification in `reason` if you feel it is appropriate or necessary to do so. ; {reason =} : When used in conjunction with `replaced_by`, specifies the reason for the parameter replacement. ; {instead =} : When used in conjunction with {replaced_by = false}, specifies what to do instead of using the removed parameter. ; {demo = true} : This is used as a way to ensure that the parameter is only enabled on the template's own page (and its documentation page), and in the User: namespace; otherwise, it will be treated as an unknown parameter. This should only be used if special settings are required to showcase a template in its documentation (e.g. adjusting the pagename or disabling categorization). In most cases, it should be possible to do this without using demo parameters, but they may be required if a template/documentation page also contains real uses of the same template as well (e.g. {{tl|shortcut}}), as a way to distinguish them. ; {deprecated = true} : This is for tracking the use of deprecated parameters, including any aliases that are being brought out of use. See [[Wiktionary:Tracking]] for more information. ]==] -- Returns true if the current page is a template or module containing the current {{#invoke}}. -- If the include_documentation argument is given, also returns true if the current page is either page's documentation page. local own_page, own_page_or_documentation local function is_own_page(include_documentation) if own_page == nil then if current_namespace == nil then local current_title = mw_title.getCurrentTitle() current_title_text, current_namespace = current_title.prefixedText, current_title.namespace end local frame = current_namespace == 828 and mw.getCurrentFrame() or current_namespace == 10 and mw.getCurrentFrame():getParent() if frame then local frame_title_text = frame:getTitle() own_page = current_title_text == frame_title_text own_page_or_documentation = own_page or current_title_text == frame_title_text .. "/documentation" else own_page, own_page_or_documentation = false, false end end return include_documentation and own_page_or_documentation or own_page end -------------------------------------- Some helper functions ----------------------------- -- Convert a list in `list` to a string, separating the final element from the preceding one(s) by `conjunction`. If -- `dump_vals` is given, pass all values in `list` through mw.dumpObject() (WARNING: this destructively modifies -- `list`). This is similar to serialCommaJoin() in [[Module:table]] when used with the `dontTag = true` option, but -- internally uses mw.text.listToText(). local function concat_list(list, conjunction, dump_vals) if dump_vals then for k, v in pairs(list) do list[k] = dump(v) end end return list_to_text(list, nil, conjunction) end -- A helper function for use with generating error-signaling functions in the presence of raw value conversion. Format a -- message `msg`, including the processed value `processed` if it is different from the raw value `rawval`; otherwise, -- just return `msg`. local function msg_with_processed(msg, rawval, processed) if rawval == processed then return msg end local processed_type = type(processed) return format("%s (processed value %s)", msg, (processed_type == "string" or processed_type == "number") and processed or dump(processed) ) end -- Separate form of tags with ampersand (&). local function split_tags_on_ampersand(tags) return split(tags, "&") end -------------------------------------- Error handling ----------------------------- local function process_error(fmt, ...) local args = {...} for i, val in ipairs(args) do args[i] = dump(val) end if type(fmt) == "table" then -- hacky signal that we're called from internal_process_error(), and not to omit stack frames return error(format(fmt[1], unpack(args))) end return error(format(fmt, unpack(args)), 3) end local function internal_process_error(fmt, ...) process_error({"Internal error in `params` table: " .. fmt}, ...) end -- Check that a parameter or argument is in the form form Scribunto normalizes input argument keys into (e.g. 1 not "1", "foo" not " foo "). Otherwise, it won't be possible to normalize inputs in the expected way. Unless is_argument is set, also check that the name only contains one placeholder at most, and that strings don't resolve to numeric keys once the placeholder has been substituted. local function validate_name(name, desc, extra_name, is_argument) local normalized = scribunto_parameter_key(name) if name and name == normalized then if is_argument or type(name) ~= "string" then return end local placeholder = find(name, "\1", nil, true) if not placeholder then return elseif find(name, "\1", placeholder + 1, true) then error(format( "Internal error: expected %s to only contain one placeholder, but saw %s", extra_name and (desc .. dump(extra_name)) or desc, dump(name) )) end local first_name = gsub(name, "\1", "1") normalized = scribunto_parameter_key(first_name) if first_name == normalized then return end error(format( "Internal error: %s cannot resolve to numeric parameters once any placeholder has been substituted, but %s resolves to %s", extra_name and (desc .. dump(extra_name)) or desc, dump(name), dump(normalized) )) elseif normalized == nil then error(format( "Internal error: expected %s to be of type string or number, but saw %s", extra_name and (desc .. dump(extra_name)) or desc, type(name) )) end error(format( "Internal error: expected %s to be Scribunto-compatible: %s (a %s) should be %s (a %s)", extra_name and (desc .. dump(extra_name)) or desc, dump(name), type(name), dump(normalized), type(normalized) )) end local function validate_alias_options(...) local invalid = { required = true, default = true, template_default = true, allow_holes = true, disallow_holes = true, disallow_missing = true, } function validate_alias_options(param, name, main_param, alias_of) for k in pairs(param) do if invalid[k] then track("bad alias option") -- internal_process_error( -- "parameter %s cannot have the option %s, as it is an alias of parameter %s.", -- name, option, alias_of -- ) end end -- Soon, aliases will inherit options from the main parameter via __index. Track cases where this would happen. if main_param ~= true then for k in pairs(main_param) do if param[k] == nil and not invalid[k] then if k == "list" then -- these need to be changed to list = false to retain current behaviour track("mismatched list alias option") elseif not (k == "type" or k == "set" or k == "sublist") then -- rarely specified on aliases, as they're effectively inherited already track("mismatched alias option") end end end end end validate_alias_options(...) end -- TODO: give ranges instead of long lists, if possible. --[==[ func: export.params_list_error(params, msg) Given a key-value table of raw parameters `params`, display an error message about all the parameters seen in the table. The parameter names are displayed in sorted order. `msg` should be e.g. {"required"} or {"not used by this template"}. This is used internally to display error messages about required or invalid parameters, and can be used for the same purpose by code that processes its own parameters (e.g. if the `return_unknown` flag is specified to `process`). ]==] local function params_list_error(params, msg) local list, n = {}, 0 for name in sorted_pairs(params) do n = n + 1 list[n] = name end error(format( "Parameter%s %s.", format(n == 1 and " %s is" or "s %s are", concat_list(list, " and ", true)), msg ), 3) end export.params_list_error = params_list_error -- Helper function for use with convert_val_error(). Format a list of possible choices using `concat_list` and -- conjunction "or", displaying "either " before the choices if there's more than one. local function format_choice_list(valid) return (#valid > 1 and "either " or "") .. concat_list(valid, " or ") end -- Signal an error for a value `val` that is not of the right type `valid` (which is either a string specifying a type, or -- a list of possible values, in the case where `set` was used). `name` is the name of the parameter and can be a -- function to signal an error (which is assumed to automatically display the parameter's name and value). `seetext` is -- an optional additional explanatory link to display (e.g. [[WT:LOL]], the list of possible languages and codes). local function convert_val_error(val, name, valid, seetext) if is_callable(name) then if type(valid) == "table" then valid = "choice, must be " .. format_choice_list(valid) end name(format("Invalid %s; the value %s is not valid%s", valid, val, seetext and "; see " .. seetext or "")) else if type(valid) == "table" then valid = format_choice_list(valid) else valid = "a valid " .. valid end error(format("Parameter %s must be %s; the value %s is not valid.%s", dump(name), valid, dump(val), seetext and " See " .. seetext .. "." or "")) end end -- Generate the appropriate error-signaling function given parameter value `val` and name `name`. If `name` is already -- a function, it is just returned; otherwise a function is generated and returned that displays the passed-in messaeg -- along with the parameter's name and value. local function make_parse_err(val, name) if is_callable(name) then return name end return function(msg) error(format("%s: parameter %s=%s", msg, name, val)) end end -------------------------------------- Value conversion ----------------------------- -- For a list parameter `name` and corresponding value `list_name` of the `list` field (which should have the same value -- as `name` if `list = true` was given), generate a pattern to match parameters of the list and store the pattern as a -- key in `patterns`, with corresponding value set to `name`. For example, if `list_name` is "tr", the pattern will -- match "tr" as well as "tr1", "tr2", ..., "tr10", "tr11", etc. If the `list_name` contains a \1 in it, the numeric -- portion goes in place of the \1. For example, if `list_name` is "f\1accel", the pattern will match "faccel", -- "f1accel", "f2accel", etc. Any \1 in `name` is removed before storing into `patterns`. local function save_pattern(name, list_name, patterns) name = type(name) == "string" and gsub(name, "\1", "") or name if find(list_name, "\1", nil, true) then patterns["^" .. gsub(pattern_escape(list_name), "\1", "([1-9]%%d*)") .. "$"] = name else patterns["^" .. pattern_escape(list_name) .. "([1-9]%d*)$"] = name list_name = list_name .. "\1" end validate_name(list_name, "the list field of parameter ", name) return patterns end -- A helper function for use with `sublist`. It is an iterator function for use in a for-loop that returns split -- elements of `val` using `sublist` (a Lua split pattern; boolean `true` to split on commas optionally surrounded by -- whitespace; "comma without whitespace" to split only on commas not followed by whitespace which have not been escaped -- by a backslash; or a function to do the splitting, which is passed two values, the value to split and a function to -- signal an error, and should return a list of the split elements). `name` is the parameter name or error-signaling -- function passed into convert_val(). local function split_sublist(val, name, sublist) if sublist == true then return gsplit(val, "%s*,%s*") -- Split an argument on comma, but not comma followed by whitespace. elseif sublist == "comma without whitespace" then -- If difficult cases, use split_on_comma. if find(val, "\\", nil, true) or match(val, ",%s") then return iterate_list(split_on_comma(val)) end -- Otherwise, use gsplit. return gsplit(val, ",") elseif type(sublist) == "string" then return gsplit(val, sublist) elseif not is_callable(sublist) then error(format('Internal error: expected `sublist` to be of type "string" or "function" or boolean `true`, but saw %s', dump(sublist))) end return iterate_list(sublist(val, make_parse_err(val, name))) end -- For parameter named `name` with value `val` and param spec `param`, if the `set` field is specified, verify that the -- value is one of the one specified in `set`, and throw an error otherwise. `name` is taken directly from the -- corresponding parameter passed into convert_val() and may be a function to signal an error. Optional `param_type` is -- a string specifying the conversion type of `val` and is used for special-casing: If `param_type` is "boolean", an -- internal error is thrown (since `set` cannot be used in conjunction with booleans) and if `param_type` is "number", -- no checking happens because in this case `set` contains numbers and is checked inside the number conversion function -- itself, after converting `val` to a number. Return the canonical value of `val` (which may be different from `val` -- if an alias map is given). local function check_set(val, name, param, param_type) if param_type == "boolean" then error(format('Internal error: cannot use `set` with `type = "%s"`', param_type)) -- Needs to be special cased because the check happens after conversion to numbers. elseif param_type == "number" then return val end local set, map = param.set if sets == nil then map = finalize_set(set, name) sets = {[set] = map} else map = sets[set] if map == nil then map = finalize_set(set, name) sets[set] = map end end local newval = map[val] if newval == true then return val elseif newval ~= nil then return newval end local list = {} for k, v in sorted_pairs(map) do if v == true then insert(list, dump(k)) else insert(list, ("%s (alias of %s)"):format(dump(k), dump(v))) end end -- If the parameter is not required then put "or empty" at the end of the list, to avoid implying the parameter is actually required. if not param.required then insert(list, "empty") end convert_val_error(val, name, list) end local function convert_language(val, name, param, allow_etym) local method, func = param.method if method == nil or method == "code" then func, method = get_language_by_code, "code" elseif method == "name" then func, method = get_language_by_name, "name" else error(format('Internal error: expected `method` for type `language` to be "code", "name" or undefined, but saw %s', dump(method))) end local lang = func(val, nil, allow_etym, param.family) if lang then return lang end local list, links = {"language"}, {"[[WT:LOL]]"} if allow_etym then insert(list, "etymology language") insert(links, "[[WT:LOL/E]]") end if param.family then insert(list, "family") insert(links, "[[WT:LOF]]") end convert_val_error(val, name, concat_list(list, " or ") .. " " .. (method == "name" and "name" or "code"), concat_list(links, " and ")) end local function convert_number(val, allow_hex) -- Call tonumber_extended with the `real_finite` flag, which filters out ±infinity and NaN. -- By default, specify base 10, which prevents 0x hex inputs from being converted. -- If `allow_hex` is set, then don't give a base, which means 0x hex inputs will work. local num = tonumber_extended(val, not allow_hex and 10 or nil, "finite_real") if not num then return num end if match(val, "[eEpP.]") then -- float track("number not an integer") end if find(val, "+", nil, true) then track("number with +") end -- Track various unusual number inputs to determine if it should be restricted to positive integers by default (possibly including 0). if not is_positive_integer(num) then track("number not a positive integer") if num == 0 then track("number is 0") elseif not is_integer(num) then track("number not an integer") end end return num end -- TODO: validate parameter specs separately, as it's making the handler code really messy at the moment. local type_handlers = setmetatable({ ["boolean"] = function(val) return yesno(val, true) end, ["family"] = function(val, name, param) local method, func = param.method if method == nil or method == "code" then func, method = get_family_by_code, "code" elseif method == "name" then func, method = get_family_by_name, "name" else error(format('Internal error: expected `method` for type `family` to be "code", "name" or undefined, but saw %s', dump(method))) end return func(val) or convert_val_error(val, name, "family " .. method, "[[WT:LOF]]") end, ["labels"] = function(val, name, param) -- FIXME: Should be able to pass in a parse_err function. return split_labels_on_comma(val) end, ["form of tags"] = function(val, name, param) return split_tags_on_ampersand(val) end, ["language"] = function(val, name, param) return convert_language(val, name, param, true) end, ["full language"] = convert_language, ["number"] = function(val, name, param) local allow_hex = param.allow_hex if allow_hex and allow_hex ~= true then error(format( 'Internal error: expected `allow_hex` for type `number` to be of type "boolean" or undefined, but saw %s', dump(allow_hex) )) end local num = convert_number(val, allow_hex) if param.set then -- Don't pass in "number" here; otherwise no checking will happen. num = check_set(num, name, param) end if num then return num end convert_val_error(val, name, (allow_hex and "decimal or hexadecimal " or "") .. "number") end, ["range"] = function(val, name, param) local allow_hex = param.allow_hex if allow_hex and allow_hex ~= true then error(format( 'Internal error: expected `allow_hex` for type `range` to be of type "boolean" or undefined, but saw %s', dump(allow_hex) )) end -- Pattern ensures leading minus signs are accounted for. local m1, m2 = match(val, "^(%s*%S.-)%-(%s*%S.*)") if m1 then m1 = convert_number(m1, allow_hex) if m1 then m2 = convert_number(m2, allow_hex) if m2 then return {m1, m2} end end end -- Try `val` if it couldn't be split into a range, and return a range of `val` to `val` if possible. local num = convert_number(val, allow_hex) if num then return {num, num} end convert_val_error(val, name, (allow_hex and "decimal or hexadecimal " or "") .. "number or a hyphen-separated range of two numbers") end, ["parameter"] = function(val, name, param) -- Use the `no_trim` option, as any trimming will have already been done. return scribunto_parameter_key(val, true) end, ["qualifier"] = function(val, name, param) return {val} end, ["references"] = function(val, name, param) return parse_references(val, make_parse_err(val, name)) end, ["genders"] = function(val, name, param) if not val:find("[,<]") then return {{spec = val}} end -- NOTE: We don't pass in allow_space_around_comma. Consistent with other comma-separated types, there shouldn't -- be spaces around the comma. return parse_gender_and_number_spec { spec = val, parse_err = make_parse_err(val, name), allow_multiple = true, } end, ["script"] = function(val, name, param) local method, func = param.method if method == nil or method == "code" then func, method = get_script_by_code, "code" elseif method == "name" then func, method = get_script_by_name, "name" else error(format('Internal error: expected `method` for type `script` to be "code", "name" or undefined, but saw %s', dump(method))) end return func(val) or convert_val_error(val, name, "script " .. method, "[[WT:LOS]]") end, ["string"] = function(val, name, param) -- To be removed as unnecessary. track("string") return val end, -- TODO: add support for resolving to unsupported titles. -- TODO: split this into "page name" (i.e. internal) and "link target" (i.e. external as well), which is more intuitive. ["title"] = function(val, name, param) local namespace = param.namespace if namespace == nil then namespace = 0 else local valid_type = type(namespace) ~= "number" and 'of type "number" or undefined' or not namespaces[namespace] and "a valid namespace number" or nil if valid_type then error(format('Internal error: expected `namespace` for type `title` to be %s, but saw %s', valid_type, dump(namespace))) end end -- Decode entities. WARNING: mw.title.makeTitle must be called with `decoded` (as it doesn't decode) and mw.title.new must be called with `val` (as it does decode, so double-decoding needs to be avoided). local decoded, prefix, title = decode_entities(val), param.prefix -- If the input is a fragment, treat the title as the current title with the input fragment. if sub(decoded, 1, 1) == "#" then -- If prefix is "force", only get the current title if it's in the specified namespace. current_title includes the namespace prefix. if current_namespace == nil then local current_title = mw_title.getCurrentTitle() current_title_text, current_namespace = current_title.prefixedText, current_title.namespace end if not (prefix == "force" and namespace ~= current_namespace) then title = new_title(current_title_text .. val) end elseif prefix == "force" then -- Unconditionally add the namespace prefix (mw.title.makeTitle). title = make_title(namespace, decoded) elseif prefix == "full override" then -- The first input prefix will be used as an override (mw.title.new). This can be a namespace or interwiki prefix. title = new_title(val, namespace) elseif prefix == nil or prefix == "namespace override" then -- Only allow namespace prefixes to override. Interwiki prefixes therefore need to be treated as plaintext (e.g. "el:All topics" with namespace 14 returns "el:Category:All topics", but we want "Category:el:All topics" instead; if the former is really needed, then the input ":el:Category:All topics" will work, as the initial colon overrides the namespace). mw.title.new can take namespace names as well as numbers in the second argument, and will throw an error if the input isn't a valid namespace, so this can be used to determine if a prefix is for a namespace, since mw.title.new will return successfully only if there's either no prefix or the prefix is for a valid namespace (in which case we want the override). local success success, title = pcall(new_title, val, match(decoded, "^.-%f[:]") or namespace) -- Otherwise, get the title with mw.title.makeTitle, which unconditionally adds the namespace prefix, but behaves like mw.title.new if the namespace is 0. if not success then title = make_title(namespace, decoded) end else error(format('Internal error: expected `prefix` for type `title` to be "force", "full override", "namespace override" or undefined, but saw %s', dump(prefix))) end local allow_external = param.allow_external if allow_external == true then return title or convert_val_error(val, name, "Wiktionary or external page title") elseif not allow_external then return title and is_internal_title(title) and title or convert_val_error(val, name, "Wiktionary page title") end error(format('Internal error: expected `allow_external` for type `title` to be of type "boolean" or undefined, but saw %s', dump(allow_external))) end, ["Wikimedia language"] = function(val, name, param) local fallback = param.fallback if fallback == true then return get_wm_lang_by_code_with_fallback(val) or convert_val_error(val, name, "Wikimedia language or language code") elseif not fallback then return get_wm_lang_by_code(val) or convert_val_error(val, name, "Wikimedia language code") end error(format('Internal error: expected `fallback` for type `Wikimedia language` to be of type "boolean" or undefined, but saw %s', dump(fallback))) end, }, { -- TODO: decode HTML entities in all input values. Non-trivial to implement, because we need to avoid any downstream functions decoding the output from this module, which would be double-decoding. Note that "title" has this implemented already, and it needs to have both the raw input and the decoded input to avoid double-decoding by me.title.new, so any implementation can't be as simple as decoding in __call then passing the result to the handler. __call = function(self, val, name, param, param_type, default) local val_type = type(val) -- TODO: check this for all possible parameter types. if val_type == param_type then return val elseif val_type ~= "string" then local expected = "string" if default and (param_type == "boolean" or param_type == "number") then expected = param_type .. " or " .. expected end error(format( "Internal error: %sargument %s has the type %s; expected a %s.", default and (default .. " for ") or "", name, dump(val_type), expected )) end local func = self[param_type] if func == nil then error(format("Internal error: %s is not a recognized parameter type.", dump(param_type))) end return func(val, name, param) end }) --[==[ func: export.convert_val(val, name, param) Convert a parameter value according to the associated specs listed in the `params` table passed to [[Module:parameters]]. `val` is the value to convert for a parameter whose name is `name` (used only in error messages). `param` is the spec (the value part of the `params` table for the parameter). In place of passing in the parameter name, `name` can be a function that throws an error, displaying the specified message along with the parameter name and value. This function processes all the conversion-related fields in `param`, including `type`, `set`, `sublist`, `convert`, etc. It returns the converted value. ]==] local function convert_val(val, name, param, default) local param_type = param.type or "string" -- If param.type is a function, resolve it to a recognized type. if is_callable(param_type) then param_type = param_type(val) end local convert, sublist = param.convert, param.sublist -- `val` might not be a string if it's the default value. if sublist and type(val) == "string" then local retlist, set = {}, param.set if convert then local thisindex, thisval, insval, parse_err = 0 if is_callable(name) then -- We assume the passed-in error function in `name` already shows the parameter name and raw value. function parse_err(msg) name(format("%s: item #%s=%s", msg_with_processed(msg, thisval, insval), thisindex, thisval) ) end else function parse_err(msg) error(format("%s: item #%s=%s of parameter %s=%s", msg_with_processed(msg, thisval, insval), thisindex, thisval, name, val) ) end end for v in split_sublist(val, name, sublist) do thisindex, thisval = thisindex + 1, v if set then v = check_set(v, name, param, param_type) end insert(retlist, convert(type_handlers(v, name, param, param_type, default), parse_err)) end else for v in split_sublist(val, name, sublist) do if set then v = check_set(v, name, param, param_type) end insert(retlist, type_handlers(v, name, param, param_type, default)) end end return retlist elseif param.set then val = check_set(val, name, param, param_type) end local retval = type_handlers(val, name, param, param_type, default) if convert then local parse_err if is_callable(name) then -- We assume the passed-in error function in `name` already shows the parameter name and raw value. if retval == val then -- This is an optimization to avoid creating a closure. The second arm works correctly even -- when retval == val. parse_err = name else function parse_err(msg) name(msg_with_processed(msg, val, retval)) end end else function parse_err(msg) error(format("%s: parameter %s=%s", msg_with_processed(msg, val, retval), name, val)) end end retval = convert(retval, parse_err) end -- If `sublist` is set but the input wasn't a string, return `retval` as a one-item list. if sublist then retval = {retval} end return retval end export.convert_val = convert_val -- used by [[Module:parameter utilities]] local function unknown_param(name, val, args_unknown) track("unknown parameters") args_unknown[name] = val return args_unknown end local function check_string_param_modifier(param_type, name, tag) if param_type and not (param_type == "string" or param_type == "parameter" or is_callable(param_type)) then internal_process_error( "%s cannot be set unless %s is set to %s (the default), %s or a function: parameter %s has the type %s.", tag, "type", "string", "parameter", name, param_type ) end end local function hole_error(params, name, listname, this, nxt, extra) -- `process_error` calls `dump` on values to be inserted into -- error messages, but with numeric lists this causes "numeric" -- to look like the name of the list rather than a description, -- as `dump` adds quote marks. Insert it early to avoid this, -- but add another %s specifier in all other cases, so that -- actual list names will be displayed properly. local offset, specifier, starting_from = 0, "%s", "" local msg = "Item %%d in the list of %s parameters must be given if item %%d is given, because %sthere shouldn't be any gaps due to missing%s parameters." local specs = {} if type(listname) == "string" then specs[2] = listname elseif type(name) == "number" then offset = name - 1 -- To get the original parameter. specifier = "numeric" -- If the list doesn't start at parameter 1, avoid implying -- there can't be any gaps in the numeric parameters if -- some parameter with a lower key is optional. for j = name - 1, 1, -1 do local _param = params[j] if not (_param and _param.required) then starting_from = format("(starting from parameter %d) ", dump(j + 1)) break end end else specs[2] = name end specs[1] = this + offset -- Absolute index for this item. insert(specs, nxt + offset) -- Absolute index for the next item. process_error(format(msg, specifier, starting_from, extra or ""), unpack(specs)) end local function check_disallow_holes(params, val, name, listname, extra) for i = 1, val.maxindex do if val[i] == nil then hole_error(params, name, listname, i, num_keys(val)[i], extra) end end end local function handle_holes(params, val, name) local param = params[name] local disallow_holes = param.disallow_holes -- Iterate up the list, and throw an error if a hole is found. if disallow_holes then check_disallow_holes(params, val, name, param.list, " or empty") end -- Iterate up the list, and throw an error if a hole is found due to a -- missing parameter, treating empty parameters as part of the list. This -- applies beyond maxindex if blank arguments are supplied beyond it, so -- isn't mutually exclusive with `disallow_holes`. local empty = val.empty if param.disallow_missing then if empty then -- Remove `empty` from `val`, so it doesn't get returned. val.empty = nil for i = 1, max(val.maxindex, empty.maxindex) do if val[i] == nil and not empty[i] then local keys = extend(num_keys(val), num_keys(empty)) sort(keys) hole_error(params, name, param.list, i, keys[i]) end end -- If there's no table of empty parameters, the check is identical to -- `disallow_holes`, except that the error message only refers to -- missing parameters, not missing or empty ones. If `disallow_holes` is -- also set, there's no point checking again. elseif not disallow_holes then check_disallow_holes(params, val, name, param.list) end end -- If `allow_holes` is set, there's nothing left to do. if param.allow_holes then -- do nothing -- Otherwise, remove any holes: `pairs` won't work, as it's unsorted, and -- iterating from 1 to `maxindex` times out with inputs like |100000000000=, -- so use num_keys to get a list of numerical keys sorted from lowest to -- highest, then iterate up the list, moving each value in `val` to the -- lowest unused positive integer key. This also avoids the need to create a -- new table. If `disallow_holes` is specified, then there can't be any -- holes in the list, so there's no reason to check again; this doesn't -- apply to `disallow_missing`, however. else if not disallow_holes then local keys, i = num_keys(val), 0 while true do i = i + 1 local key = keys[i] if key == nil then break elseif i ~= key then track("holes compressed") val[i], val[key] = val[key], nil end end end -- Some code depends on only numeric params being present when no holes are -- allowed (e.g. by checking for the presence of arguments using next()), so -- remove `maxindex`. val.maxindex = nil end end local function maybe_flatten(params, val, name) local param = params[name] if param.flatten then if param.allow_holes then process_error("For parameter %s, can't set both `allow_holes` and `flatten`", name) end if not param.sublist and param.type ~= "genders" and param.type ~= "labels" and param.type ~= "references" and param.type ~= "qualifier" and param.type ~= "form of tags" then process_error("For parameter %s, can only set `flatten` along with `sublist` or a list-generating type", name) end -- Do the flattening ourselves rather than calling flatten() in [[Module:table]], which will attempt to -- flatten non-list objects like title objects, and cause an error in the process. -- FIXME: We should do this in-place if possible. local newlist = {} for _, sublist in ipairs(val) do for _, item in ipairs(sublist) do insert(newlist, item) end end val = newlist end return val end -- If both `template_default` and `default` are given, `template_default` takes precedence, but only on the template or -- module page. This means a different default can be specified for the template or module page example. However, -- `template_default` doesn't apply if any args are set, which helps (somewhat) with examples on documentation pages -- transcluded into the template page. HACK: We still run into problems on documentation pages transcluded into the -- template page when pagename= is set. Check this on the assumption that pagename= is fairly standard. local function convert_default_val(name, param, pagename_set, any_args_set, add_empty_sublist) if not pagename_set then local val = param.template_default if val ~= nil and not any_args_set and is_own_page() then return convert_val(val, name, param, "template default") end end local val = param.default if val ~= nil then return convert_val(val, name, param, "default") -- Sublist parameters should return an empty table if not given, but only do -- this if the parameter isn't also a list (in which case it will already -- be an empty table). -- FIXME: do this once all modules that pass in a sublist parameter treat an empty sublist identically to a nil argument; some currently do things based on the fact an argument exists at all. -- elseif add_empty_sublist and param.sublist then --return {} end end --[==[ Process arguments with a given list of parameters. Return a table containing the processed arguments. The `args` parameter specifies the arguments to be processed; they are the arguments you might retrieve from {frame:getParent().args} (the template arguments) or in some cases {frame.args} (the invocation arguments). The `params` parameter specifies a list of valid parameters, and consists of a table. If an argument is encountered that is not in the parameter table, an error is thrown. The structure of the `params` table is as described above in the intro comment. '''WARNING:''' The `params` table is destructively modified to save memory. Nonetheless, different keys can share the same value objects in memory without causing problems. The `return_unknown` parameter, if set to {true}, prevents the function from triggering an error when it comes across an argument with a name that it doesn't recognise. Instead, the return value is a pair of values: the first is the processed arguments as usual, while the second contains all the unrecognised arguments that were left unprocessed. This allows you to do multi-stage processing, where the entire set of arguments that a template should accept is not known at once. For example, an inflection-table might do some generic processing on some arguments, but then defer processing of the remainder to the function that handles a specific inflectional type. ]==] function export.process(args, params, return_unknown) -- Process parameters for specific properties local args_new, args_unknown, any_args_set, required, patterns, list_args, index_list, args_placeholders, placeholders_n = {} -- TODO: memoize the processing of each unique `param` value, since it's common for the same value to be used for many parameter names. for name, param in pairs(params) do validate_name(name, "parameter names") if param ~= true then local spec_type = type(param) if type(param) ~= "table" then internal_process_error( "spec for parameter %s must be a table of specs or the value true, but found %s.", name, spec_type ~= "boolean" and spec_type or param ) end -- Populate required table, and make sure aliases aren't set to required. if param.required then if required == nil then required = {} end required[name] = true end local listname, alias_of = param.list, param.alias_of if alias_of then validate_name(alias_of, "the alias_of field of parameter ", name) if alias_of == name then internal_process_error( "parameter %s cannot be an alias of itself.", name ) end local main_param = params[alias_of] -- Check that the alias_of is set to a valid parameter. if not (main_param == true or type(main_param) == "table") then internal_process_error( "parameter %s is an alias of an invalid parameter.", name ) end validate_alias_options(param, name, main_param, alias_of) -- Aliases can't be lists unless the canonical parameter is also a list. if listname and (main_param == true or not main_param.list) then internal_process_error( "list parameter %s is set as an alias of %s, which is not a list parameter.", name, alias_of ) -- Can't be an alias of an alias. elseif main_param ~= true then local main_alias_of = main_param.alias_of if main_alias_of ~= nil then internal_process_error( "alias_of cannot be set to another alias: parameter %s is set as an alias of %s, which is in turn an alias of %s. Set alias_of for %s to %s.", name, alias_of, main_alias_of, name, main_alias_of ) end end end local replaced_by = param.replaced_by if replaced_by then -- replaced_by can be `false`, which is OK validate_name(replaced_by, "the replaced_by field of parameter ", name) if replaced_by == name then internal_process_error( "parameter %s cannot be replaced by itself.", name ) end local main_param = params[replaced_by] -- Check that the replaced_by is set to a valid parameter. if not (main_param == true or type(main_param) == "table") then internal_process_error( "parameter %s is set to be replaced by an invalid parameter.", name ) end -- Can't be a replaced-by of a replaced-by. if main_param ~= true then local main_replaced_by = main_param.replaced_by if main_replaced_by ~= nil then internal_process_error( "replaced_by cannot be set to another replaced-by parameter: parameter %s is set as replaced by %s, which is in turn replaced by %s. Set replaced_by for %s to %s.", name, replaced_by, main_replaced_by, name, main_replaced_by ) end end if param.instead ~= nil then internal_process_error("the `instead` tag can only be given when `replaced_by` is set to `false`.") end elseif replaced_by == false then if param.instead ~= nil and type(param.instead) ~= "string" then internal_process_error( "the `instead` tag must be a string, but saw %s.", param.instead ) end end if replaced_by ~= nil then if param.reason ~= nil and type(param.reason) ~= "string" then internal_process_error( "the `reason` tag must be a string, but saw %s.", param.reason ) end end if listname then if not alias_of then local key = name if type(name) == "string" then key = gsub(name, "\1", "") end local list_arg = {maxindex = 0} args_new[key] = list_arg if list_args == nil then list_args = {} end list_args[key] = list_arg end local list_type = type(listname) if list_type == "string" then -- If the list property is a string, then it represents the name -- to be used as the prefix for list items. This is for use with lists -- where the first item is a numbered parameter and the -- subsequent ones are named, such as 1, pl2, pl3. patterns = save_pattern(name, listname, patterns or {}) elseif listname ~= true then internal_process_error( "list field for parameter %s must be a boolean, string or undefined, but saw a %s.", name, list_type ) elseif type(name) == "number" then if index_list ~= nil then internal_process_error( "only one numeric parameter can be a list, unless the list property is a string." ) end -- If the name is a number, then all indexed parameters from -- this number onwards go in the list. index_list = name else patterns = save_pattern(name, name, patterns or {}) end if find(name, "\1", nil, true) then if args_placeholders then placeholders_n = placeholders_n + 1 args_placeholders[placeholders_n] = name else args_placeholders, placeholders_n = {name}, 1 end end end end end --Process required changes to `params`. if args_placeholders then for i = 1, placeholders_n do local name = args_placeholders[i] params[gsub(name, "\1", "")], params[name] = params[name], nil end end -- Process the arguments for name, val in pairs(args) do any_args_set = true validate_name(name, "argument names", nil, true) -- Guaranteeing that all values are strings avoids issues with type coercion being inconsistent between functions. local val_type = type(val) if val_type ~= "string" then internal_process_error( "argument %s has the type %s; all arguments must be strings.", name, val_type ) end local orig_name, raw_type, index, canonical = name, type(name) if raw_type == "number" then if index_list and name >= index_list then index = name - index_list + 1 name = index_list end elseif patterns then -- Does this argument name match a pattern? for pattern, pname in next, patterns do index = match(name, pattern) -- It matches, so store the parameter name and the -- numeric index extracted from the argument name. if index then index = tonumber(index) name = pname break end end end local param = params[name] -- If the argument is not in the list of parameters, store it in a separate list. if not param then args_unknown = unknown_param(name, val, args_unknown or {}) elseif param == true then canonical = orig_name val = php_trim(val) if val ~= "" then -- If the parameter is duplicated, throw an error. if args_new[name] ~= nil then process_error( "Parameter %s has been entered more than once. This is probably because a parameter alias has been used.", canonical ) end args_new[name] = val end else if param.replaced_by == false then process_error( ("Parameter %%s has been removed and is no longer valid%s.%s"):format( param.reason and ", " .. param.reason or "", param.instead and " Instead, " .. param.instead .. "." or ""), name ) elseif param.replaced_by then process_error( ("Parameter %%s has been replaced by %%s%s."):format( param.reason and ", " .. param.reason or ""), name, param.replaced_by ) end if param.deprecated then track("deprecated parameter", name) end if param.require_index then -- Disallow require_index for numeric parameter names, as this doesn't make sense. if raw_type == "number" then internal_process_error( "cannot set require_index for numeric parameter %s.", name ) -- If a parameter without the trailing index was found, and -- require_index is set on the param, treat it -- as if it isn't recognized. elseif not index then args_unknown = unknown_param(name, val, args_unknown or {}) end end -- Check that separate_no_index is not being used with a numeric parameter. if param.separate_no_index then if raw_type == "number" then internal_process_error( "cannot set separate_no_index for numeric parameter %s.", name ) elseif type(param.alias_of) == "number" then internal_process_error( "cannot set separate_no_index for parameter %s, as it is an alias of numeric parameter %s.", name, param.alias_of ) end end -- If no index was found, use 1 as the default index. -- This makes list parameters like g, g2, g3 put g at index 1. -- If `separate_no_index` is set, then use 0 as the default instead. if not index and param.list then index = param.separate_no_index and 0 or 1 end -- Normalize to the canonical parameter name. If it's a list, but the alias is not, then determine the index. local raw_name = param.alias_of if raw_name then raw_type = type(raw_name) if raw_type == "number" then name = raw_name local main_param = params[raw_name] if main_param ~= true and main_param.list then if not index then index = param.separate_no_index and 0 or 1 end canonical = raw_name + index - 1 else canonical = raw_name end else name = gsub(raw_name, "\1", "") local main_param = params[name] if not index and main_param ~= true and main_param.list then index = param.separate_no_index and 0 or 1 end if not index or index == 0 then canonical = name elseif name == raw_name then canonical = name .. index else canonical = gsub(raw_name, "\1", index) end end else canonical = orig_name end -- Only recognize demo parameters if this is the current template or module's -- page, or its documentation page. if param.demo and not is_own_page("include_documentation") then args_unknown = unknown_param(name, val, args_unknown or {}) end -- Remove leading and trailing whitespace unless no_trim is true. if param.no_trim then check_string_param_modifier(param.type, name, "no_trim") else val = php_trim(val) end -- Empty string is equivalent to nil unless allow_empty is true. if param.allow_empty then check_string_param_modifier(param.type, name, "allow_empty") elseif val == "" then -- If `disallow_missing` is set, keep track of empty parameters -- via the `empty` field in `arg`, which will be used by the -- `disallow_missing` check. This will be deleted before -- returning. if index and param.disallow_missing then local arg = args_new[name] local empty = arg.empty if empty == nil then empty = {maxindex = 0} arg.empty = empty end empty[index] = true if index > empty.maxindex then empty.maxindex = index end end val = nil end -- Allow boolean false. if val ~= nil then -- Convert to proper type if necessary. local main_param = params[raw_name] if main_param ~= true then val = convert_val(val, orig_name, main_param or param) end -- Mark it as no longer required, as it is present. if required then required[name] = nil end -- Store the argument value. if index then local arg = args_new[name] -- If the parameter is duplicated, throw an error. if arg[index] ~= nil then process_error( "Parameter %s has been entered more than once. This is probably because a list parameter has been entered without an index and with index 1 at the same time, or because a parameter alias has been used.", canonical ) end arg[index] = val -- Store the highest index we find. local maxindex = arg.maxindex if index > maxindex then maxindex = index end if arg[0] ~= nil then arg.default, arg[0] = arg[0], nil if maxindex < 1 then maxindex = 1 end end arg.maxindex = maxindex if not params[name].list then args_new[name] = val -- Don't store index 0, as it's a proxy for the default. elseif index > 0 then arg[index] = val end else -- If the parameter is duplicated, throw an error. if args_new[name] ~= nil then process_error( "Parameter %s has been entered more than once. This is probably because a parameter alias has been used.", canonical ) end if not raw_name then args_new[name] = val else local main_param = params[raw_name] if main_param ~= true and main_param.list then local main_arg = args_new[raw_name] main_arg[1] = val -- Store the highest index we find. if main_arg.maxindex < 1 then main_arg.maxindex = 1 end else args_new[raw_name] = val end end end end end end -- Remove holes in any list parameters if needed. This must be handled -- straight after the previous loop, as any instances of `empty` need to be -- converted to nil. if list_args then for name, val in next, list_args do handle_holes(params, val, name) end end -- If the current page is the template which invoked this Lua instance, then ignore the `require` flag, as it -- means we're viewing the template directly. Required parameters sometimes have a `template_default` key set, -- which gets used in such cases as a demo. -- Note: this won't work on other pages in the Template: namespace (including the /documentation subpage), -- or if the #invoke: is on a page in another namespace. local pagename_set = args_new.pagename -- Handle defaults. for name, param in pairs(params) do if param ~= true then local arg_new = args_new[name] if arg_new == nil then args_new[name] = convert_default_val(name, param, pagename_set, any_args_set, true) elseif param.list and arg_new[1] == nil then local default_val = convert_default_val(name, param, pagename_set, any_args_set) if default_val ~= nil then arg_new[1] = default_val if arg_new.maxindex == 0 then arg_new.maxindex = 1 end end end end end -- Flatten nested lists if called for. This must come after setting the default. if list_args then for name, val in next, list_args do args_new[name] = maybe_flatten(params, val, name) end end -- The required table should now be empty. -- If any parameters remain, throw an error, unless we're on the current template or module's page. if required and next(required) ~= nil and not is_own_page() then params_list_error(required, "required") -- Return the arguments table. -- If there are any unknown parameters, throw an error, unless return_unknown is set, in which case return args_unknown as a second return value. elseif return_unknown then return args_new, args_unknown or {} elseif args_unknown and next(args_unknown) ~= nil then params_list_error(args_unknown, "not used by this template") end return args_new end return export c23kzesggrlowmn06oii7zu1bbzht4t मॉड्यूल:string 828 302129 487694 465065 2026-09-02T03:39:41Z SM7 6218 updating...NOT used on enwkt 487694 Scribunto text/plain error("You probably mean [[Module:string/templates]].") -- This is a deprecated alias for [[Module:string/templates]] which might be replaced by another module in future. 313ct2o2njovbb182pauarjdyzu2yf7 मॉड्यूल:table 828 302130 487591 477884 2026-09-01T17:51:46Z SM7 6218 updating... 487591 Scribunto text/plain local export = {} --[==[ intro: This module provides functions for dealing with Lua tables. All of them, except for two helper functions, take a table as their first argument. Some functions are available as methods in the arrays created by [[Module:array]]. Functions by what they do: * Create a new table: ** `shallowCopy`, `deepCopy`, `removeDuplicates`, `numKeys`, `compressSparseArray`, `keysToList`, `reverse`, `invert`, `listToSet` * Create an array: ** `removeDuplicates`, `numKeys`, `compressSparseArray`, `keysToList`, `reverse` * Return information about the table: ** `size`, `length`, `contains`, `isArray`, `deepEquals` * Treat the table as an array (that is, operate on the values in the array portion of the table: values indexed by consecutive integers starting at {1}): ** `removeDuplicates`, `length`, `contains`, `serialCommaJoin`, `reverseIpairs`, `reverse`, `invert`, `listToSet`, `isArray` * Treat a table as a sparse array (that is, operate on values indexed by non-consecutive integers): ** `numKeys`, `maxIndex`, `compressSparseArray`, `sparseConcat`, `sparseIpairs` * Generate an iterator: ** `sparseIpairs`, `sortedPairs`, `reverseIpairs` * Other functions: ** `sparseConcat`, `serialCommaJoin`, `reverseConcat` The original version was a copy of {{w|Module:TableTools}} on Wikipedia via [[c:Module:TableTools|Module:TableTools]] on Commons, but in the course of time this module has been almost completely rewritten, with many new functions added. The main legacy of this is the use of camelCase for function names rather than snake_case, as is normal in the English Wiktionary. ]==] local load_module = "Module:load" local math_module = "Module:math" local table = table local concat = table.concat local dump = mw.dumpObject local ipairs = ipairs local ipairs_default_iter = ipairs{export} local next = next local pairs = pairs local require = require local select = select local signed_index -- defined as export.signedIndex local table_len -- defined as export.length local type = type --[==[ Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==] local function is_integer(...) is_integer = require(math_module).is_integer return is_integer(...) end local function safe_require(...) safe_require = require(load_module).safe_require return safe_require(...) end --[==[ Given an array and a signed index, returns the true table index. If the signed index is negative, the array will be counted from the end, where {-1} is the highest index in the array; otherwise, the returned index will be the same. To aid optimization, the first argument may be a number representing the array length instead of the array itself; this is useful when the array length is already known, as it avoids recalculating it each time this function is called.]==] function export.signedIndex(t, k) if not is_integer(k) then error("index must be an integer") end return k < 0 and (type(t) == "table" and table_len(t) or t) + k + 1 or k end signed_index = export.signedIndex --[==[ An iterator which works like `pairs`, but ignores any `__pairs` metamethod.]==] function export.rawPairs(t) return next, t, nil end --[==[ An iterator which works like `ipairs`, but ignores any `__ipairs` metamethod.]==] function export.rawIpairs(t) return ipairs_default_iter, t, 0 end --[==[ This returns the length of a table, or the first integer key n counting from 1 such that t[n + 1] is nil. It is a more reliable form of the operator `#`, which can become unpredictable under certain circumstances due to the implementation of tables under the hood in Lua, and therefore should not be used when dealing with arbitrary tables. `#` also does not use metamethods, so will return the wrong value in cases where it is desirable to take these into account (e.g. data loaded via `mw.loadData`). If `raw` is set, then metamethods will be ignored, giving the true table length. For arrays, this function is faster than `export.size`.]==] function export.length(t, raw) local n = 0 if raw then for i in ipairs_default_iter, t, 0 do n = i end return n end repeat n = n + 1 until t[n] == nil return n - 1 end table_len = export.length local function getIteratorValues(i, j , step, t_len) i, j = i and signed_index(t_len, i), j and signed_index(t_len, j) if step == nil then i, j = i or 1, j or t_len return i, j, j < i and -1 or 1 elseif step == 0 or not is_integer(step) then error("step must be a non-zero integer") elseif step < 0 then return i or t_len, j or 1, step end return i or 1, j or t_len, step end --[==[ Given an array `list` and function `func`, iterate through the array applying {func(r, k, v)}, and returning the result, where `r` is the value calculated so far, `k` is an index, and `v` is the value at index `k`. For example, {reduce(array, function(a, _, v) return a + v end)} will return the sum of `array`. Optional arguments: * `i`: start index; negative values count from the end of the array * `j`: end index; negative values count from the end of the array * `step`: step increment These must be non-zero integers. The function will determine where to iterate from, whether to iterate forwards or backwards and by how much, based on these inputs (see examples below for default behaviours). Examples: # No values for i, j or step results in forward iteration from the start to the end in steps of 1 (the default). # step=-1 results in backward iteration from the end to the start in steps of 1. # i=7, j=3 results in backward iteration from indices 7 to 3 in steps of 1 (i.e. step=-1). # j=-3 results in forward iteration from the start to the 3rd last index. # j=-3, step=-1 results in backward iteration from the end to the 3rd last index.]==] function export.reduce(t, func, i, j, step) i, j, step = getIteratorValues(i, j, step, table_len(t)) local ret = t[i] for k = i + step, j, step do ret = func(ret, k, t[k]) end return ret end do local function replace(t, func, i, j, step, generate) local t_len = table_len(t) -- Normalized i, j and step, based on the inputs. local norm_i, norm_j, norm_step = getIteratorValues(i, j, step, t_len) if norm_step > 0 then i, j, step = 1, t_len, 1 else i, j, step = t_len, 1, -1 end -- "Signed" variables are multiplied by -1 if `step` is negative. local t_new, signed_i, signed_j = generate and {} or t, norm_i * step, norm_j * step for k = i, j, step do -- Replace the values iff they're within the i to j range and `step` wouldn't skip the key. -- Note: i > j if `step` is positive; i < j if `step` is negative. Otherwise, the range is empty. local signed_k = k * step if signed_k >= signed_i and signed_k <= signed_j and (k - norm_i) % norm_step == 0 then t_new[k] = func(k, t[k]) -- Otherwise, add the existing value if `generate` is set. elseif generate then t_new[k] = t[k] end end return t_new end --[==[ Given an array `list` and function `func`, iterate through the array applying {func(k, v)} (where `k` is an index, and `v` is the value at index `k`), replacing the relevant values with the result. For example, {apply(array, function(_, v) return 2 * v end)} will double each member of the array. Optional arguments: * `i`: start index; negative values count from the end of the array * `j`: end index; negative values count from the end of the array * `step`: step increment These must be non-zero integers. The function will determine where to iterate from, whether to iterate forwards or backwards and by how much, based on these inputs (see examples below for default behaviours). Examples: # No values for i, j or step results in forward iteration from the start to the end in steps of 1 (the default). # step=-1 results in backward iteration from the end to the start in steps of 1. # i=7, j=3 results in backward iteration from indices 7 to 3 in steps of 1 (i.e. step=-1). # j=-3 results in forward iteration from the start to the 3rd last index. # j=-3, step=-1 results in backward iteration from the end to the 3rd last index.]==] function export.apply(t, func, i, j, step) return replace(t, func, i, j, step, false) end --[==[ Given an array `list` and function `func`, iterate through the array applying {func(k, v)} (where `k` is an index, and `v` is the value at index `k`), and return a shallow copy of the original array with the relevant values replaced. For example, {generate(array, function(_, v) return 2 * v end)} will return a new array in which each value has been doubled. Optional arguments: * `i`: start index; negative values count from the end of the array * `j`: end index; negative values count from the end of the array * `step`: step increment These must be non-zero integers. The function will determine where to iterate from, whether to iterate forwards or backwards and by how much, based on these inputs (see examples below for default behaviours). Examples: # No values for i, j or step results in forward iteration from the start to the end in steps of 1 (the default). # step=-1 results in backward iteration from the end to the start in steps of 1. # i=7, j=3 results in backward iteration from indices 7 to 3 in steps of 1 (i.e. step=-1). # j=-3 results in forward iteration from the start to the 3rd last index. # j=-3, step=-1 results in backward iteration from the end to the 3rd last index.]==] function export.generate(t, func, i, j, step) return replace(t, func, i, j, step, true) end end --[==[ Given an array `list` and function `func`, iterate through the array applying {func(k, v)} (where `k` is an index, and `v` is the value at index `k`), and returning whether the function is true for all iterations. Optional arguments: * `i`: start index; negative values count from the end of the array * `j`: end index; negative values count from the end of the array * `step`: step increment These must be non-zero integers. The function will determine where to iterate from, whether to iterate forwards or backwards and by how much, based on these inputs (see examples below for default behaviours). Examples: # No values for i, j or step results in forward iteration from the start to the end in steps of 1 (the default). # step=-1 results in backward iteration from the end to the start in steps of 1. # i=7, j=3 results in backward iteration from indices 7 to 3 in steps of 1 (i.e. step=-1). # j=-3 results in forward iteration from the start to the 3rd last index. # j=-3, step=-1 results in backward iteration from the end to the 3rd last index.]==] function export.all(t, func, i, j, step) i, j, step = getIteratorValues(i, j, step, table_len(t)) for k = i, j, step do if not func(k, t[k]) then return false end end return true end --[==[ Given an array `list` and function `func`, iterate through the array applying {func(k, v)} (where `k` is an index, and `v` is the value at index `k`), and returning whether the function is true for at least one iteration. Optional arguments: * `i`: start index; negative values count from the end of the array * `j`: end index; negative values count from the end of the array * `step`: step increment These must be non-zero integers. The function will determine where to iterate from, whether to iterate forwards or backwards and by how much, based on these inputs (see examples below for default behaviours). Examples: # No values for i, j or step results in forward iteration from the start to the end in steps of 1 (the default). # step=-1 results in backward iteration from the end to the start in steps of 1. # i=7, j=3 results in backward iteration from indices 7 to 3 in steps of 1 (i.e. step=-1). # j=-3 results in forward iteration from the start to the 3rd last index. # j=-3, step=-1 results in backward iteration from the end to the 3rd last index.]==] function export.any(t, func, i, j, step) i, j, step = getIteratorValues(i, j, step, table_len(t)) for k = i, j, step do if not not (func(k, t[k])) then return true end end return false end --[==[ Joins an array with serial comma and serial conjunction, normally {"and"}. An improvement on {mw.text.listToText}, which doesn't properly handle serial commas. Options: * `conj`: Conjunction to use; defaults to {"and"}. * `punc`: Punctuation to use; default to {","}. * `dontTag`: Don't tag the serial comma and serial {"and"}. For error messages, in which HTML cannot be used. * `dump`: Each item will be serialized with {mw.dumpObject}. For warnings and error messages.]==] function export.serialCommaJoin(seq, options) -- If the `dump` option is set, determine the table length as part of the -- dump loop, instead of calling `table_len` separately. local length if options and options.dump then local i, item = 1, seq[1] if item ~= nil then local dumped = {} repeat dumped[i] = dump(item) i = i + 1 item = seq[i] until item == nil seq = dumped end length = i - 1 else length = table_len(seq) end if length == 0 then return "" elseif length == 1 then return seq[1] end local conj = options and options.conj if conj == nil then conj = "और" end if length == 2 then return seq[1] .. " " .. conj .. " " .. seq[2] end local punc, dont_tag if options then punc = options.punc if punc == nil then punc = "," end dont_tag = options.dontTag else punc = "," end local comma if dont_tag then comma = "" -- since by default the serial comma doesn't display, when we can't tag we shouldn't display it. conj = " " .. conj .. " " else comma = "<span class=\"serial-comma\">" .. punc .. "</span>" conj = "<span class=\"serial-and\"> " .. conj .. "</span> " end return concat(seq, punc .. " ", 1, length - 1) .. comma .. conj .. seq[length] end --[==[ A function which works like `table.concat`, but respects any `__index` metamethod. This is useful for data loaded via `mw.loadData`.]==] function export.concat(t, sep, i, j) local list, k = {}, 0 while true do k = k + 1 local v = t[k] if v == nil then return concat(list, sep, i, j) end list[k] = v end end --[==[ Add a list of aliases for a given key to a table. The aliases must be given as a table.]==] function export.alias(t, k, aliases) for _, alias in pairs(aliases) do t[alias] = t[k] end end local mt = {} function mt:__index(k) local submodule = safe_require("Module:table/" .. k) self[k] = submodule return submodule end return setmetatable(export, mt) omxrjwfejzjjqdnget9gn6fc5b7t3qq मॉड्यूल:utilities 828 302132 487619 477419 2026-09-01T18:43:00Z SM7 6218 updating...BIG 487619 Scribunto text/plain local export = {} local headword_data_module = "Module:headword/data" local languages_module = "Module:languages" local links_module = "Module:links" local load_module = "Module:load" local pages_module = "Module:pages" local script_utilities_module = "Module:script utilities" local scripts_module = "Module:scripts" local string_utilities_module = "Module:string utilities" local utilities_data_module = "Module:utilities/data" local mw = mw local anchor_encode = mw.uri.anchorEncode local concat = table.concat local format_categories -- Defined below. local ipairs = ipairs local require = require local type = type local unstrip = mw.text.unstrip --[==[ Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==] local function decode_entities(...) decode_entities = require(string_utilities_module).decode_entities return decode_entities(...) end local function get_script(...) get_script = require(scripts_module).getByCode return get_script(...) end local function is_content_page(...) is_content_page = require(pages_module).is_content_page return is_content_page(...) end local function load_data(...) load_data = require(load_module).load_data return load_data(...) end local function remove_links(...) remove_links = require(links_module).remove_links return remove_links(...) end local function tag_text(...) tag_text = require(script_utilities_module).tag_text return tag_text(...) end local function trim(...) trim = require(string_utilities_module).trim return trim(...) end local function uupper(...) uupper = require(string_utilities_module).upper return uupper(...) end --[==[ Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==] local catfix_scripts local function get_catfix_scripts() catfix_scripts, get_catfix_scripts = load_data(utilities_data_module).catfix_scripts, nil return catfix_scripts end local current_title local function get_current_title() current_title, get_current_title = mw.title.getCurrentTitle(), nil return current_title end local defaultsort local function get_defaultsort() defaultsort, get_defaultsort = load_data(headword_data_module).page.pagename_defaultsort, nil return defaultsort end local pagename local function get_pagename() pagename, get_pagename = load_data(headword_data_module).page.encoded_pagename, nil return pagename end local und local function get_und() und, get_und = require(languages_module).getByCode("und"), nil return und end do local function handle_url(capture) return capture:match("https?://[^%s%]]+%s([^%]]+)") or "" end --[==[ A helper function to strip wiki markup, giving the plaintext of what is displayed on the page.]==] function export.get_plaintext(text) text = text :gsub("%[%[", "\1") :gsub("%]%]", "\2") -- Remove strip markers and HTML tags. text = unstrip(text):gsub("<[^<>\1\2]+>", "") -- Parse internal links for the display text, and remove categories. text = remove_links(text) -- Remove files. text = text:gsub("\1[Ff][Ii][Ll][Ee]:[^\1\2]+\2", "") :gsub("\1[Ii][Mm][Aa][Gg][Ee]:[^\1\2]+\2", "") -- Parse external links for the display text. text = text:gsub("%[(https?://[^%[%]]+)%]", handle_url) -- Any remaining square brackets aren't involved in links, but must be escaped to avoid creating new links. :gsub("\1", "&#91;&#91;") :gsub("\2", "&#93;&#93;") :gsub("%[", "&#91;") :gsub("]", "&#93;") -- Strip bold, italics and soft hyphens. :gsub("('*)'''(.-'*)'''", "%1%2") :gsub("('*)''(.-'*)''", "%1%2") :gsub("­", "") -- Get any HTML entities and trim. -- Note: don't decode URL percent encoding, as it shouldn't be used in display text and may cause problems if % is used. return trim(decode_entities(text)) end end do local function generate_sortkey(lang, sc, sort_key, sort_base) -- If the sort key is "-", treat the language as undetermined (the default). This is desirable when categorising (e.g.) translation requests, as the pages to be categorised are always in English/Translingual. if sort_key == "-" then lang, sort_key = und or get_und(), nil elseif not lang then lang = und or get_und() end -- Generate the automatic sort key. local auto = lang:makeSortKey(sort_base or pagename or get_pagename(), sc) -- Use the page defaultsort if necessary. Try hard to avoid empty sort key, which causes categories to be -- displayed as raw text; fall back to pagename if necessary. if not auto or auto == "" then auto = defaultsort or get_defaultsort() end if not auto or auto == "" then auto = sort_base end if not auto or auto == "" then auto = pagename or get_pagename() end -- If not sort key specified, use the automatic one. if not sort_key or sort_key == "" then return auto -- Otherwise, if the language is not "und", categorize the manual sort key as either redundant or non-redundant. -- FIXME: we should do this for "und" as well, but "Undetermined terms..." does not make sense for translations etc. elseif lang:getCode() ~= "und" then return sort_key, "[[Category:" .. lang:getFullName() .. " terms with " .. ( uupper(sort_key) == auto and "redundant" or "non-redundant non-automated" ) .. " sortkeys|" .. sort_key .. "]]" end return sort_key end --[==[ Format the categories with the appropriate sort key. * `cat` can take two forms: ** A string (the full category, minus the {"Category:"} prefix); ** A list of categories. Each category in the list can be either: *** A string in the same format as above; *** An object with the fields: **** `cat`: a string in the same format as above (required); **** `lang`: an optional language object to override the overall `lang`; **** `sc`: an optional script object to override the overall `sc`. **** `sort_key`: an optional sort key to override the overall `sort_key`; **** `sort_base`: an optional sort base to override the overall `sort_base`; * `lang` is an object encapsulating a language; if {nil}, the object for language code {"und"} (undetermined) will be used. `lang` is used when computing the sort key (either from the subpage name or sort base). * `sort_key` is placed in the category invocation, and indicates how the page will sort in the respective category. Normally '''do not use this'''. Instead, leave it {nil}, and if you need to a control the sort order, use {sort_base}, so that language-specific normalization is applied on top of the specified sort base. If neither {sort_key} nor {sort_base} is specified, the default is to apply language-specific normalization to the subpage name; see below. * `sort_base` lets you override the default sort key while still maintaining appropriate language-specific normalization. If {nil} is specified, this defaults to the subpage name, which is the portion of the full pagename after subtracting the namespace prefix (and, in certain namespaces such as {User:}, but notably not in the mainspace, after subtracting anything up through the final slash). The actual sort key is derived from the sort base approximately by lowercasing, applying language-specific normalization and then uppercasing; note that the same process is applied in deriving the sort key when no sort base is specified. For example, for French, Spanish, etc. the normalization process maps accented letters to their unaccented equivalents, so that e.g. in French, {{m|fr|ça}} sorts after {{m|fr|ca}} (instead of after the default Wikimedia sort order, which is approximately based on Unicode sort order and places ç after z) and {{m|fr|côté}} sorts after {{m|fr|coté}} (instead of between c and d). Similarly, in Russian the normalization process converts Cyrillic ё to a string consisting of Cyrillic е followed by U+10FFFF, so that effectively ё sorts after е instead of the default Wikimedia sort, which (I think) puts ё after я, the last letter of the Cyrillic alphabet. * `force_output` forces normal output in all namespaces. Normally, nothing is output if the page isn't in the main, Appendix:, Thesaurus:, Reconstruction: or Citations: namespaces. * `sc` is a script object; if nil, the default will be derived from the sort base (or its default value, the subpage name) by calling {lang:findBestScript()}. The value of `sc` is used during the sort base normalization process; for example, languages with multiple scripts will often have script-specific normalization processes.]==] function export.format_categories(cat, lang, sort_key, sort_base, force_output, sc) if not ( force_output or is_content_page(current_title or get_current_title()) or current_title.prefixedText == "Wiktionary:Sandbox" ) then return "" elseif type(cat) == "string" then local this_sort_key, extra = generate_sortkey(lang, sc, sort_key, sort_base) return "[[Category:" .. cat .. "|" .. this_sort_key .. "]]" .. (extra or "") end local ret, i, n, default = {}, 0, 0 -- Iterate over all categories in `cat`. while true do i = i + 1 local category = cat[i] if category == nil then return concat(ret) end local this_sort_key, extra -- If the category type is a table, use any custom options in it. if type(category) == "table" then category, this_sort_key, extra = category.cat, generate_sortkey( category.lang or lang, category.sc or sc, category.sort_key or sort_key, category.sort_base or sort_base ) -- If `default` has already been determined, use it. elseif default then this_sort_key = default -- Otherwise, calculate `default` and use it. else this_sort_key, extra = generate_sortkey(lang, sc, sort_key, sort_base) default = this_sort_key end n = n + 1 ret[n] = "[[Category:" .. category .. "|" .. this_sort_key .. "]]" .. (extra or "") end end format_categories = export.format_categories end --[==[ Add a "catfix", which is used on language-specific category pages to add language attributes and often script classes to all entry names. The addition of language attributes and script classes makes the entry names display better (using the language- or script-specific styles specified in [[MediaWiki:Common.css]]), which is particularly important for non-English languages that do not have consistent font support in browsers. Language attributes are added for all languages, but script classes are only added for languages with one script listed in their data file, or for languages that have a default script listed in the {catfix_script} list in [[Module:utilities/data]]. Some languages clearly have a default script, but still have other scripts listed in their data file. If those other scripts are not simply scripts like {{cd|Brai}} (Braille), their default script needs to be specified. Others do not have a default script. * Serbo-Croatian is regularly written in both the Latin and Cyrillic scripts. Because it uses two scripts, Serbo-Croatian cannot have a script class applied to entries in its category pages, as only one script class can be specified at a time. * German is usually written in the Latin script ({{cd|Latn}}), but Fraktur ({{cd|Latf}}) is also listed in its data file. So German needs an entry in the {catfix_script} list, so that the {{cd|Latn}} (Latin) script class will be applied to entries in its category pages. To find the scripts listed for a language, go to [[Module:languages]] and use the search box to find the data file for the language. To find out what a script code means, search the script code in [[Module:scripts/data]].]==] function export.catfix(lang, sc) if not lang or not lang.getCanonicalName then error('The first argument to the function "catfix" should be a language object from [[Module:languages]] or [[Module:etymology languages]].') end if sc and not sc.getCode then error('The second argument to the function "catfix" should be a script object from [[Module:scripts]].') end -- To add script classes to links on pages created by category boilerplate templates. if not sc then local code = (catfix_scripts or get_catfix_scripts())[lang:getCode()] or catfix_scripts[lang:getFullCode()] if code then sc = get_script(code) end end -- If the language only has a single valid candidate script, apply it as the default. if not sc then local scripts = lang:getScripts() if #scripts == 1 then sc = scripts[1] else -- Iterate over scripts. If there is only one when ignoring -- scripts like Brai, then pick that one. for _, script in ipairs(scripts) do if script:getCode() ~= "Brai" then if sc then -- Multiple candidates - fail. sc = nil break else sc = script end end end end end -- Hack: using a <ul> tag prevents the parser from automatically generating a <p> tag around the catfix element. return "<ul class=\"catfix\" data-anchor=\"" .. anchor_encode(lang:getFullName()) .. "\">" .. tag_text("", lang, sc) .. "</ul>" .. format_categories("Pages using catfix", nil, nil, nil, true) end --[==[ Given a type (as a string) and an arbitrary number of entities, checks whether all of those entities are language, family, script, writing system or Wikimedia language objects. Useful for error handling in functions that require one of these kinds of object. If `noErr` is set, the function returns false instead of throwing an error, which allows customised error handling to be done in the calling function.]==] function export.check_object(typ, noErr, ...) if ... == nil then if noErr then return false end error("Must provide at least one object to check.", 2) end for _, obj in ipairs{...} do if type(obj) ~= "table" or type(obj.hasType) ~= "function" then if noErr then return false end error("Function expected a " .. typ .. " object, but received a " .. type(obj) .. " instead.", 2) elseif not (typ == "object" or obj:hasType(typ)) then for _, wrong_type in ipairs{"family", "language", "script", "Wikimedia language", "writing system"} do if obj:hasType(wrong_type) then if noErr then return false end error("Function expected a " .. typ .. " object, but received a " .. wrong_type .. " object instead.", 2) end end if noErr then return false end error("Function expected a " .. typ .. " object, but received another type of object instead.", 2) end end return true end return export szkevg9xl5j9wpvvgbzhwuqjxjznt9y मॉड्यूल:links/data 828 302133 487590 477430 2026-09-01T17:48:17Z SM7 6218 updating... 487590 Scribunto text/plain local data = {} local unpack = unpack or table.unpack -- Lua 5.2 compatibility local u = require("Module:string utilities").char data.phonetic_extraction = { ["th"] = "Module:th", ["km"] = "Module:km", } data.ignored_prefixes = { ["cat"] = true, ["category"] = true, ["श्रेणी"] = true, ["file"] = true, ["चित्र"] = true, ["image"] = true } -- Scheme for using unsupported characters in titles. data.unsupported_characters = { ["#"] = "`num`", ["%"] = "`percnt`", -- only escaped in percent encoding ["&"] = "`amp`", -- only escaped in HTML entities ["."] = "`period`", -- only escaped in dot-slash notation ["<"] = "`lt`", [">"] = "`gt`", ["["] = "`lsqb`", ["]"] = "`rsqb`", ["_"] = "`lowbar`", ["`"] = "`grave`", -- used to enclose unsupported characters in the scheme, so a raw use in an unsupported title must be escaped to prevent interference ["{"] = "`lcub`", ["|"] = "`vert`", ["}"] = "`rcub`", ["~"] = "`tilde`", -- only escaped when 3 or more are consecutive ["\239\191\189"] = "`repl`" -- replacement character U+FFFD, which can't be typed directly here due to an abuse filter } -- Manually specified unsupported titles. Only put titles here if there is a different reason why they are unsupported, and not just because they contain one of the unsupported characters above. data.unsupported_titles = { [" "] = "Space", ["&amp;"] = "`amp`amp;", ["λοπαδοτεμαχοσελαχογαλεοκρανιολειψανοδριμυποτριμματοσιλφιοκαραβομελιτοκατακεχυμενοκιχλεπικοσσυφοφαττοπεριστεραλεκτρυονοπτοκεφαλλιοκιγκλοπελειολαγῳοσιραιοβαφητραγανοπτερύγων"] = "Ancient Greek dish", ["กรุงเทพมหานคร อมรรัตนโกสินทร์ มหินทรายุธยา มหาดิลกภพ นพรัตนราชธานีบูรีรมย์ อุดมราชนิเวศน์มหาสถาน อมรพิมานอวตารสถิต สักกะทัตติยวิษณุกรรมประสิทธิ์"] = "Thai name of Bangkok", [u(0x1680)] = "Ogham space", [u(0x3000)] = "Ideographic space" } -- Mammoth pages contain only Translingual and English entries, if present. The remaining L2s are placed on subpages. -- The same subpage titles are used across all mammoth pages for the convenience of bot and script operators. -- Assuming that most mammoth pages will be Latin-script terms, the subpage groupings are determined by dividing the -- list of Latin-script languages known to Wiktionary into two (three, ...) roughly equal alphabetic divisions. This is -- easily done by looking at Petscan's output: -- https://petscan.wmcloud.org/?sortby=title&language=en&ns%5B14%5D=1&categories=Latin+script+languages&project=wiktionary&doit= -- This data structure contains types of splits, each of which is a list of names of splits and Lua patterns applied to -- the decomposed L2 name (with apostrophes and double quotes removed and certain other transformations applied; see -- get_L2_sort_key() in [[Module:headword/page]]), or "true" for the final catch-all subpage (which includes anything -- not beginning with a Latin letter after the transformations are applied; this includes e.g. ǃKung but not 'Are'are, -- which sorts with A, and not Àhàn, which likewise sorts with A). The patterns must be suitable for use with plain -- string functions, not their mw.ustring equivalents. data.mammoth_page_subpage_types = { twos = { {"languages A to L", "^[A-L]"}, {"languages M to Z", true}, }, threes = { {"languages A to I", "^[A-I]"}, {"languages J to Q", "^[J-Q]"}, {"languages R to Z", true}, }, CJK = { {"languages A to C", "^[A-C]"}, -- Translingual and Chinese on one page {"languages D to Z", true}, -- all the remainder (mostly Japanese, Korean, Vietnamese) on the other }, } -- "Mammoth pages" are pages whose entries cannot be housed on a single page because of MediaWiki limits. The key is -- the page and the value is the subpage type, as defined above in `mammoth_page_subpage_types`. data.mammoth_pages = { ["a"] = "twos", -- FIXME: change to threes ["i"] = "twos", ["mammoth page test"] = "twos", -- required for testing purposes - please leave here } return data ntjwhuty1qtiu8f22vww7cvxsvv4x9t मॉड्यूल:headword 828 302137 487589 478586 2026-09-01T17:44:56Z SM7 6218 updating... 487589 Scribunto text/plain local export = {} -- Named constants for all modules used, to make it easier to swap out sandbox versions. local debug_track_module = "Module:debug/track" local en_utilities_module = "Module:en-utilities" local gender_and_number_module = "Module:gender and number" local headword_data_module = "Module:headword/data" local headword_page_module = "Module:headword/page" local links_module = "Module:links" local load_module = "Module:load" local pages_module = "Module:pages" local palindromes_module = "Module:palindromes" local pron_qualifier_module = "Module:pron qualifier" local scripts_module = "Module:scripts" local scripts_data_module = "Module:scripts/data" local script_utilities_module = "Module:script utilities" local script_utilities_data_module = "Module:script utilities/data" local string_utilities_module = "Module:string utilities" local table_module = "Module:table" local utilities_module = "Module:utilities" local concat = table.concat local dump = mw.dumpObject local insert = table.insert local ipairs = ipairs local max = math.max local new_title = mw.title.new local pairs = pairs local require = require local toNFC = mw.ustring.toNFC local toNFD = mw.ustring.toNFD local type = type local ufind = mw.ustring.find local ugmatch = mw.ustring.gmatch local ugsub = mw.ustring.gsub local umatch = mw.ustring.match --[==[ Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==] local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local function contains(...) contains = require(table_module).contains return contains(...) end local function encode_entities(...) encode_entities = require(string_utilities_module).encode_entities return encode_entities(...) end local function extend(...) extend = require(table_module).extend return extend(...) end local function find_best_script_without_lang(...) find_best_script_without_lang = require(scripts_module).findBestScriptWithoutLang return find_best_script_without_lang(...) end local function format_categories(...) format_categories = require(utilities_module).format_categories return format_categories(...) end local function format_genders(...) format_genders = require(gender_and_number_module).format_genders return format_genders(...) end local function format_pron_qualifiers(...) format_pron_qualifiers = require(pron_qualifier_module).format_qualifiers return format_pron_qualifiers(...) end local function full_link(...) full_link = require(links_module).full_link return full_link(...) end local function get_current_L2(...) get_current_L2 = require(pages_module).get_current_L2 return get_current_L2(...) end local function get_link_page(...) get_link_page = require(links_module).get_link_page return get_link_page(...) end local function get_script(...) get_script = require(scripts_module).getByCode return get_script(...) end local function is_palindrome(...) is_palindrome = require(palindromes_module).is_palindrome return is_palindrome(...) end local function language_link(...) language_link = require(links_module).language_link return language_link(...) end local function load_data(...) load_data = require(load_module).load_data return load_data(...) end local function pattern_escape(...) pattern_escape = require(string_utilities_module).pattern_escape return pattern_escape(...) end local function pluralize(...) pluralize = require(en_utilities_module).pluralize return pluralize(...) end local function process_page(...) process_page = require(headword_page_module).process_page return process_page(...) end local function remove_links(...) remove_links = require(links_module).remove_links return remove_links(...) end local function shallow_copy(...) shallow_copy = require(table_module).shallowCopy return shallow_copy(...) end local function tag_text(...) tag_text = require(script_utilities_module).tag_text return tag_text(...) end local function tag_transcription(...) tag_transcription = require(script_utilities_module).tag_transcription return tag_transcription(...) end local function tag_translit(...) tag_translit = require(script_utilities_module).tag_translit return tag_translit(...) end local function trim(...) trim = require(string_utilities_module).trim return trim(...) end local function ulen(...) ulen = require(string_utilities_module).len return ulen(...) end --[==[ Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==] local m_data local function get_data() m_data = load_data(headword_data_module) return m_data end local script_data local function get_script_data() script_data = load_data(scripts_data_module) return script_data end local script_utilities_data local function get_script_utilities_data() script_utilities_data = load_data(script_utilities_data_module) return script_utilities_data end -- If set to true, categories always appear, even in non-mainspace pages local test_force_categories = false -- Add a tracking category to track entries with certain (unusually undesirable) properties. `track_id` is an identifier -- for the particular property being tracked and goes into the tracking page. Specifically, this adds a link in the -- page text to [[Wiktionary:Tracking/headword/TRACK_ID]], meaning you can find all entries with the `track_id` property -- by visiting [[Special:WhatLinksHere/Wiktionary:Tracking/headword/TRACK_ID]]. -- -- If `lang` (a language object) is given, an additional tracking page [[Wiktionary:Tracking/headword/TRACK_ID/CODE]] is -- linked to where CODE is the language code of `lang`, and you can find all entries in the combination of `track_id` -- and `lang` by visiting [[Special:WhatLinksHere/Wiktionary:Tracking/headword/TRACK_ID/CODE]]. This makes it possible to -- isolate only the entries with a specific tracking property that are in a given language. Note that if `lang` -- references at etymology-only language, both that language's code and its full parent's code are tracked. local function track(track_id, lang) local tracking_page = "headword/" .. track_id if lang and lang:hasType("etymology-only") then debug_track{tracking_page, tracking_page .. "/" .. lang:getCode(), tracking_page .. "/" .. lang:getFullCode()} elseif lang then debug_track{tracking_page, tracking_page .. "/" .. lang:getCode()} else debug_track(tracking_page) end return true end local function text_in_script(text, script_code) local sc = get_script(script_code) if not sc then error("Internal error: Bad script code " .. script_code) end local characters = sc.characters local out if characters then text = ugsub(text, "%W", "") out = ufind(text, "[" .. characters .. "]") end if out then return true else return false end end local spacingPunctuation = "[%s%p]+" --[[ List of punctuation or spacing characters that are found inside of words. Used to exclude characters from the regex above. ]] local wordPunc = "-#%%&@־׳״'.·*’་•:᠊" local notWordPunc = "[^" .. wordPunc .. "]+" -- Format a term (either a head term or an inflection term) along with any left or right qualifiers, labels, references -- or customized separator: `part` is the object specifying the term (and `lang` the language of the term), which should -- optionally contain: -- * left qualifiers in `q`, an array of strings; -- * right qualifiers in `qq`, an array of strings; -- * left labels in `l`, an array of strings; -- * right labels in `ll`, an array of strings; -- * references in `refs`, an array either of strings (formatted reference text) or objects containing fields `text` -- (formatted reference text) and optionally `name` and/or `group`; -- * a separator in `separator`, defaulting to " <i>or</i> " if this is not the first term (j > 1), otherwise "". -- `formatted` is the formatted version of the term itself, and `j` is the index of the term. local function format_term_with_qualifiers_and_refs(lang, part, formatted, j) local function part_non_empty(field) local list = part[field] if not list then return nil end if type(list) ~= "table" then error(("Internal error: Wrong type for `part.%s`=%s, should be \"table\""):format(field, dump(list))) end return list[1] end if part_non_empty("q") or part_non_empty("qq") or part_non_empty("l") or part_non_empty("ll") or part_non_empty("refs") then formatted = format_pron_qualifiers { lang = lang, text = formatted, q = part.q, qq = part.qq, l = part.l, ll = part.ll, refs = part.refs, } end local separator = part.separator or j > 1 and " <i>or</i> " -- use "" to request no separator if separator then formatted = separator .. formatted end return formatted end --[==[Return true if the given head is multiword according to the algorithm used in full_headword().]==] function export.head_is_multiword(head) for possibleWordBreak in ugmatch(head, spacingPunctuation) do if umatch(possibleWordBreak, notWordPunc) then return true end end return false end do local function workaround_to_exclude_chars(s) return (ugsub(s, notWordPunc, "\2%1\1")) end --[==[ Add appropriate links to `head`, correctly handling multiword terms. This is intended for multiword terms but can be used for any term if you want links added to single-word terms as well. If you want to only add links to multiword terms, first check that the term is multiword using `head_is_multiword`. If `default` is specified, this will escape colons so that they don't get interpreted as interwiki links. This should generally only be used when `head` is an actual pagename or is taken from a {{para|pagename}} parameter, not when taken from a {{para|head}} parameter. ]==] function export.add_multiword_links(head, default) head = "\1" .. ugsub(head, spacingPunctuation, workaround_to_exclude_chars) .. "\2" if default then head = head :gsub("(\1[^\2]*)\\([:#][^\2]*\2)", "%1\\\\%2") :gsub("(\1[^\2]*)([:#][^\2]*\2)", "%1\\%2") end --Escape any remaining square brackets to stop them breaking links (e.g. "[citation needed]"). head = encode_entities(head, "[]", true, true) --[=[ use this when workaround is no longer needed: head = "[[" .. ugsub(head, WORDBREAKCHARS, "]]%1[[") .. "]]" Remove any empty links, which could have been created above at the beginning or end of the string. ]=] return (head :gsub("\1\2", "") :gsub("[\1\2]", {["\1"] = "[[", ["\2"] = "]]"})) end end local function non_categorizable(full_raw_pagename) return full_raw_pagename:find("^Appendix:Gestures/") or -- Unsupported titles with descriptive names. (full_raw_pagename:find("^Unsupported titles/") and not full_raw_pagename:find("`")) end local function tag_text_and_add_quals_and_refs(data, head, formatted, j) -- Add language and script wrapper. formatted = tag_text(formatted, data.lang, head.sc, "head", nil, j == 1 and data.id or nil) -- Add qualifiers, labels, references and separator. return format_term_with_qualifiers_and_refs(data.lang, head, formatted, j) end -- Format a headword with transliterations. local function format_headword(data) -- Are there non-empty transliterations? local has_translits = false local has_manual_translits = false ------ Format the headwords. ------ local head_parts = {} local unique_head_parts = {} local has_multiple_heads = not not data.heads[2] for j, head in ipairs(data.heads) do if head.tr or head.ts then has_translits = true end if head.tr and head.tr_manual or head.ts then has_manual_translits = true end local formatted -- Apply processing to the headword, for formatting links and such. if head.term:find("[[", nil, true) and head.sc:getCode() ~= "Image" then formatted = language_link{term = head.term, lang = data.lang} else formatted = data.lang:makeDisplayText(head.term, head.sc, true) end local head_part = tag_text_and_add_quals_and_refs(data, head, formatted, j) insert(head_parts, head_part) -- If multiple heads, try to determine whether all heads display the same. To do this we need to effectively -- rerun the text tagging and addition of qualifiers and references, using 1 for all indices. if has_multiple_heads then local unique_head_part if j == 1 then unique_head_part = head_part else unique_head_part = tag_text_and_add_quals_and_refs(data, head, formatted, 1) end unique_head_parts[unique_head_part] = true end end local set_size = 0 if has_multiple_heads then for _ in pairs(unique_head_parts) do set_size = set_size + 1 end end if set_size == 1 then head_parts = head_parts[1] else head_parts = concat(head_parts) end if has_manual_translits then -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/manual-tr]] -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/manual-tr/LANGCODE]] track("manual-tr", data.lang) end ------ Format the transliterations and transcriptions. ------ local translits_formatted if has_translits then local translit_parts = {} for _, head in ipairs(data.heads) do if head.tr or head.ts then local this_parts = {} if head.tr then insert(this_parts, tag_translit(head.tr, data.lang:getCode(), "head", nil, head.tr_manual)) if head.ts then insert(this_parts, " ") end end if head.ts then insert(this_parts, "/" .. tag_transcription(head.ts, data.lang:getCode(), "head") .. "/") end insert(translit_parts, concat(this_parts)) end end translits_formatted = " (" .. concat(translit_parts, " <i>or</i> ") .. ")" local langname = data.lang:getCanonicalName() local transliteration_page = new_title(langname .. " transliteration", "Wiktionary") local saw_translit_page = false if transliteration_page and transliteration_page:getContent() then translits_formatted = " [[Wiktionary:" .. langname .. " transliteration|•]]" .. translits_formatted saw_translit_page = true end -- If data.lang is an etymology-only language and we didn't find a translation page for it, fall back to the -- full parent. if not saw_translit_page and data.lang:hasType("etymology-only") then langname = data.lang:getFullName() transliteration_page = new_title(langname .. " transliteration", "Wiktionary") if transliteration_page and transliteration_page:getContent() then translits_formatted = " [[Wiktionary:" .. langname .. " transliteration|•]]" .. translits_formatted end end else translits_formatted = "" end ------ Paste heads and transliterations/transcriptions. ------ local lemma_gloss if data.gloss then lemma_gloss = ' <span class="ib-content qualifier-content">' .. data.gloss .. '</span>' else lemma_gloss = "" end return head_parts .. translits_formatted .. lemma_gloss end local function format_headword_genders(data, is_varform_only) local retval = "" if data.genders and data.genders[1] then if data.gloss then retval = "," end local pos_for_cat if not data.nogendercat and not is_varform_only then local no_gender_cat = (m_data or get_data()).no_gender_cat if not (no_gender_cat[data.lang:getCode()] or no_gender_cat[data.lang:getFullCode()]) then pos_for_cat = (m_data or get_data()).pos_for_gender_number_cat[data.pos_category:gsub("^reconstructed ", "")] end end local text, cats = format_genders(data.genders, data.lang, pos_for_cat) if cats then extend(data.categories, cats) end retval = retval .. "&nbsp;" .. text end return retval end -- Forward reference local format_inflections local function format_inflection_parts(data, parts) for j, part in ipairs(parts) do if type(part) ~= "table" then part = {term = part} end local partaccel = part.accel local face = part.face or "bold" if face ~= "bold" and face ~= "plain" and face ~= "hypothetical" then error("The face `" .. face .. "` " .. ( (script_utilities_data or get_script_utilities_data()).faces[face] and "should not be used for non-headword terms on the headword line." or "is invalid." )) end -- Here the final part 'or data.nolinkinfl' allows to have 'nolinkinfl=true' -- right into the 'data' table to disable inflection links of the entire headword -- when inflected forms aren't entry-worthy, e.g.: in Vulgar Latin local nolinkinfl = part.face == "hypothetical" or (part.nolink and track("nolink") or part.nolinkinfl) or ( data.nolink and track("nolink") or data.nolinkinfl) local formatted if part.label then -- FIXME: There should be a better way of italicizing a label. As is, this isn't customizable. formatted = "<i>" .. part.label .. "</i>" else -- Convert the term into a full link. Don't show a transliteration here unless enable_auto_translit is -- requested, either at the `parts` level (i.e. per inflection) or at the `data.inflections` level (i.e. -- specified for all inflections). This is controllable in {{head}} using autotrinfl=1 for all inflections, -- or fNautotr=1 for an individual inflection (remember that a single inflection may be associated with -- multiple terms). The reason for doing this is to avoid clutter in headword lines by default in languages -- where the script is relatively straightforward to read by learners (e.g. Greek, Russian), but allow it -- to be enabled in languages with more complex scripts (e.g. Arabic). -- -- FIXME: With nested inflections, should we also respect `enable_auto_translit` at the top level of the -- nested inflections structure? local tr = part.tr or not (parts.enable_auto_translit or data.inflections.enable_auto_translit) and "-" or nil -- FIXME: Temporary errors added 2025-10-03. Remove after a month or so. if part.translit then error("Internal error: Use field `tr` not `translit` for specifying an inflection part translit") end if part.transcription then error("Internal error: Use field `ts` not `transcription` for specifying an inflection part transcription") end local postprocess_annotations if part.inflections then postprocess_annotations = function(infldata) insert(infldata.annotations, format_inflections(data, part.inflections)) end end formatted = full_link( { term = not nolinkinfl and part.term or nil, alt = part.alt or (nolinkinfl and part.term or nil), lang = part.lang or data.lang, sc = part.sc or parts.sc or nil, gloss = part.gloss, pos = part.pos, lit = part.lit, id = part.id, genders = part.genders, tr = tr, ts = part.ts, accel = partaccel or parts.accel, postprocess_annotations = postprocess_annotations, }, face ) end parts[j] = format_term_with_qualifiers_and_refs(part.lang or data.lang, part, formatted, j) end local parts_output if parts[1] then parts_output = (parts.label and " " or "") .. concat(parts) elseif parts.request then parts_output = " <small>[please provide]</small>" insert(data.categories, "Requests for inflections in " .. data.lang:getFullName() .. " entries") else parts_output = "" end local parts_label = parts.label and ("<i>" .. parts.label .. "</i>") or "" return format_term_with_qualifiers_and_refs(data.lang, parts, parts_label .. parts_output, 1) end -- Format the inflections following the headword or nested after a given inflection. Declared local above. function format_inflections(data, inflections) if inflections and inflections[1] then -- Format each inflection individually. for key, infl in ipairs(inflections) do inflections[key] = format_inflection_parts(data, infl) end return concat(inflections, ", ") else return "" end end -- Format the top-level inflections following the headword. Currently this just adds parens around the -- formatted comma-separated inflections in `data.inflections`. local function format_top_level_inflections(data) local result = format_inflections(data, data.inflections) if result ~= "" then return " (" .. result .. ")" else return result end end -- Forward reference local check_red_link_inflections -- Check a single inflection (which consists of a label and zero or more terms, each possibly with nested inflections) -- for red links. If so, insert a red-link category based on `plpos` (the plural part of speech to insert in the -- category), stop further processing, and return true. If no red links found, return false. local function check_red_link_inflection_parts(data, parts, plpos) for _, part in ipairs(parts) do if type(part) ~= "table" then part = {term = part} end local term = part.term if term and not term:find("%[%[") then local stripped_physical_term = get_link_page(term, data.lang, part.sc or parts.sc or nil) if stripped_physical_term then local title = mw.title.new(stripped_physical_term) if title and not title:getContent() then insert(data.categories, data.lang:getFullName() .. " " .. plpos .. " with red links in their headword lines") return true end end end if part.inflections then if check_red_link_inflections(data, part.inflections, plpos) then return true end end end return false end -- Check a set of inflections (each of which describes a single inflection of the term, such as feminine or plural, and -- consists of a label and zero or more terms, each possibly with nested inflections) for red links. If so, insert a -- red-link category based on `plpos` (the plural part of speech to insert in the category), stop further processing, -- and return true. If no red links found, return false. function check_red_link_inflections(data, inflections, plpos) if inflections and inflections[1] then -- Check each inflection individually. for key, infl in ipairs(inflections) do if check_red_link_inflection_parts(data, infl, plpos) then return true end end end return false end -- Check the top-level inflections in `data.inflections`, along with any nested inflections, for red links. If so, -- insert a red-link category based on `plpos` (the plural part of speech to insert in the category), stop further -- processing, and return true. If no red links found, return false. local function check_red_link_inflections_top_level(data, plpos) return check_red_link_inflections(data, data.inflections, plpos) end --[==[ Returns the plural form of `pos`, a raw part of speech input, which could be singular or plural. Irregular plural POS are taken into account (e.g. "kanji" pluralizes to "kanji"). ]==] function export.pluralize_pos(pos) -- Make the plural form of the part of speech return (m_data or get_data()).irregular_plurals[pos] or pos:sub(-1) == "s" and pos or pluralize(pos) end --[==[ Return "lemma" if the given POS is a lemma, "non-lemma form" if a non-lemma form, or nil if unknown. The POS passed in must be in its plural form ("nouns", "prefixes", etc.). If you have a POS in its singular form, call {export.pluralize_pos()} above to pluralize it in a smart fashion that knows when to add "-s" and when to add "-es", and also takes into account any irregular plurals. If `best_guess` is given and the POS is in neither the lemma nor non-lemma list, guess based on whether it ends in " forms"; otherwise, return nil. ]==] function export.pos_lemma_or_nonlemma(plpos, best_guess) local m_headword_data = m_data or get_data() local isLemma = m_headword_data.lemmas -- Is it a lemma category? if isLemma[plpos] then return "lemma" end local plpos_no_recon = plpos:gsub("^reconstructed ", "") if isLemma[plpos_no_recon] then return "lemma" end -- Is it a nonlemma category? local isNonLemma = m_headword_data.nonlemmas if isNonLemma[plpos] or isNonLemma[plpos_no_recon] then return "non-lemma form" end local plpos_no_mut = plpos:gsub("^mutated ", "") if isLemma[plpos_no_mut] or isNonLemma[plpos_no_mut] then return "non-lemma form" elseif best_guess then return plpos:find(" forms$") and "non-lemma form" or "lemma" else return nil end end --[==[ Canonicalize a part of speech as specified in 2= in {{tl|head}}. This checks for POS aliases and non-lemma form aliases ending in 'f', and then pluralizes if the POS term does not have an invariable plural. ]==] function export.canonicalize_pos(pos) -- FIXME: Temporary code to throw an error for alias 'pre' (= preposition) that will go away. if pos == "pre" then -- Don't throw error on 'pref' as it's an alias for "prefix". error("POS 'pre' for 'preposition' no longer allowed as it's too ambiguous; use 'prep'") end -- Likewise for pro = pronoun. if pos == "pro" or pos == "prof" then error("POS 'pro' for 'pronoun' no longer allowed as it's too ambiguous; use 'pron'") end local m_headword_data = m_data or get_data() if m_headword_data.pos_aliases[pos] then pos = m_headword_data.pos_aliases[pos] elseif pos:sub(-1) == "f" then pos = pos:sub(1, -2) pos = (m_headword_data.pos_aliases[pos] or pos) .. " forms" end return export.pluralize_pos(pos) end -- Find and return the maximum index in the array `data[element]` (which may have gaps in it), and initialize it to a -- zero-length array if unspecified. Check to make sure all keys are numeric (other than "maxindex", which is set by -- [[Module:parameters]] for list parameters), all values are strings, and unless `allow_blank_string` is given, -- no blank (zero-length) strings are present. local function init_and_find_maximum_index(data, element, allow_blank_string) local maxind = 0 if not data[element] then data[element] = {} end local typ = type(data[element]) if typ ~= "table" then error(("Internal error: In full_headword(), `data.%s` must be an array but is a %s"):format(element, typ)) end for k, v in pairs(data[element]) do if k ~= "maxindex" then if type(k) ~= "number" then error(("Internal error: Unrecognized non-numeric key '%s' in `data.%s`"):format(k, element)) end if k > maxind then maxind = k end if v then if type(v) ~= "string" then error(("Internal error: For key '%s' in `data.%s`, value should be a string but is a %s"):format(k, element, type(v))) end if not allow_blank_string and v == "" then error(("Internal error: For key '%s' in `data.%s`, blank string not allowed; use 'false' for the default"):format(k, element)) end end end end return maxind end --[==[ -- Add the page to various maintenance categories for the language and the -- whole page. These are placed in the headword somewhat arbitrarily, but -- mainly because headword templates are mandatory for entries (meaning that -- in theory it provides full coverage). -- -- This is provided as an external entry point so that modules which transclude -- information from other entries (such as {{tl|ja-see}}) can take advantage -- of this feature as well, because they are used in place of a conventional -- headword template.]==] do -- Handle any manual sortkeys that have been specified in raw categories -- by tracking if they are the same or different from the automatically- -- generated sortkey, so that we can track them in maintenance -- categories. local function handle_raw_sortkeys(tbl, sortkey, page, lang, lang_cats) sortkey = sortkey or lang:makeSortKey(page.pagename) -- If there are raw categories with no sortkey, then they will be -- sorted based on the default MediaWiki sortkey, so we check against -- that. if tbl == true then if page.raw_defaultsort ~= sortkey then insert(lang_cats, lang:getFullName() .. " terms with non-redundant non-automated sortkeys") end return end local redundant, different for k in pairs(tbl) do if k == sortkey then redundant = true else different = true end end if redundant then insert(lang_cats, lang:getFullName() .. " terms with redundant sortkeys") end if different then insert(lang_cats, lang:getFullName() .. " terms with non-redundant non-automated sortkeys") end return sortkey end function export.maintenance_cats(page, lang, lang_cats, page_cats) extend(page_cats, page.cats) lang = lang:getFull() -- since we are just generating categories local canonical = lang:getCanonicalName() local tbl = page.wikitext_topic_cat[lang:getCode()] local sortkey = nil if tbl then sortkey = handle_raw_sortkeys(tbl, sortkey, page, lang, lang_cats) insert(lang_cats, canonical .. " entries with topic categories using raw markup") end tbl = page.wikitext_langname_cat[canonical] if tbl then handle_raw_sortkeys(tbl, sortkey, page, lang, lang_cats) insert(lang_cats, canonical .. " entries with language name categories using raw markup") end if get_current_L2() ~= canonical then insert(lang_cats, canonical .. " entries with incorrect language header") -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/incorrect language header]] -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/incorrect language header/LANGCODE]] track("incorrect language header", lang) end end end --[==[This is the primary external entry point. {{lua|full_headword(data)}} This is used by {{temp|head}} and various language-specific headword templates (e.g. {{temp|ru-adj}} for Russian adjectives, {{temp|de-noun}} for German nouns, etc.) to display an entire headword line. See [[#Further explanations for full_headword()]] ]==] function export.full_headword(data) -- Prevent data from being destructively modified. data = shallow_copy(data) ------------ 1. Basic checks for old-style (multi-arg) calling convention. ------------ if data.getCanonicalName then error("Internal error: In full_headword(), the first argument `data` needs to be a Lua object (table) of properties, not a language object") end if not data.lang or type(data.lang) ~= "table" or not data.lang.getCode then error("Internal error: In full_headword(), the first argument `data` needs to be a Lua object (table) and `data.lang` must be a language object") end if data.id and type(data.id) ~= "string" then error("Internal error: The id in the data table should be a string.") end ------------ 2. Initialize pagename etc. ------------ local langcode = data.lang:getCode() local full_langcode = data.lang:getFullCode() local langname = data.lang:getCanonicalName() local full_langname = data.lang:getFullName() local raw_pagename = data.pagename local page local m_headword_data = m_data or get_data() if raw_pagename and raw_pagename ~= m_headword_data.pagename then -- for testing, doc pages, etc. -- data.pagename is often set on documentation and test pages through the pagename= parameter of various -- templates, to emulate running on that page. Having a large number of such test templates on a single -- page often leads to timeouts, because we fetch and parse the contents of each page in turn. However, -- we don't really need to do that and can function fine without fetching and parsing the contents of a -- given page, so turn off content fetching/parsing (and also setting the DEFAULTSORT key through a parser -- function, which is *slooooow*) in certain namespaces where test and documentation templates are likely to -- be found and where actual content does not live (User, Template, Module). local actual_namespace = m_headword_data.page.namespace local no_fetch_content = actual_namespace == "User" or actual_namespace == "Template" or actual_namespace == "Module" page = process_page(raw_pagename, no_fetch_content) else page = m_headword_data.page end local namespace = page.namespace if data.altform then -- Temporary tracking for use of old altform= track("altform", data.lang) end local is_varform_only = data.var and data.var ~= "both" local is_varform_both = data.var == "both" ------------ 3. Initialize `data.heads` table; if old-style, convert to new-style. ------------ if type(data.heads) == "table" and type(data.heads[1]) == "table" then -- new-style if data.translits or data.transcriptions then error("Internal error: In full_headword(), if `data.heads` is new-style (array of head objects), `data.translits` and `data.transcriptions` cannot be given") end else -- convert old-style `heads`, `translits` and `transcriptions` to new-style local maxind = max( init_and_find_maximum_index(data, "heads"), init_and_find_maximum_index(data, "translits", true), init_and_find_maximum_index(data, "transcriptions", true) ) for i = 1, maxind do data.heads[i] = { term = data.heads[i], tr = data.translits[i], ts = data.transcriptions[i], } end end -- Make sure there's at least one head. if not data.heads[1] then data.heads[1] = {} end ------------ 4. Initialize and validate `data.categories` and `data.whole_page_categories`, and determine `pos_category` if not given, and add basic categories. ------------ init_and_find_maximum_index(data, "categories") init_and_find_maximum_index(data, "whole_page_categories") local pos_category_already_present = false if data.categories[1] then local escaped_langname = pattern_escape(full_langname) local matches_lang_pattern = "^" .. escaped_langname .. " " for _, cat in ipairs(data.categories) do -- Does the category begin with the language name? If not, tag it with a tracking category. if not cat:find(matches_lang_pattern) then -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/no lang category]] -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/no lang category/LANGCODE]] track("no lang category", data.lang) end end -- If `pos_category` not given, try to infer it from the first specified category. If this doesn't work, we -- throw an error below. if not data.pos_category and data.categories[1]:find(matches_lang_pattern) then data.pos_category = data.categories[1]:gsub(matches_lang_pattern, "") -- Optimization to avoid inserting category already present. pos_category_already_present = true end end if not data.pos_category then error("Internal error: `data.pos_category` not specified and could not be inferred from the categories given in " .. "`data.categories`. Either specify the plural part of speech in `data.pos_category` " .. "(e.g. \"proper nouns\") or ensure that the first category in `data.categories` is formed from the " .. "language's canonical name plus the plural part of speech (e.g. \"Norwegian Bokmål proper nouns\")." ) end -- Insert a category at the beginning for the part of speech unless it's already present or `data.noposcat` given. if not pos_category_already_present and not data.noposcat and not is_varform_only then local pos_category = full_langname .. " " .. data.pos_category -- FIXME: [[User:Theknightwho]] Why is this special case here? Please add an explanatory comment. if pos_category ~= "Translingual Han characters" then insert(data.categories, 1, pos_category) end end -- Try to determine whether the part of speech refers to a lemma or a non-lemma form; if we can figure this out, -- add an appropriate category. local postype = export.pos_lemma_or_nonlemma(data.pos_category) if not postype then -- We don't know what this category is, so tag it with a tracking category. -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos]] -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/LANGCODE]] track("unrecognized pos", data.lang) -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/POS]] -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/POS/LANGCODE]] track("unrecognized pos/pos/" .. data.pos_category, data.lang) elseif not data.noposcat and not is_varform_only then insert(data.categories, 1, full_langname .. " " .. postype .. "s") end -- Categorize variant forms into 'variant lemmas' or 'variant non-lemma forms'. Originally proposed in -- [[Wiktionary:Beer parlour/2024/June#Decluttering the altform mess]] as 'alternative forms'; renamed in -- [[Wiktionary:Beer parlour/2026/July#Renaming the "alternative forms" categories]]. if (is_varform_only or is_varform_both) and postype then insert(data.categories, 1, full_langname .. " variant " .. postype .. "s") end ------------ 5. Create a default headword, and add links to multiword page names. ------------ -- Determine if this is an "anti-asterisk" term, i.e. an attested term in a language that must normally be -- reconstructed. local is_anti_asterisk = data.heads[1].term and data.heads[1].term:find("^!!") local lang_reconstructed = data.lang:hasType("reconstructed") if is_anti_asterisk then if not lang_reconstructed then error("Anti-asterisk feature (head= beginning with !!) can only be used with reconstructed languages") end lang_reconstructed = false end -- Determine if term is reconstructed local is_reconstructed = namespace == "Reconstruction" or lang_reconstructed -- Create a default headword based on the pagename, which is determined in -- advance by the data module so that it only needs to be done once. local default_head = page.pagename -- Add links to multi-word page names when appropriate if not (is_reconstructed or data.nolinkhead) then local no_links = m_headword_data.no_multiword_links if not (no_links[langcode] or no_links[full_langcode]) and export.head_is_multiword(default_head) then default_head = export.add_multiword_links(default_head, true) end end if is_reconstructed then default_head = "*" .. default_head end ------------ 6. Check the namespace against the language type. ------------ if namespace == "" then if lang_reconstructed then error("Entries in " .. langname .. " must be placed in the Reconstruction: namespace") elseif data.lang:hasType("appendix-constructed") then error("Entries in " .. langname .. " must be placed in the Appendix: namespace") end elseif namespace == "Citations" or namespace == "Thesaurus" then error("Headword templates should not be used in the " .. namespace .. ": namespace.") end ------------ 7. Fill in missing values in `data.heads`. ------------ -- True if any script among the headword scripts has spaces in it. local any_script_has_spaces = false -- True if any term has a redundant head= param. local has_redundant_head_param = false for _, head in ipairs(data.heads) do ------ 7a. If missing head, replace with default head. if not head.term then head.term = default_head elseif head.term == default_head then has_redundant_head_param = true elseif is_anti_asterisk and head.term == "!!" then -- If explicit head=!! is given, it's an anti-asterisk term and we fill in the default head. head.term = "!!" .. default_head elseif head.term:find("^[!?]$") then -- If explicit head= just consists of ! or ?, add it to the end of the default head. head.term = default_head .. head.term end head.term_no_initial_bang_bang = is_anti_asterisk and head.term:sub(3) or head.term if is_reconstructed then local head_term = head.term if head_term:find("%[%[") then head_term = remove_links(head_term) end if head_term:sub(1, 1) ~= "*" then error("The headword '" .. head_term .. "' must begin with '*' to indicate that it is reconstructed.") end end ------ 7b. Try to detect the script(s) if not provided. If a per-head script is provided, that takes precedence, ------ otherwise fall back to the overall script if given. If neither given, autodetect the script. local auto_sc = data.lang:findBestScript(head.term) if ( auto_sc:getCode() == "None" and find_best_script_without_lang(head.term):getCode() ~= "None" ) then insert(data.categories, full_langname .. " terms in nonstandard scripts") end if not (head.sc or data.sc) then -- No script code given, so use autodetected script. head.sc = auto_sc else if not head.sc then -- Overall script code given. head.sc = data.sc end -- Track uses of sc parameter. if head.sc:getCode() == auto_sc:getCode() then track("redundant script code", data.lang) if not data.no_script_code_cat then insert(data.categories, full_langname .. " terms with redundant script codes") end else track("non-redundant manual script code", data.lang) if not data.no_script_code_cat then insert(data.categories, full_langname .. " terms with non-redundant manual script codes") end end end -- If using a discouraged character sequence, add to maintenance category. if head.sc:hasNormalizationFixes() == true then local composed_head = toNFC(head.term) if head.sc:fixDiscouragedSequences(composed_head) ~= composed_head then insert(data.whole_page_categories, "Pages using discouraged character sequences") end end any_script_has_spaces = any_script_has_spaces or head.sc:hasSpaces() ------ 7c. Create automatic transliterations for any non-Latin headwords without manual translit given ------ (provided automatic translit is available, e.g. not in Persian or Hebrew). -- Make transliterations head.tr_manual = nil -- Try to generate a transliteration if necessary if head.tr == "-" then head.tr = nil else local notranslit = m_headword_data.notranslit if not (notranslit[langcode] or notranslit[full_langcode]) and head.sc:isTransliterated() then head.tr_manual = not not head.tr local text = head.term_no_initial_bang_bang if not data.lang:link_tr(head.sc) then text = remove_links(text) end local automated_tr = data.lang:transliterate(text, head.sc) if automated_tr then local manual_tr = head.tr if manual_tr then if remove_links(manual_tr) == remove_links(automated_tr) then insert(data.categories, full_langname .. " terms with redundant transliterations") else insert(data.categories, full_langname .. " terms with non-redundant manual transliterations") end end if not manual_tr then head.tr = automated_tr end end -- There is still no transliteration? -- Add the entry to a cleanup category. if not head.tr then head.tr = "<small>transliteration needed</small>" -- FIXME: No current support for 'Request for transliteration of Classical Persian terms' or similar. -- Consider adding this support in [[Module:category tree/poscatboiler/data/entry maintenance]]. insert(data.categories, "Requests for transliteration of " .. full_langname .. " terms") else -- Otherwise, trim it. head.tr = trim(head.tr) end end end -- Link to the transliteration entry for languages that require this. if head.tr and data.lang:link_tr(head.sc) then head.tr = full_link{ term = head.tr, lang = data.lang, sc = get_script("Latn"), tr = "-" } end end ------------ 8. Maybe tag the title with the appropriate script code, using the `display_title` mechanism. ------------ -- Assumes that the scripts in "toBeTagged" will never occur in the Reconstruction namespace. -- (FIXME: Don't make assumptions like this, and if you need to do so, throw an error if the assumption is violated.) -- Avoid tagging ASCII as Hani even when it is tagged as Hani in the headword, as in [[check]]. The check for ASCII -- might need to be expanded to a check for any Latin characters and whitespace or punctuation. local display_title -- Where there are multiple headwords, use the script for the first. This assumes the first headword is similar to -- the pagename, and that headwords that are in different scripts from the pagename aren't first. This seems to be -- about the best we can do (alternatively we could potentially do script detection on the pagename). local dt_script = data.heads[1].sc local dt_script_code = dt_script:getCode() local page_non_ascii = namespace == "" and not page.pagename:find("^[%z\1-\127]+$") local unsupported_pagename, unsupported = page.full_raw_pagename:gsub("^Unsupported titles/", "") if unsupported == 1 and page.unsupported_titles[unsupported_pagename] then display_title = 'Unsupported titles/<span class="' .. dt_script_code .. '">' .. page.unsupported_titles[unsupported_pagename] .. '</span>' elseif page_non_ascii and m_headword_data.toBeTagged[dt_script_code] or (dt_script_code == "Jpan" and (text_in_script(page.pagename, "Hira") or text_in_script(page.pagename, "Kana"))) or (dt_script_code == "Kore" and text_in_script(page.pagename, "Hang")) then display_title = '<span class="' .. dt_script_code .. '">' .. page.full_raw_pagename .. '</span>' -- Keep Han entries region-neutral in the display title. elseif page_non_ascii and (dt_script_code == "Hant" or dt_script_code == "Hans") then display_title = '<span class="Hani">' .. page.full_raw_pagename .. '</span>' elseif namespace == "Reconstruction" then local matched display_title, matched = ugsub( page.full_raw_pagename, "^(Reconstruction:[^/]+/)(.+)$", function(before, term) return before .. tag_text(term, data.lang, dt_script) end ) if matched == 0 then display_title = nil end end -- FIXME: Generalize this. -- If the current language uses Aran (Nastaliq), e.g. Urdu, and there's more than one language on the page, don't -- set the display title because we don't want Nastaliq for terms that also exist in other languages that don't -- display in Nastaliq (e.g. Arabic or Persian). Because the word "Urdu" occurs near the end of the alphabet, Urdu -- fonts tend to override the fonts of other languages. FIXME: This is checking for more than one language on the -- page but instead needs to check if there are any languages using scripts other than Aran. if dt_script_code == "Aran" and page.L2_list.n > 1 then display_title = nil end if display_title then mw.getCurrentFrame():callParserFunction( "DISPLAYTITLE", display_title ) end ------------ 9. Insert additional categories. ------------ if data.force_cat_output then -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/force cat output]] track("force cat output") end if has_redundant_head_param then if not data.no_redundant_head_cat then -- This is not the right way to go about this; too many exceptions and problems due to language-specific headword -- handling customization. If we want this, it should be opt-in by a given language passing in the default headword. -- insert(data.categories, full_langname .. " terms with redundant head parameter") end end -- If the first head is multiword (after removing links), maybe insert into "LANG multiword terms". if not data.nomultiwordcat and not is_varform_only and any_script_has_spaces and postype == "lemma" then local no_multiword_cat = m_headword_data.no_multiword_cat if not (no_multiword_cat[langcode] or no_multiword_cat[full_langcode]) then -- Check for spaces or hyphens, but exclude prefixes and suffixes. -- Use the pagename, not the head= value, because the latter may have extra -- junk in it, e.g. superscripted text that throws off the algorithm. local no_hyphen = m_headword_data.hyphen_not_multiword_sep -- Exclude hyphens if the data module states that they should for this language. local checkpattern = (no_hyphen[langcode] or no_hyphen[full_langcode]) and ".[%s፡]." or ".[%s%-፡]." local is_multiword = umatch(page.pagename, checkpattern) if is_multiword and not non_categorizable(page.full_raw_pagename) then insert(data.categories, full_langname .. " multiword terms") elseif not is_multiword then local long_word_threshold = m_headword_data.long_word_thresholds[langcode] or m_headword_data.long_word_thresholds[full_langcode] if long_word_threshold and ulen(page.pagename) >= long_word_threshold then insert(data.categories, "Long " .. full_langname .. " words") end end end end -- Determine whether to insert a category 'LANGNAME POS in SCRIPT'. If there are multiple heads, we may need to check -- each head, as the heads may (theoretically) have different scripts. local default_sccat = m_headword_data.default_sccat if data.sccat or not is_varform_only and (default_sccat[langcode] or langcode ~= full_langcode and default_sccat[full_langcode]) then local function needs_sccat(sccat_entry, sc) if sccat_entry == true or not sccat_entry then return sccat_entry end if type(sccat_entry) == "table" then local in_list = contains(sccat_entry, sc:getCode()) if sccat_entry[1] == "not" then in_list = not in_list end return in_list end return nil end for _, head in ipairs(data.heads) do -- First check the `sccat` specified at the {{head}} level. local this_needs_sccat = needs_sccat(data.sccat, head.sc) -- If that wasn't given, check the default sccat at the language level for the lang code. if this_needs_sccat == nil and not is_varform_only then this_needs_sccat = needs_sccat(default_sccat[langcode], head.sc) end -- If that wasn't found and the lang code is an etym code, check the default sccat at the parent language level. if this_needs_sccat == nil and not is_varform_only and langcode ~= full_langcode then this_needs_sccat = needs_sccat(default_sccat[full_langcode], head.sc) end if this_needs_sccat then insert(data.categories, full_langname .. " " .. data.pos_category .. " in " .. head.sc:getDisplayForm(data.lang)) end end end -- Reconstructed terms often use weird combinations of scripts and realistically aren't spelled so much as notated. if namespace ~= "Reconstruction" and not is_varform_only then -- Map from languages to a string containing the characters to ignore when considering whether a term has -- multiple written scripts in it. Typically these are Greek or Cyrillic letters used for their phonetic -- values. local characters_to_ignore = { ["aaq"] = "αάὰ", -- Penobscot (Algonquian) ["acy"] = "δθ", -- Cypriot Arabic ["aez"] = "β", -- Aeka (Trans-New Guinea) ["anc"] = "γ", -- Ngas (Chadic/Afroasiatic) ["aou"] = "χ", -- A'ou (Kra-Dai) ["art-blk"] = "ч", -- Bolak (conlang) ["awg"] = "β", -- Anguthimri (Pama-Nyungan) ["az"] = "ь", -- Azerbaijani (Turkic; Yañalif Latin spelling, c. 1928 - 1938) ["ba"] = "ь", -- Bashkir (Turkic; Yañalif Latin spelling, c. 1928 - 1938) ["bhp"] = "β", -- Bima (Austronesian) ["bjz"] = "β", -- Baruga (Trans-New Guinea) ["byk"] = "θ", -- Biao (Kra-Dai) ["cdy"] = "θ", -- Chadong (Kra-Dai) ["chp"] = "θ", -- Chipewyan (Athabaskan) ["cjh"] = "χ", -- Upper Chehalis (Salishan) ["clm"] = "χ", -- Klallam (Salishan) ["col"] = "χ", -- Colombia-Wenatchi (Salishan) ["coo"] = "χθ", -- Comox (Salishan) ["crx"] = "θ", -- Carrier (Athabaskan) ["ets"] = "θ", -- Yekhee (Edoid/Niger-Congo) ["ett"] = "χ", -- Etruscan (isolate; in romanizations) ["fla"] = "χ", -- Montana Salish (Salishan) ["grt"] = "་", -- Garo (South Asian Sino-Tibetan) ["gmw-gts"] = "χ", -- Gottscheerish (Bavarian variant spoken in Slovenia) ["hur"] = "χθ", -- Halkomelem (Salishan) ["itc-psa"] = "f", -- Pre-Samnite (Italic; normally written in Greek) ["izh"] = "ь", -- Ingrian (Finnic) ["kic"] = "θ", -- Kickapoo (Algonquian) ["kk"] = "ь", -- Kazakh (Turkic; Yañalif Latin spelling, c. 1928 - 1938) ["ky"] = "ь", -- Kyrgyz (Turkic; Yañalif Latin spelling, c. 1928 - 1938) ["lil"] = "χ", -- Lillooet (Salishan) ["lsi"] = "ꓹ", -- Lashi (Lolo-Burmese/Sino-Tibetan; represents a glottal stop) ["mhz"] = "β", -- Mor (Austronesian) ["mqn"] = "β", -- Moronene (Austronesian) ["neg"]= "ӡā", -- Negidal (Tungusic; normally in Cyrillic) ["oka"] = "χ", -- Okanagan (Salishan) ["ole"] = "θ", -- Olekha (Sino-Tibetan) ["oui"] = "γβ", -- Old Uyghur (Turkic; FIXME: others? E.g. Greek delta (δ)?) ["pox"] = "χ", -- Polabian (West Slavic) ["rif"] = "ε", -- Tarifit (Berber) ["rom"] = "Θθ", -- Romani (Indic: International Standard; two different thetas???) ["rpn"] = "β", -- Repanbitip (Austronesian) ["sah"] = "ь", -- Yakut (Turkic; 1929 - 1939 Latin spelling) ["sit-jap"] = "χ", -- Japhug (Sino-Tibetan) ["sjw"] = "θ", -- Shawnee (Algonquian) ["squ"] = "χ", -- Squamish (Salishan) ["str"] = "χθ", -- Saanich (Salishan) ["teh"] = "χ", -- Tehuelche (Chonan; spoken in Argentina) ["tep"] = "η", -- Tepecano (Uto-Aztecan) ["thp"] = "χ", -- Thompson (Salishan) ["tk"] = "ь", -- Turkmen (Turkic; Yañalif Latin spelling, c. 1928 - 1938) ["tt"] = "ь", -- Kazakh (Turkic; Yañalif Latin spelling, c. 1928 - 1938) ["twa"] = "χ", -- Twana (Salishan) ["wbl"] = "ы", -- Wakhi (Iranian) ["xbc"] = "ϸ", -- Bactrian (Iranian; represents š; normally written in Greek) ["yha"] = "θ", -- Baha (Kra-Dai) ["za"] = "зч", -- Zhuang (Tai/Kra-Dai); 1957-1982 alphabet used two Cyrillic letters (as well as some others like -- ƃ, ƅ, ƨ, ɯ and ɵ that look like Cyrillic or Greek but are actually Latin) ["zlw-slv"] = "χђћ", -- Slovincian (West Slavic; FIXME: χ is Greek, the other two are Cyrillic, but I'm not sure -- the currect characters are being chosen in the entry names) ["zng"] = "θ", -- Mang (Mon-Khmer) ["ztp"] = "θ", -- Loxicha Zapotec (Zapotecan) } -- Determine how many real scripts are found in the pagename, where we exclude symbols and such. We exclude -- scripts whose `character_category` is false as well as Zmth (mathematical notation symbols), which has a -- category of "Mathematical notation symbols". When counting scripts, we need to elide language-specific -- variants because e.g. Beng and as-Beng have slightly different characters but we don't want to consider them -- two different scripts (e.g. [[এৰ]] has two characters which are detected respectively as Beng and as-Beng). local seen_scripts = {} local num_seen_scripts = 0 local num_loops = 0 local canon_pagename = page.pagename local ch_to_ignore = characters_to_ignore[full_langcode] if ch_to_ignore then canon_pagename = ugsub(canon_pagename, "[" .. ch_to_ignore .. "]", "") end while true do if canon_pagename == "" or num_seen_scripts >= 2 or num_loops >= 10 then break end -- Make sure we don't get into a loop checking the same script over and over again; happens with e.g. [[ᠪᡳ]] num_loops = num_loops + 1 local pagename_script = find_best_script_without_lang(canon_pagename, "None only as last resort") local script_chars = pagename_script.characters if not script_chars then -- we are stuck; this happens with None break end local script_code = pagename_script:getCode() local replaced canon_pagename, replaced = ugsub(canon_pagename, "[" .. script_chars .. "]", "") if ( replaced and script_code ~= "Zmth" and (script_data or get_script_data())[script_code] and script_data[script_code].character_category ~= false ) then script_code = script_code:gsub("^.-%-", "") if not seen_scripts[script_code] then seen_scripts[script_code] = true num_seen_scripts = num_seen_scripts + 1 end end end if num_seen_scripts > 1 then insert(data.categories, full_langname .. " terms written in multiple scripts") end end -- Categorise for unusual characters. Takes into account combining characters, so that we can categorise for characters with diacritics that aren't encoded as atomic characters (e.g. U̠). These can be in two formats: single combining characters (i.e. character + diacritic(s)) or double combining characters (i.e. character + diacritic(s) + character). Each can have any number of diacritics. local standard = data.lang:getStandardCharacters() if not is_varform_only and standard and not non_categorizable(page.full_raw_pagename) then local function char_category(char) local specials = { ["#"] = "number sign", ["("] = "parentheses", [")"] = "parentheses", ["<"] = "angle brackets", [">"] = "angle brackets", ["["] = "square brackets", ["]"] = "square brackets", ["_"] = "underscore", ["{"] = "braces", ["|"] = "vertical line", ["}"] = "braces", ["ß"] = "ẞ", ["\205\133"] = "", -- this is UTF-8 for U+0345 ( ͅ) ["\239\191\189"] = "replacement character", } char = toNFD(char) :gsub(".[\128-\191]*", function(m) local new_m = specials[m] new_m = new_m or m:uupper() return new_m end) return toNFC(char) end if full_langcode ~= "hi" and full_langcode ~= "lo" then local standard_chars_scripts = {} for _, head in ipairs(data.heads) do standard_chars_scripts[head.sc:getCode()] = true end -- Iterate over the scripts, in case there is more than one (as they can have different sets of standard characters). for code in pairs(standard_chars_scripts) do local sc_standard = data.lang:getStandardCharacters(code) if sc_standard then if page.pagename_len > 1 then local explode_standard = {} local function explode(char) explode_standard[char] = true return "" end local sc_standard_exploded = ugsub(sc_standard, page.comb_chars.combined_double, explode) -- The following is correct; it relies on side-effecing the explode_standard[] table. ugsub(sc_standard_exploded, page.comb_chars.combined_single, explode):gsub(".[\128-\191]*", explode) local num_cat_inserted for char in pairs(page.explode_pagename) do if not explode_standard[char] then if char:find("[0-9]") then if not num_cat_inserted then insert(data.categories, full_langname .. " terms spelled with numbers") num_cat_inserted = true end elseif ufind(char, page.emoji_pattern) then insert(data.categories, full_langname .. " terms spelled with emoji") else local upper = char_category(char) if not explode_standard[upper] then char = upper end insert(data.categories, full_langname .. " terms spelled with " .. char) end end end end -- If a diacritic doesn't appear in any of the standard characters, also categorise for it generally. sc_standard = toNFD(sc_standard) for diacritic in ugmatch(page.decompose_pagename, page.comb_chars.diacritics_single) do if not umatch(sc_standard, diacritic) then insert(data.categories, full_langname .. " terms spelled with ◌" .. diacritic) end end for diacritic in ugmatch(page.decompose_pagename, page.comb_chars.diacritics_double) do if not umatch(sc_standard, diacritic) then insert(data.categories, full_langname .. " terms spelled with ◌" .. diacritic .. "◌") end end end end -- Ancient Greek, Hindi and Lao handled the old way for now, as their standard chars still need to be converted to the new format (because there are a lot of them). elseif ulen(page.pagename) ~= 1 then for character in ugmatch(page.pagename, "([^" .. standard .. "])") do local upper = char_category(character) if not umatch(upper, "[" .. standard .. "]") then character = upper end insert(data.categories, full_langname .. " terms spelled with " .. character) end end end if not is_varform_only and data.heads[1].sc:isSystem("alphabet") then local pagename, i = page.pagename:ulower(), 2 while umatch(pagename, "(%a)" .. ("%1"):rep(i)) do i = i + 1 insert(data.categories, full_langname .. " terms with " .. i .. " consecutive instances of the same letter") end end -- Categorise for palindromes if not is_varform_only and not data.nopalindromecat and namespace ~= "Reconstruction" and ulen(page.pagename) > 2 -- FIXME: Use of first script here seems hacky. What is the clean way of doing this in the presence of -- multiple scripts? and is_palindrome(page.pagename, data.lang, data.heads[1].sc) then insert(data.categories, full_langname .. " palindromes") end if namespace == "" and not lang_reconstructed then for _, head in ipairs(data.heads) do if page.full_raw_pagename ~= get_link_page(remove_links(head.term), data.lang, head.sc) then -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/pagename spelling mismatch]] -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/pagename spelling mismatch/LANGCODE]] track("pagename spelling mismatch", data.lang) break end end end -- Add red link category if called for and we're not a "large" page, where such checks are disabled. if data.checkredlinks and not m_headword_data.large_pages[m_headword_data.pagename] then local plposcat = type(data.checkredlinks) == "string" and data.checkredlinks or data.pos_category check_red_link_inflections_top_level(data, plposcat) end -- Add to various maintenance categories. export.maintenance_cats(page, data.lang, data.categories, data.whole_page_categories) ------------ 10. Format and return headwords, genders, inflections and categories. ------------ -- Format and return all the gathered information. This may add more categories (e.g. gender/number categories), -- so make sure we do it before evaluating `data.categories`. local text = '<span class="headword-line">' .. format_headword(data) .. format_headword_genders(data, is_varform_only) .. format_top_level_inflections(data) .. '</span>' -- Language-specific categories. local cats = format_categories( data.categories, data.lang, data.sort_key, page.encoded_pagename, data.force_cat_output or test_force_categories, data.heads[1].sc ) -- Language-agnostic categories. local whole_page_cats = format_categories( data.whole_page_categories, nil, "-" ) return text .. cats .. whole_page_cats end return export p8f4xnw025vscd6xaol2cl9u60nwkq1 मॉड्यूल:headword/data 828 302138 487582 479715 2026-09-01T17:15:27Z SM7 6218 अंग्रेजी अनुसार अद्यतन 487582 Scribunto text/plain local headword_page_module = "Module:headword/page" local list_to_set = require("Module:table").listToSet local data = {} ------ 1. Lists which are converted into sets. ------ --[==[ var: Large pages where we disable label tracking, red link checking and similar. ]==] data.large_pages = list_to_set { -- pages that consistently hit timeouts "a", -- pages that sometimes hit timeouts "A", "baba", "de", "e", "i", "lima", "o", "u", "и", "山", "子", "月", "一", "人", } --[==[ var: Map from singular to plural, and from plural to itself, for recognized parts of speech with irregular plurals. Most of these are invariable plurals, e.g. `kanji` is its own plural; but we also have `mora` plural `morae`. ]==] data.irregular_plurals = list_to_set({ "cmavo", "cmene", "fu'ivla", "gismu", "Han tu", "hanja", "hanzi", "jyutping", "kana", "kanji", "lujvo", "phrasebook", "pinyin", "rafsi", }, function(_, item) return item end) local irregular_plurals = data.irregular_plurals -- Irregular non-zero plurals AND any regular plurals where the singular ends in "s", -- because the module assumes that inputs ending in "s" are plurals. The singular and -- plural both need to be added, as the module will generate a default plural if -- the input doesn't match a key in this table. for sg, pl in next, { mora = "morae" } do irregular_plurals[sg], irregular_plurals[pl] = pl, pl end --[==[ var: Recognized lemmas. If the part of speech in {{tl|head}} is set to one of these or its singular equivalent, the category 'LANG lemmas' will automatically be added. If the part of speech is not a singular or plural lemma or non-lemma form and is not an abbreviation that expands to a recognized lemma or non-lemma form, the page will be added to various tracking categories: * [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos]] * [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/LANG]] * [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/pos/POS]] * [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/pos/POS/LANG]] ]==] data.lemmas = list_to_set{ "abbreviations", "संक्षेपाक्षर", "acronyms", "लघुरूप", "adjectives", "विशेषण", "adnominals", "adpositions", "adverbs", "क्रिया-विशेषण", "affixes", "ambipositions", "articles", "circumfixes", "circumpositions", "classifiers", "cmavo", "cmavo clusters", "cmene", "combining forms", "conjunctions", "संयोजक", "counters", "determiners", "diacritical marks", "डायक्रिटिक चिह्न", "digraphs", "equative adjectives", "fu'ivla", "gismu", "Han characters", "Han tu", "hanja", "hanzi", "ideophones", "idioms", "infixes", "initialisms", "iteration marks", "interfixes", "interjections", "विस्मयादिबोधक", "kana", "kanji", "letters", "वर्ण", "ligatures", "logograms", "lujvo", "morae", "morphemes", "non-constituents", "nouns", "संज्ञाएँ", "numbers", "संख्याएँ", "numeral symbols", "अंक चिह्न", "numerals", "अंक", "particles", "phrases", "उद्गार", "postpositions", "परसर्ग", "postpositional phrases", "predicatives", "prefixes", "उपसर्ग", "prepositional phrases", "prepositions", "preverbs", "pronominal adverbs", "pronouns", "सर्वनाम", "proper nouns", "नामवाचक संज्ञाएँ", "proverbs", "punctuation marks", "relatives", "roots", "धातुएँ", "stems", "प्रत्यय", "suffixes", "syllables", "अक्षर", "symbols", "चिह्न", "verbs", "क्रियाएँ", } --[==[ var: Recognized non-lemma forms. If the part of speech in {{tl|head}} is set to one of these or its singular equivalent, the category 'LANG non-lemma forms' will automatically be added. If the part of speech is not a singular or plural lemma or non-lemma form and is not an abbreviation that expands to a recognized lemma or non-lemma form, the page will be added to various tracking categories; see the documentation of `data.lemmas`. ]==] data.nonlemmas = list_to_set{ "active participle forms", "active participles", "adjectival participles", "adjective case forms", "adjective forms", "adjective feminine forms", "adjective plural forms", "adverb forms", "adverbial participles", "agent participles", "article forms", "circumfix forms", "combined forms", "comparative adjective forms", "comparative adjectives", "comparative adverb forms", "comparative adverbs", "conjunction forms", "contractions", "converbs", "determiner comparative forms", "determiner forms", "determiner superlative forms", "diminutive nouns", "elative adjectives", "equative adjective forms", "equative adjectives", "future participles", "gerunds", "infinitive forms", "infinitives", "interjection forms", "jyutping", "misspellings", "negative participles", "nominal participles", "noun case forms", "noun construct forms", "noun dual forms", "noun forms", "noun paucal forms", "noun plural forms", "noun possessive forms", "noun singulative forms", "numeral forms", "participles", "participle forms", "particle forms", "passive participles", "past active participles", "past adverbial participles", "past participles", "past participle forms", "past passive participles", "perfect active participles", "perfect participles", "perfect passive participles", "pinyin", "plurals", "postposition forms", "prefix forms", "preposition contractions", "preposition forms", "prepositional pronouns", "present active participles", "present adverbial participles", "present participles", "present passive participles", "preverb forms", "pronoun forms", "pronoun possessive forms", "proper noun forms", "proper noun plural forms", "rafsi", "romanizations", "root forms", "singulatives", "suffix forms", "superlative adjective forms", "superlative adjectives", "superlative adverb forms", "superlative adverbs", "verb forms", "verbal nouns", } --[==[ var: List of languages that will not have links to separate parts of the headword. ]==] data.no_multiword_links = list_to_set{ "zh", } --[==[ var: List of languages that will not have `LANG multiword terms` categories added. There are various reasons why languages are in this list: (a) words are written without spaces between them; (b) syllables are written with spaces between them; (c) variant reconstructions are notated with a tilde surrounded by spaces; (d) the language is a sign language, where pagenames are multiword descriptions of the gesture(s) required to make an individual sign; (e) some other weirdnesses. ]==] data.no_multiword_cat = list_to_set{ -------- Languages without spaces between words (sometimes spaces between phrases) -------- "blt", -- Tai Dam "ja", -- Japanese "khb", -- Lü "km", -- Khmer "lo", -- Lao "mnw", -- Mon "my", -- Burmese "nan", -- Min Nan (some words in Latin script; hyphens between syllables) "nan-hbl", -- Hokkien (some words in Latin script; hyphens between syllables) "nod", -- Northern Thai "ojp", -- Old Japanese "shn", -- Shan "sou", -- Southern Thai "tdd", -- Tai Nüa "th", -- Thai "tts", -- Isan "twh", -- Tai Dón "txg", -- Tangut "zh", -- Chinese (all varieties with Chinese characters) "zkt", -- Khitan -------- Languages with spaces between syllables -------- "ahk", -- Akha "aou", -- A'ou "atb", -- Zaiwa "byk", -- Biao "cdy", -- Chadong --"duu", -- Drung; not sure --"hmx-pro", -- Proto-Hmong-Mien --"hnj", -- Green Hmong; not sure "huq", -- Tsat "ium", -- Iu Mien --"lis", -- Lisu; not sure "mtq", -- Muong --"mww", -- White Hmong; not sure "onb", -- Lingao --"sit-gkh", -- Gokhy; not sure --"swi", -- Sui; not sure "tbq-lol-pro", -- Proto-Loloish "tdh", -- Thulung "ukk", -- Muak Sa-aak "vi", -- Vietnamese "yig", -- Wusa Nasu "zng", -- Mang -------- Languages with ~ with surrounding spaces used to separate variants -------- "mkh-ban-pro", -- Proto-Bahnaric "sit-pro", -- Proto-Sino-Tibetan; listed above -------- Other weirdnesses -------- "mul", -- Translingual; gestures, Morse code, etc. "aot", -- Atong (India); bullet is a letter -------- All sign languages -------- "ads", "aed", "aen", "afg", "ase", "asf", "asp", "asq", "asw", "bfi", "bfk", "bog", "bqn", "bqy", "bvl", "bzs", "cds", "csc", "csd", "cse", "csf", "csg", "csl", "csn", "csq", "csr", "doq", "dse", "dsl", "ecs", "esl", "esn", "eso", "eth", "fcs", "fse", "fsl", "fss", "gds", "gse", "gsg", "gsm", "gss", "gus", "hab", "haf", "hds", "hks", "hos", "hps", "hsh", "hsl", "icl", "iks", "ils", "inl", "ins", "ise", "isg", "isr", "jcs", "jhs", "jls", "jos", "jsl", "jus", "kgi", "kvk", "lbs", "lls", "lsl", "lso", "lsp", "lst", "lsy", "lws", "mdl", "mfs", "mre", "msd", "msr", "mzc", "mzg", "mzy", "nbs", "ncs", "nsi", "nsl", "nsp", "nsr", "nzs", "okl", "pgz", "pks", "prl", "prz", "psc", "psd", "psg", "psl", "pso", "psp", "psr", "pys", "rms", "rsl", "rsm", "sdl", "sfb", "sfs", "sgg", "sgx", "slf", "sls", "sqk", "sqs", "ssp", "ssr", "svk", "swl", "syy", "tse", "tsm", "tsq", "tss", "tsy", "tza", "ugn", "ugy", "ukl", "uks", "vgt", "vsi", "vsl", "vsv", "xki", "xml", "xms", "ygs", "ysl", "zib", "zsl", } --[==[ var: List of languages where a hyphen is not considered a word separator for the `LANG multiword terms` category. There are numerous reasons why languages are in this list; by each language should be listed the reason for inclusion. ]==] data.hyphen_not_multiword_sep = list_to_set{ "akk", -- Akkadian; hyphens between syllables "akl", -- Aklanon; hyphens for mid-word glottal stops "ber-pro", -- Proto-Berber; morphemes separated by hyphens "ceb", -- Cebuano; hyphens for mid-word glottal stops "cnk", -- Khumi Chin; hyphens used in single words "cpi", -- Chinese Pidgin English; Chinese-derived words with hyphens between syllables "de", -- German; too many false positives "esx-esk-pro", -- hyphen used to separate morphemes "fi", -- Finnish; hyphen used to separate components in compound words if the final and initial vowels match, respectively "gd", -- Scottish Gaelic; too many false positives like [[a-chianaibh]], [[a-nìos]], [[an-dè]] and other adverbs in a- and an- "hil", -- Hiligaynon; hyphens for mid-word glottal stops "hnn", -- Hanunoo; too many false positives "ilo", -- Ilocano; hyphens for mid-word glottal stops "kne", -- Kankanaey; hyphens for mid-word glottal stops "lcp", -- Western Lawa; dash as syllable joiner "lwl", -- Eastern Lawa; dash as syllable joiner "mfa", -- Pattani Malay in Thai script; dash as syllable joiner "mkh-vie-pro", -- Proto-Vietic; morphemes separated by hyphens "msb", -- Masbatenyo; too many false positives "tl", -- Tagalog; too many false positives "war", -- Waray-Waray; too many false positives "yo", -- Yoruba; hyphens used to show lengthened nasal vowels } --[==[ var: List of languages that will not have `LANG masculine nouns` and similar categories added. Generally, these languages are lacking gender but use the gender field for other purposes. (This is a massive hack and should be changed.) ]==] data.no_gender_cat = list_to_set{ -- Languages without gender but which use the gender field for other purposes "ja", "th", } --[==[ var: List of languages where [[Module:headword]] should not attempt to generate a transliteration even if the term is written in a non-Latin script. FIXME: Notate reasons why each language is in this list. ]==] data.notranslit = list_to_set{ "ams", "az", "bbc", "bug", "cdo", "cia", "cjm", "cjy", "cmn", "cnp", "cpi", "cpx", "csp", "czh", "czo", "gan", "hak", "hnm", "hsn", "ja", "kzg", "lad", "ltc", "luh", "lzh", "mnp", "ms", "mul", "mvi", "nan", "nan-dat", "nan-hbl", "nan-hlh", "nan-lnx", "nan-tws", "nan-zhe", "nan-zsh", "och", "oj", "okn", "ryn", "rys", "ryu", "sh", "sjc", "tgt", "th", "tkn", "tly", "txg", "und", "vi", "wuu", "xug", "yoi", "yox", "yue", "za", "zh", "zhx-sic", "zhx-tai", } --[==[ var: Languages where we track all direct uses of {{tl|head}} in place of a language-specific template, such as {{tl|en-head}}, {{tl|hi-head}}, {{tl|sa-head}}, {{tl|tl-head}}. ]==] data.track_head_template = list_to_set{ -- "en", -- when the time comes? "hi", "sa", "tl", } --[==[ var: List of script codes for which a script-tagged display title will be added. ]==] data.toBeTagged = list_to_set{ "Ahom", "Arab", "fa-Arab", "Aran", "Armi", "Armn", "Avst", "Bali", "Bamu", "Batk", "Beng", "as-Beng", "Bopo", "Brah", "Brai", "Bugi", "Buhd", "Cakm", "Cans", "Cari", "Cham", "Cher", "Copt", "Cprt", "Cyrl", "Cyrs", "Deva", "Dsrt", "Egyd", "Egyp", "Ethi", "Geok", "Geor", "Glag", "Goth", "Grek", "Polyt", "Gujr", "Guru", "Hang", "Hani", "Hano", "Hebr", "Hira", "Hluw", "Ital", "Java", "Kali", "Kana", "Khar", "Khmr", "Knda", "Kthi", "Lana", "Laoo", "Latn", "Latf", "Latg", "pjt-Latn", "Lepc", "Limb", "Linb", "Lisu", "Lyci", "Lydi", "Mand", "Mani", "Marc", "Merc", "Mero", "Mlym", "Mong", "mnc-Mong", "sjo-Mong", "xwo-Mong", "Mtei", "Mymr", "Narb", "Nkoo", "Nshu", "Ogam", "Olck", "Orkh", "Orya", "Osma", "Ougr", "Palm", "Phag", "Phli", "Phlv", "Phnx", "Plrd", "Prti", "Rjng", "Runr", "Samr", "Sarb", "Saur", "Sgnw", "Shaw", "Shrd", "Sinh", "Sora", "Sund", "Sylo", "Syrc", "Tagb", "Tale", "Talu", "Taml", "Tang", "Tavt", "Telu", "Tfng", "Tglg", "Thaa", "Thai", "Tibt", "Ugar", "Vaii", "Xpeo", "Xsux", "Yiii", "Zmth", "Zsym", "Ipach", "Music", "Rumin", } --[==[ var: Parts of speech which will not be categorised in categories like `English terms spelled with É` if the term is the character in question (e.g. the letter entry for English [[é]]). This contrasts with entries like the French adjective [[m̂]], which is a one-letter word spelled with the letter. ]==] data.pos_not_spelled_with_self = list_to_set{ "diacritical marks", "Han characters", "Han tu", "hanja", "hanzi", "iteration marks", "kana", "kanji", "letters", "ligatures", "logograms", "morae", "numeral symbols", "numerals", "punctuation marks", "syllables", "symbols", } ------ 2. Lists not converted into sets. ------ --[==[ var: List of languages that will default to `sccat` being true, i.e. categories like `LANG POS in SCRIPT script` will automatically be generated. This can be overridden using {{para|sccat|0}} in {{tl|head}} or setting `sccat` to {false} in Lua. If the value on the right-hand side is {true}, such categories will be generated for all scripts. If {false}, no categories will be generated (this is useful for etym languages that override the spec of their parent). If a list of scripts, such categories will be generated only for the specified scripts. If a list of scripts where the first element is {"not"}, such categories will be generated for all scripts ''except'' the specified scripts. ]==] data.default_sccat = { ["af"] = {"not", "Latn"}, ["az"] = {"not", "Latn"}, ["inc-apa"] = true, ["inc-ash"] = true, ["kfr"] = true, ["ks"] = true, ["mr"] = true, ["mwr"] = true, ["inc-oaw"] = true, ["inc-ohi"] = true, ["omr"] = true, ["inc-opa"] = true, ["phr"] = true, ["pi"] = true, ["pra"] = true, ["sa"] = true, ["skr"] = true, ["sd"] = true, ["yi"] = {"not", "Hebr"}, } --[==[ var: Recognized aliases for parts of speech (param 2=). Key is the short form and value is the canonical singular (not pluralized) form. It is singular so the same table can be used in [[Module:form of]] for the {{para|p}}/{{para|POS}} param and [[Module:links]] for the pos= param. Note that any part of speech, abbreviated or not, can be suffixed with `f` to generate the corresponding non-lemma form part of speech, such as `adjf`, `af` or `adjectivef` for `adjective form`, and `nounf` or `nf` for `noun form`. This expansion happens even when it does not make sense for the given part of speech (e.g. `pclf` expands to `particle form` and `symf` expands to `symbol form`), and currently also, at least in [[Module:headword]] (but not [[Module:links]]), even if the part before the `f` is not a recognized part of speech or abbreviation (hence `nerf` expands to `ner form`). ]==] data.pos_aliases = { a = "adjective", adj = "adjective", adv = "adverb", art = "article", aug = "augmentative", cls = "classifier", compadj = "comparative adjective", compadv = "comparative adverb", compdet = "comparative determiner", comppron = "comparative pronoun", conj = "conjunction", contr = "contraction", conv = "converb", det = "determiner", dim = "diminutive", infin = "infinitive", -- not inf, which is ambiguous due to infixes int = "interjection", interj = "interjection", intj = "interjection", n = "noun", -- the next two support Algonquian languages; see also vii/vai/vti/vta below na = "animate noun", ni = "inanimate noun", num = "numeral", part = "participle", pastpart = "past participle", pastptcp = "past participle", pcl = "particle", phr = "phrase", pn = "proper noun", postp = "postposition", pref = "prefix", prep = "preposition", prepphr = "prepositional phrase", prespart = "present participle", presptcp = "present participle", pron = "pronoun", prop = "proper noun", proper = "proper noun", propn = "proper noun", ptcp = "participle", rom = "romanization", roman = "romanization", romanisation = "romanization", romanisations = "romanization", suf = "suffix", supadj = "superlative adjective", supadv = "superlative adverb", supdet = "superlative determiner", suppron = "superlative pronoun", sym = "symbol", v = "verb", vb = "verb", vi = "intransitive verb", vm = "modal verb", vt = "transitive verb", -- the next four support Algonquian languages vii = "inanimate intransitive verb", vai = "animate intransitive verb", vti = "transitive inanimate verb", vta = "transitive animate verb", } --[==[ var: Map of parts of speech for which categories like `German masculine nouns` or `Russian imperfective verbs` will be generated if the headword is of the appropriate gender/number. The map is used to canonicalize parts of speech for categorization purposes; specifically, proper nouns categorizes like nouns. ]==] data.pos_for_gender_number_cat = { ["संज्ञाएँ"] = "संज्ञाएँ", ["नामवाचक संज्ञाएँ"] = "nouns", ["suffixes"] = "प्रत्यय", -- We include verbs because impf and pf are valid "genders". ["क्रियाएँ"] = "क्रियायें", } --[==[ var: Lower limit for a "long" word in a particular language. Used to categorize terms into e.g. [[:Category:Long English words]] automatically. Languages with no mapping here do not get categorized. ]==] data.long_word_thresholds = { ["af"] = 20, ["bg"] = 20, ["cy"] = 25, ["de"] = 20, ["en"] = 25, ["es"] = 20, ["fr"] = 20, ["ka"] = 20, ["sv"] = 20, ["tl"] = 25, } ------ 3. Page-wide processing (so that it only needs to be done once per page). ------ data.page = require(headword_page_module).process_page() -- Set some page properties directly on `data` for ease of use. data.pagename = data.page.pagename data.encoded_pagename = data.page.encoded_pagename return data 6wwgl2bxsgf3v056oizmh9a0ve8uabm मॉड्यूल:headword/templates 828 302139 487580 477932 2026-09-01T16:49:18Z SM7 6218 अंग्रेजी अनुसार अद्यतन 487580 Scribunto text/plain local export = {} local debug_track_module = "Module:debug/track" local headword_module = "Module:headword" local headword_data_module = "Module:headword/data" local parameters_module = "Module:parameters" local yesno_module = "Module:yesno" local insert = table.insert local require = require local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local function process_params(...) process_params = require(parameters_module).process return process_params(...) end local function track(page) debug_track("headword/templates/" .. page) return true end local function get_args(frame) local boolean = {type = "boolean"} local boolean_list_allow_holes = {type = "boolean", list = true, allow_holes = true} local list_allow_holes = {list = true, allow_holes = true} return process_params(frame:getParent().args, { [1] = {required = true, type = "language", template_default = "und"}, sc = {type = "script"}, sort = true, [2] = {required = true, template_default = "nouns"}, sccat = boolean, noposcat = boolean, nomultiwordcat = boolean, nogendercat = boolean, nopalindromecat = boolean, nolinkhead = boolean, -- Don't track uses of this template for the purpose of finding direct calls to {{head}}. -- Useful for templates that wrap {{tl|head}}. notrackuses = boolean, autotrinfl = boolean, var = true, checkredlinks = true, cat2 = true, cat3 = true, cat4 = true, pagename = true, head = list_allow_holes, image = true, id = true, tr = list_allow_holes, ts = list_allow_holes, gloss = true, g = {list = true, type = "genders", flatten = true}, ["g\1qual"] = {list = true, allow_holes = true, replaced_by = false, instead = "use <q:...> or <l:...> inline modifier on a gender"}, [3] = list_allow_holes, ["f\1accel-form"] = list_allow_holes, ["f\1accel-translit"] = list_allow_holes, ["f\1accel-lemma"] = list_allow_holes, ["f\1accel-lemma-translit"] = list_allow_holes, ["f\1accel-gender"] = list_allow_holes, ["f\1accel-nostore"] = boolean_list_allow_holes, ["f\1request"] = list_allow_holes, ["f\1alt"] = list_allow_holes, ["f\1lang"] = {list = true, allow_holes = true, type = "language"}, ["f\1sc"] = {list = true, allow_holes = true, type = "script"}, ["f\1id"] = list_allow_holes, ["f\1tr"] = list_allow_holes, ["f\1ts"] = list_allow_holes, ["f\1t"] = list_allow_holes, ["f\1lit"] = list_allow_holes, ["f\1pos"] = list_allow_holes, ["f\1ng"] = list_allow_holes, ["f\1g"] = {list = true, allow_holes = true, type = "genders"}, ["f\1q"] = {list = true, allow_holes = true, type = "qualifier"}, ["f\1qq"] = {list = true, allow_holes = true, type = "qualifier"}, ["f\1qual"] = {list = true, allow_holes = true, replaced_by = false, instead = "use fNq= or fNl="}, ["f\1l"] = {list = true, allow_holes = true, type = "labels"}, ["f\1ll"] = {list = true, allow_holes = true, type = "labels"}, ["f\1ref"] = {list = true, allow_holes = true, type = "references"}, ["f\1autotr"] = boolean_list_allow_holes, ["f\1nolink"] = boolean_list_allow_holes, }) end function export.head_t(frame) local m_headword = require(headword_module) local args = get_args(frame) -- Get language and script information local data = {} data.lang = args[1] data.sc = args.sc data.sccat = args.sccat data.sort_key = args.sort data.heads = args.head data.image = args.image data.pagename = args.pagename data.id = args.id data.translits = args.tr data.transcriptions = args.ts data.gloss = args.gloss data.genders = args.g -- TODO should throw an error if data.heads gets overwritten if data.image then data.heads = {"[[File:" .. data.image .. "|class=skin-invert-image]]"} end -- This shouldn't really happen. for i = 1, args.head.maxindex do if not args.head[i] then track("head-with-holes") end end -- Variant forms (lemmas or non-lemma forms) if args.var then data.var = require(yesno_module)(args.var, args.var) end -- Part-of-speech category local pos_category = args[2] data.noposcat = args.noposcat -- Check for headword aliases and then pluralize if the POS term does not have an invariable plural. data.pos_category = m_headword.canonicalize_pos(pos_category) -- Track all direct uses of {{head}} for certain languages that have a {{XX-head}} template that should be -- used instead. Examples: {{en-head}}, {{sa-head}}, {{hi-head}}, {{tl-head}}, etc. if not args.notrackuses then local langcode = data.lang:getCode() local langfullcode = data.lang:getFullCode() if mw.loadData(headword_data_module).track_head_template[langfullcode] then track(langcode) track(langcode .. "/" .. data.pos_category) if langcode ~= langfullcode then track(langfullcode) track(langfullcode .. "/" .. data.pos_category) end end end -- Additional categories. local categories = {} data.whole_page_categories = {} data.nomultiwordcat = args.nomultiwordcat data.nogendercat = args.nogendercat data.nopalindromecat = args.nopalindromecat -- FIXME: add a minimum_index spec to [[Module:parameters]] list specs, so -- that `cat` can be changed to a list parameter starting at index 2. if args.cat2 then insert(categories, data.lang:getFullName() .. " " .. args.cat2) end if args.cat3 then insert(categories, data.lang:getFullName() .. " " .. args.cat3) end if args.cat4 then insert(categories, data.lang:getFullName() .. " " .. args.cat4) end data.categories = categories if args.checkredlinks then data.checkredlinks = require(yesno_module)(args.checkredlinks, args.checkredlinks) end -- Headword linking data.nolinkhead = args.nolinkhead -- Inflected forms data.inflections = {enable_auto_translit = args.autotrinfl} local forms = args[3] local n = forms.maxindex / 2 for i = 1, n + n % 1 do local infl_part = { label = forms[i * 2 - 1], accel = args["faccel-form"][i] and { form = args["faccel-form"][i], translit = args["faccel-translit"][i], lemma = args["faccel-lemma"][i], lemma_translit = args["faccel-lemma-translit"][i], gender = args["faccel-gender"][i], nostore = args["faccel-nostore"][i], } or nil, request = args.frequest[i], enable_auto_translit = args.fautotr[i], } local form = { term = forms[i * 2], alt = args.falt[i], genders = args.fg[i], id = args.fid[i], lang = args.flang[i], nolinkinfl = args.fnolink[i], q = args.fq[i], qq = args.fqq[i], l = args.fl[i], ll = args.fll[i], refs = args.fref[i], sc = args.fsc[i], tr = args.ftr[i], ts = args.fts[i], gloss = args.ft[i], lit = args.flit[i], pos = args.fpos[i], ng = args.fng[i], } -- If no term or alt is given, then the label is shown alone. if form.term or form.alt then insert(infl_part, form) end if infl_part.label == "or" then -- Append to the previous inflection part, if one exists if #infl_part > 0 and data.inflections[1] then insert(data.inflections[#data.inflections], form) end elseif infl_part.label then -- Add a new inflection part insert(data.inflections, infl_part) end end return m_headword.full_headword(data) end function export.canonicalize_pos(frame) local iargs = process_params(frame.args, { [1] = {required = true}, }) return require(headword_module).canonicalize_pos(iargs[1]) end return export 5vszegxurqbvbqyoopsgo6g7edtgq1c साँचा:head 10 302140 487588 465078 2026-09-01T17:41:41Z SM7 6218 टेम्परेरी 487588 wikitext text/x-wiki <includeonly>{{#invoke:headword/templates|head_t}}<!-- --></includeonly><noinclude>{{head|und|nouns}}</noinclude> 5xz9y1iewy6p90lmwa6t94q95lf20ok 487634 487588 2026-09-01T19:09:49Z SM7 6218 [[Special:Contributions/SM7|SM7]] ([[User talk:SM7|वार्ता]]) का सम्पादन [[User:AryamanA|AryamanA]] के अंतिम अवतरण पर पूर्ववत किया 465078 wikitext text/x-wiki {{#invoke:headword/templates|head_t}}<!-- --><noinclude>{{documentation}}</noinclude> mnijyycw1o0umzevso3nmh9of9bnye2 487635 487634 2026-09-01T19:10:11Z SM7 6218 good 487635 wikitext text/x-wiki <includeonly>{{#invoke:headword/templates|head_t}}<!-- --></includeonly><noinclude>{{head|und|nouns}}{{documentation}}</noinclude> akjc34wkcxijofwsgfubqlbnq1w4fqs मॉड्यूल:etymology/templates 828 302145 487665 479113 2026-09-01T20:49:34Z SM7 6218 updating... 487665 Scribunto text/plain local export = {} local require_when_needed = require("Module:require when needed") local get_current_L2 = require_when_needed("Module:pages", "get_current_L2") local get_lang_by_name = require_when_needed("Module:languages", "getByCanonicalName") local is_content_page = require_when_needed("Module:pages", "is_content_page") local process_params = require_when_needed("Module:parameters", "process") local trim = mw.text.trim local lower = mw.ustring.lower local etymology_module = "Module:etymology" local headword_data_module = "Module:headword/data" local etymology_specialized_module = "Module:etymology/specialized" local parameter_utilities_module = "Module:parameter utilities" -- For testing local force_cat = false local allowed_conjs = {"and", "or", ",", "/", "~", ";"} -- Sinitic lects (Mandarin, Cantonese, Hokkien, etc.) are full languages, but Chinese entries sit -- under a single ==Chinese== L2, while romanization entries (pinyin, jyutping, pe̍h-ōe-jī) have lect -- L2s, and content is often shared between them. Contact languages (Chinese-based creoles and mixed -- languages) have their own L2s and are excluded. local function is_sinitic(lang) return lang:inFamily("zhx") and not lang:inFamily("qfa-cnt") end local content_page local function is_content_page_cached() if content_page == nil then content_page = is_content_page(mw.title.getCurrentTitle()) end return content_page end -- Throw an error if `lang` (the language of the entry) doesn't match -- the L2 header that the template is invoked under. local function check_lang_matches_L2(lang, nocat) if nocat or not lang or lang:getCode() == "und" or (lang.hasType and lang:hasType("family")) then return end local headword_data = mw.loadData(headword_data_module) if headword_data.large_pages[headword_data.pagename] then return end if not is_content_page_cached() then return end local current_L2 = get_current_L2() if not current_L2 then return end local full_name = lang:getFullName() if full_name == current_L2 then return end -- Accept any Sinitic language under any Sinitic L2. if is_sinitic(lang) then local L2_lang = get_lang_by_name(current_L2) if L2_lang and is_sinitic(L2_lang) then return end end local lang_desc = lang:getCode() .. " (" .. lang:getCanonicalName() .. ")" if lang:getFullCode() ~= lang:getCode() then lang_desc = lang_desc .. ", an etymology-only language whose full language is " .. lang:getFullCode() .. " (" .. full_name .. ")" end error("Language '" .. lang_desc .. "' does not match the L2 header (" .. current_L2 .. ").") end local function parse_etym_args(parent_args, base_params, has_dest_lang) local m_param_utils = require(parameter_utilities_module) local param_mods = m_param_utils.construct_param_mods { {group = {"link", "q", "l", "ref"}}, } local sourcearg, termarg if has_dest_lang then sourcearg, termarg = 2, 3 else sourcearg, termarg = 1, 2 end local terms, args = m_param_utils.parse_term_with_inline_modifiers_and_separate_params { params = base_params, param_mods = param_mods, raw_args = parent_args, termarg = termarg, track_module = "etymology", lang = function(args) return args[sourcearg][#args[sourcearg]] end, sc = "sc", -- Don't do this, doesn't seem to make sense. -- parse_lang_prefix = true, make_separate_g_into_list = true, splitchar = ",", subitem_param_handling = "last", } -- If term param 3= is empty, there will be no terms in terms.terms. To facilitate further code and for -- compatibility,, insert one. It will display as <small>[Term?]</small>. if not terms.terms[1] then terms.terms[1] = { lang = args[sourcearg][#args[sourcearg]], sc = args.sc, } end return terms.terms, args end function export.parse_2_lang_args(parent_args, has_text, no_family) local boolean = {type = "boolean"} local params = { [1] = { required = true, type = "language", default = "und" }, [2] = { required = true, sublist = true, type = "language", family = not no_family, default = "und" }, [3] = true, [4] = {alias_of = "alt"}, [5] = {alias_of = "t"}, ["senseid"] = true, ["nocat"] = boolean, ["sort"] = true, ["sourceconj"] = true, ["conj"] = {set = allowed_conjs, default = ","}, } if has_text then params["notext"] = boolean params["nocap"] = boolean end local terms, args = parse_etym_args(parent_args, params, "has dest lang") check_lang_matches_L2(args[1], args.nocat) return terms, args end -- Implementation of deprecated {{etyl}}. Provided to make histories more legible. function export.etyl(frame) local params = { [1] = {required = true, type = "language", default = "und"}, [2] = {type = "language", default = "hi"}, ["sort"] = {}, } -- Empty language means English, but "-" means no language. Yes, confusing... local args = frame:getParent().args if args[2] and trim(args[2]) == "-" then params[2] = nil args = process_params({ [1] = args[1], ["sort"] = args.sort }, params) else args = process_params(args, params) end check_lang_matches_L2(args[2]) return require(etymology_module).format_source { lang = args[2], source = args[1], sort_key = args.sort, force_cat = force_cat, } end -- Implementation of {{derived}}/{{der}}. function export.derived(frame) local parent_args = frame:getParent().args local terms, args = export.parse_2_lang_args(parent_args) return require(etymology_module).format_derived { lang = args[1], sources = args[2], terms = terms, sort_key = args.sort, nocat = args.nocat, sourceconj = args.sourceconj, conj = args.conj, template_name = "derived", force_cat = force_cat, } end -- Implementation of {{borrowed}}/{{bor}}. function export.borrowed(frame) local parent_args = frame:getParent().args local terms, args = export.parse_2_lang_args(parent_args) return require(etymology_module).format_borrowed { lang = args[1], sources = args[2], terms = terms, sort_key = args.sort, nocat = args.nocat, sourceconj = args.sourceconj, conj = args.conj, force_cat = force_cat, } end function export.inherited(frame) local parent_args = frame:getParent().args local terms, args = export.parse_2_lang_args(parent_args) local sources = args[2] if sources[2] then -- Because this doesn't really make sense. error("[[Template:inherited]] doesn't support multiple comma-separated sources") end return require(etymology_module).format_inherited { lang = args[1], terms = terms, sort_key = args.sort, nocat = args.nocat, conj = args.conj, force_cat = force_cat, } end function export.cognate(frame) local params = { [1] = { required = true, sublist = true, type = "language", family = true, default = "und" }, [2] = true, [3] = {alias_of = "alt"}, [4] = {alias_of = "t"}, sourceconj = true, ["conj"] = {set = allowed_conjs, default = ","}, sort = true, } local parent_args = frame:getParent().args local terms, args = parse_etym_args(parent_args, params, false) return require(etymology_module).format_cognate { sources = args[1], terms = terms, sort_key = args.sort, sourceconj = args.sourceconj, conj = args.conj, force_cat = force_cat, } end function export.noncognate(frame) return export.cognate(frame) end -- Supports various specialized types of borrowings, according to `frame.args.bortype`: -- "learned" = {{lbor}}/{{learned borrowing}} -- "semi-learned" = {{slbor}}/{{semi-learned borrowing}} -- "orthographic" = {{obor}}/{{orthographic borrowing}} -- "unadapted" = {{ubor}}/{{unadapted borrowing}} -- "calque" = {{cal}}/{{calque}} -- "partial-calque" = {{pcal}}/{{partial calque}} -- "semantic-loan" = {{sl}}/{{semantic loan}} -- "transliteration" = {{translit}}/{{transliteration}} -- "phono-semantic-matching" = {{psm}}/{{phono-semantic matching}} function export.specialized_borrowing(frame) local parent_args = frame:getParent().args local terms, args = export.parse_2_lang_args(parent_args, "has text") local m_etymology_specialized = require(etymology_specialized_module) return m_etymology_specialized.specialized_borrowing { bortype = frame.args.bortype, lang = args[1], sources = args[2], terms = terms, sort_key = args.sort, nocap = args.nocap, notext = args.notext, nocat = args.nocat, sourceconj = args.sourceconj, conj = args.conj, senseid = args.senseid, force_cat = force_cat, } end -- Implementation of miscellaneous templates such as {{abbrev}}, {{back-formation}}, {{clipping}}, {{ellipsis}}, -- {{rebracketing}} and {{reduplication}} that have a single associated term. function export.misc_variant(frame) local iparams = { ["ignore-params"] = true, text = {required = true}, oftext = true, cat = {list = true}, -- allow and compress holes conj = true, } local iargs = process_params(frame.args, iparams) local boolean = {type = "boolean"} local params = { [1] = {required = true, type = "language", default = "und"}, [2] = true, [3] = {alias_of = "alt"}, [4] = {alias_of = "t"}, nocap = boolean, -- should be processed in the template itself notext = boolean, nocat = boolean, conj = {set = allowed_conjs}, sort = true, } -- |ignore-params= parameter to module invocation specifies -- additional parameter names to allow in template invocation, separated by -- commas. They must consist of ASCII letters or numbers or hyphens. local ignore_params = iargs["ignore-params"] if ignore_params then ignore_params = trim(ignore_params) if not ignore_params:match("^[%w%-,]+$") then error("Invalid characters in |ignore-params=: " .. ignore_params:gsub("[%w%-,]+", "")) end for param in ignore_params:gmatch("[%w%-]+") do if params[param] then error("Duplicate param |" .. param .. " in |ignore-params=: already specified in params") end params[param] = true end end local m_param_utils = require(parameter_utilities_module) local param_mods = m_param_utils.construct_param_mods { {group = {"link", "q", "l", "ref"}}, } local parent_args = frame:getParent().args local terms, args = m_param_utils.parse_term_with_inline_modifiers_and_separate_params { params = params, param_mods = param_mods, raw_args = parent_args, termarg = 2, track_module = "etymology", -- Don't set lang here as we want to know whether there was a lang prefix or not. sc = "sc", parse_lang_prefix = true, allow_multiple_lang_prefixes = true, make_separate_g_into_list = true, splitchar = ",", subitem_param_handling = "last", } check_lang_matches_L2(args[1], args.nocat) return require(etymology_module).format_misc_variant { lang = args[1], notext = args.notext, text = iargs.text, oftext = iargs.oftext, terms = terms.terms, sort_key = args.sort, conj = args.conj or iargs.conj or "और", nocat = args.nocat, cats = iargs.cat, force_cat = force_cat, } end -- Implementation of miscellaneous templates such as {{doublet}} that can take multiple terms. Doesn't handle {{blend}} -- or {{univerbation}}, which display + signs between elements and use compound_like in [[Module:affix/templates]]. function export.misc_variant_multiple_terms(frame) local iparams = { text = {required = true}, oftext = true, cat = {list = true}, -- allow and compress holes conj = true, } local iargs = process_params(frame.args, iparams) local boolean = {type = "boolean"} local params = { [1] = {required = true, type = "language", template_default = "und"}, [2] = {list = true, allow_holes = true}, nocap = boolean, -- should be processed in the template itself notext = boolean, nocat = boolean, conj = {set = allowed_conjs}, sort = true, } local m_param_utils = require(parameter_utilities_module) local param_mods = m_param_utils.construct_param_mods { -- We want to require an index for all params. {default = true, require_index = true}, {group = {"link", "q", "l", "ref"}}, } local parent_args = frame:getParent().args local terms, args = m_param_utils.parse_list_with_inline_modifiers_and_separate_params { params = params, param_mods = param_mods, raw_args = parent_args, termarg = 2, parse_lang_prefix = true, allow_multiple_lang_prefixes = true, track_module = "etymology-templates-doublet", disallow_custom_separators = true, -- For compatibility, we need to not skip completely unspecified items. It is common, for example, to do -- {{suffix|lang||foo}} to generate "+ -foo". dont_skip_items = true, -- Don't set lang here as we want to know whether there was a lang prefix or not. sc = "sc.default", } check_lang_matches_L2(args[1], args.nocat) return require(etymology_module).format_misc_variant { lang = args[1], notext = args.notext, text = iargs.text, oftext = iargs.oftext, terms = terms, sort_key = args.sort, conj = args.conj or iargs.conj or "and", nocat = args.nocat, cats = iargs.cat, force_cat = force_cat, } end -- Implementation of miscellaneous templates such as {{unknown}} that have no associated terms. do local function get_args(frame) local boolean = {type = "boolean"} local params = { [1] = {required = true, type = "language", default = "und"}, ["title"] = true, ["nocap"] = boolean, -- should be processed in the template itself ["notext"] = boolean, ["nocat"] = boolean, ["sort"] = true, } if frame.args.title2_alias then params[2] = {alias_of = "title"} end local args = process_params(frame:getParent().args, params) check_lang_matches_L2(args[1], args.nocat) return args end function export.misc_variant_no_term(frame) local args = get_args(frame) return require(etymology_module).format_misc_variant_no_term { lang = args[1], notext = args.notext, title = args.title or frame.args.text, nocat = args.nocat, cat = frame.args.cat, sort_key = args.sort, force_cat = force_cat, } end -- This function works similarly to misc_variant_no_term(), but with some automatic linking to the glossary in -- `title`. function export.onomatopoeia(frame) local args = get_args(frame) local title = args.title if title and (lower(title) == "imitative" or lower(title) == "imitation") then title = "[[विक्षनरी:शब्दावली#imitative|" .. title .. "]]" end return require(etymology_module).format_misc_variant_no_term { lang = args[1], notext = args.notext, title = title or frame.args.text, nocat = args.nocat, cat = frame.args.cat, sort_key = args.sort, force_cat = force_cat, } end end return export 9vldx6vg4q3rdw922l2938iuwjiadgt मॉड्यूल:utilities/data 828 302146 487618 477420 2026-09-01T18:41:11Z SM7 6218 updating... 487618 Scribunto text/plain local data = {} -- Namespaces which format_categories will allow: (main), Appendix, Thesaurus, Citations, Reconstruction data.category_namespaces = require("Module:table").listToSet{0, 100, 110, 114, 118} -- Script that should be applied to links in categories. data.catfix_scripts = { ["ab"] = "Cyrl", ["ae"] = "Avst", ["ar"] = "Arab", ["ary"] = "Arab", ["be"] = "Cyrl", ["cmn"] = "Hani", ["cu"] = "Cyrs", ["de"] = "Latn", ["el"] = "Grek", ["en"] = "Latn", ["fa"] = "Arab", ["grc"] = "Polyt", ["he"] = "Hebr", ["hi"] = "Deva", ["hu"] = "Latn", ["ja"] = "Jpan", ["ka"] = "Geor", ["ko"] = "Kore", ["mr"] = "Deva", ["nan-hbl"] = "Hani", ["orv"] = "Cyrs", ["ro"] = "Latn", ["ru"] = "Cyrl", ["sa"] = "Deva", ["sq"] = "Latn", ["syl"] = "Sylo", ["xfa"] = "Ital", ["yue"] = "Hani", ["zh"] = "Hani", ["zle-ono"] = "Cyrs", ["zle-ort"] = "Cyrs", --[[ [""] = "", ]] } return data 5r3vjfz59oyil3lm07bfrszeq7w30yp साँचा:head/doc 10 302298 487637 479042 2026-09-01T19:11:33Z SM7 6218 487637 wikitext text/x-wiki {{documentation subpage}} {{substitution notice|never}} {{uses lua|Module:headword/templates}} This template is used to create a basic headword line. This is the line of text that comes between the part-of-speech header (like <code>===Noun===</code>) and the actual definitions of the word. Every Wiktionary entry must have one headword line per part of speech. See [[Wiktionary:Entry layout#Headword line]] and [[Wiktionary:Templates#Headword-line templates]] for information on how this template is meant to be used. ==Basic usage== The basic usage of this template is: : <code><nowiki>{{</nowiki>head|<var>lang</var>|<var>part of speech</var>}}</code> The first parameter is the language code (see [[Wiktionary:Languages]]), which is required in all cases. The second is the part of speech. For example on {{m|nl|van}}: {{demo|<nowiki>{{head|nl|preposition|pagename=van}}</nowiki>}} The part of speech is used to add a category to the page. So, the above code would also add the page to [[:Category:Dutch prepositions]]. Using {{temp|head}} directly in an entry, similar to this example, is preferred for words for which the basic usage (two or three parameters) is enough, such as: * words in non-inflecting languages, such as Chinese * parts of speech with no grammatical information, like prepositions * parts of speech where the grammatical information is very simple, such as a plural form or gender only (see [[#Gender and number|below]] to learn how to include this) If a language requires a relatively complex call to {{temp|head}} for many words (such as the same set of inflected forms in many entries, or using <code>sort=</code> in every entry), the language may need its own headword-line templates. Templates made specifically for a given language can handle inflections and other grammatical issues that are specific to that language without reinventing the wheel in every single entry. Many languages already have dedicated [[:Category:Headword-line templates by language|sets of headword-line templates]], such as {{temp|en-verb}}, {{temp|ja-noun}}, {{temp|de-noun}}, {{temp|la-verb}} and so on. ==Parameters== A short reference of all parameters. ; {{para|1}} : The language code. See [[Wiktionary:Languages]]. ; {{para|sc}} : The script code. See [[Wiktionary:Scripts]]. This is rarely needed as the script can generally be automatically detected. ; {{para|2}} : The [[WT:Part of speech|part of speech]] category (such as {{cd|noun}}, {{cd|verb}}, {{cd|adjective}}, etc.), which is used to add the entry to the appropriate category. This can be in either plural or singular form. In the latter case, the template will pluralise it automatically if it doesn't already end in ''-s''. Exceptions can be added to the {{cd|invariable}} list at the top of [[Module:headword/data]] if necessary. ; {{para|head}} and {{para|head2}}, {{para|head3}} ... : Overrides the headword that is displayed. This is used primarily to add diacritical marks or to link to individual words in a multi-word term. By default, if the page name has spaces in it, the words are split across the spaces, which is usually correct but may need overriding. Additional parameters are available if more than one headword needs to be shown. ; {{para|tr}} and {{para|tr2}}, {{para|tr3}} ... : Provides the transliteration for the term, see [[Wiktionary:Transliteration]]. For many languages, this can be generated automatically so this does not need to be specified, but some entries cannot be reliably transliterated automatically (e.g. Arabic) so this parameter is necessary then. The additional parameters with a number correspond to each additional headword, pairwise. ; {{para|g}} : Provides gender/number specifications for the term, if necessary. Separate multiple specifications with a comma (with no space following). You can use inline modifiers {{cd|<l:...>}}, {{cd|<ll:...>}}, {{cd|<q:...>}}, {{cd|<qq:...>}} or {{cd|<ref:...>}} to add labels, qualifiers and/or references to individual gender-number specifications. See examples below, and see [[Module:gender and number]] for the format used. <small>Alternatively, additional gender/number specs can be given in {{para|g2}}, {{para|g3}}, etc., but this is deprecated.</small> ; {{para|cat2}}, {{para|cat3}}, {{para|cat4}} : Additional part-of-speech or other categories. Unlike the part-of-speech category in {{para|2}}, these should always be in the plural. ; {{para|noposcat|1}} : If given, don't automatically place the headword in a category based on the part of speech as given in {{para|2}}. Normally, two categories are added, one based on the part of speech given (e.g. [[:Category:Sanskrit nouns]]) and one based on the type of the part of speech, either lemma or non-lemma form (e.g. [[:Category:Sanskrit lemmas]]). Specifying {{para|noposcat|1}} will suppress both categories. ; {{para|nogendercat|1}} : If given, don't automatically place the headword in categories based on the gender(s). Normally, headwords with gender/number specifications given are placed in categories appropriate for the gender and number, e.g. [[:Category:Sanskrit masculine nouns]], [[:Category:Russian animate nouns]], [[:Category:Czech imperfective verbs]] or [[:Category:Spanish pluralia tantum]]. ; {{para|nomultiwordcat|1}} : If given, don't automatically categorize multiword headwords. Normally, for most languages, headwords with multiple words are placed in a special category, e.g. [[:Category:Sanskrit multiword terms]]. This is automatically suppressed for some languages, e.g. sign languages; languages without spaces between terms (such as Chinese, Japanese and Thai); or languages with spaces between syllables (such as Vietnamese). This is controlled by [[Module:headword/data]]. ; {{para|nopalindromecat|1}} : If given, don't automatically categorize palindromes. Normally, for most languages, palindromes are placed in a category like [[:Category:English palindromes]] or [[:Category:Hungarian palindromes]]. For some languages, there are language-specific rules for handling digraphs; for example, in Hungarian, ''gy'', ''sz'', ''zs'' and certain other combinations are treated like single letters for palindrome purposes, meaning that words like {{m|hu|koszok}} and {{m|hu|legyél}} are considered palindromes. This can create problems, e.g. {{m|hu|gazság}} would be categorized as a palindrome but is not because in this word, ''zs'' is two separate sounds rather than a digraph. Specifying {{para|nopalindromecat|1}} disables this categorization. ; {{para|var|1}} : If given, the term is a ''variant form'' (an uncommon, archaic or obsolete spelling variant, or a spelling in a less used script). Variant forms are placed in a separate category (<code><var>LANG</var> variant lemmas</code> instead of <code><var>LANG</var> lemmas</code>, or <code><var>LANG</var> variant non-lemma forms</code> instead of <code><var>LANG</var> non-lemma forms</code>), and most other term categories are suppressed (such as those for part of speech, gender, multiword terms, palindromes, etc.). ; {{para|var|both}} : If given, the term has definitions both as a regular lemma or non-lemma form and a variant form of the same type, under a single headword. '''This should be used sparingly, and never for mixing lemmas and non-lemma forms.''' This could be used, for example, if a noun lemma has two definitions, one of which is a normal lemma and the other a variant spelling of a different lemma, and it is not desired to split the noun into two headwords. This has the effect of adding both the regular lemma (or non-lemma form) categories as well as the variant form category. ; {{para|sccat|1}} : If given, automatically add a category <code><var>LANG</var> <var>POS</var>es in <var>script</var> script</code> (e.g. [[:Category:Sanskrit nouns in Devanagari script]]), for the script specified using {{para|sc}} or autodetected based on the value specified to {{para|head}} or the page name. This category is useful for languages that can be written in multiple scripts. ; {{para|autotrinfl|1}} : If given, include automatic transliteration after each of the inflections specified using {{para|3}}, {{para|4}} and further parameters (see below). This can also be set for individual inflected forms using {{para|f''N''autotr}}. ; {{para|sort}} : The sort key to use when placing the entry in the above categories. This is rarely needed, as the default generated sort key is usually correct. ; {{para|3}}, {{para|4}} and further : Specifies inflected forms to show. These are specified pairwise, with the first giving the name of the form, and the second giving the form itself. So the forms are numbered like this: {{tl|head|language|category|name 1|form 1|name 2|form 2|name 3|form 3|...}}. If multiple forms exist for the same name, separate them by using {{cd|or}} as the name. Forms work the same as the 2nd parameter of {{tl|l}}, and can thus have embedded wikilinks, will have certain diacritics removed, and so on. : The following additional parameters are available for each form, with <code>''N''</code> replaced by the number of the form: :; {{para|f''N''alt}} :: Specifies the alternative display form of the inflected form, much like the 3rd parameter of {{tl|l}}. :; {{para|f''N''tr}} :: Specifies the transliteration of the inflected form, much like the {{para|tr}} parameter of {{tl|l}}. :; {{para|f''N''ts}} :: Specifies the transcription of the inflected form, much like the {{para|ts}} parameter of {{tl|l}}. The same caveats apply as for that parameter. :; {{para|f''N''sc}} :: Specifies the script of the form; works like {{para|sc}}. :; {{para|f''N''id}} :: Specifies the sense ID to use for the link to the form's entry. See {{tl|senseid}} and the {{para|id}} parameter of {{tl|l}}. :; {{para|f''N''g}} :: Provides gender/number specification(s) to display after the form. To include multiple specifications, separate them by commas (with no space following). Uses the same gender/number specifications as for {{para|g}}. You can use inline modifiers {{cd|<l:...>}}, {{cd|<ll:...>}}, {{cd|<q:...>}}, {{cd|<qq:...>}} or {{cd|<ref:...>}} to add labels, qualifiers and/or references to individual gender-number specifications, as for the overall {{para|g}} parameter. :; {{para|f''N''l}} :: Specifies a label or labels (comma-separated, with no space after the comma) that should appear before the form, formatted like the template {{tl|lb}} does. This is used to mark certain forms as archaic, rare or similar. :; {{para|f''N''ll}} :: Specifies a label or labels (comma-separated, with no space after the comma) that should appear after the form, formatted like the template {{tl|lb}} does. :; {{para|f''N''q}} :: Specifies a qualifier that should appear before the form, formatted like the template {{tl|q}} does. This is used to add descriptive text such as ''in the meaning “foo”'' before a form. :; {{para|f''N''qq}} :: Specifies a qualifier that should appear after the form, formatted like the template {{tl|q}} does. :; {{para|f''N''ref}} :: Specifies a reference or references that should appear after the form, in the same format as specified for references given to {{tl|IPA}}. :; {{para|f''N''t}} :: Specifies a gloss for the form, if its meaning is not apparent. Use this sparingly. :; {{para|f''N''lit}} :: Specifies a literal meaning for the form, if its meaning is not apparent. Use this sparingly. :; {{para|f''N''pos}} :: Specifies a part of speech for the form, if its part of speech is not apparent. Use this sparingly. The same codes as for the {{para|pos}} parameter of {{tl|l}} are accepted; anything else is displayed as-is. :; {{para|f''N''ng}} :: Specifies arbitrary non-gloss explanatory text for the form. Use this sparingly. : The following parameters are available only for each ''name'', meaning that if multiple forms are displayed for the same name (with {{cd|or}}), these parameters should use the number of the ''first'' form. They are automatically applied to all forms following that name. :; {{para|f''N''accel-form}} :: Specifies an accelerated creation tag to be used by the [[WT:ACCEL]] gadget, to automatically generate an entry for a non-lemma form when the link is clicked. For information about acceleration tags, see [[WT:ACCEL#Acceleration tags]]. This should not be used directly in entries. If you find you need to use it, or any of the following acceleration-related parameters, you should probably make a custom template for the language instead. If the acceleration tag contains a vertical bar <code><nowiki>|</nowiki></code>, use {{tl|!}} instead. :; {{para|f''N''accel-translit}} :: Specifies a manual transliteration of the non-lemma form for use with accelerated creation of entries; see [[WT:ACCEL]] and {{para|f''N''accel-form}} above. The value of this parameter goes into param {{para|tr}} of the call to {{tl|head}} in the accelerated entry. You only need to specify this for languages that use a non-Latin script, and only when the auto-generated transliteration is insufficient, incorrect or nonexistent. :; {{para|f''N''accel-lemma}} :: Specifies the lemma corresponding to the non-lemma form for use with accelerated creation of entries; see [[WT:ACCEL]] and {{para|f''N''accel-form}} above. The value of this parameter goes into param {{para|2}} of the call to {{tl|inflection of}} in the accelerated entry. It defaults to the name of the current page, and only needs to be specified when the lemma contains additional diacritics that are stripped in order to generate the pagename (as in Latin, Russian, Ancient Greek, Old English, etc.). :; {{para|f''N''accel-lemma-translit}} :: Specifies a manual transliteration of the lemma corresponding to the non-lemma form for use with accelerated creation of entries; see [[WT:ACCEL]] and {{para|f''N''accel-form}} above. The value of this parameter goes into param {{para|tr}} of the call to {{tl|inflection of}} in the accelerated entry. You only need to specify this for languages that use a non-Latin script, and only when the auto-generated transliteration is insufficient, incorrect or nonexistent. :; {{para|f''N''accel-gender}} :: Specifies the gender of the non-lemma form for use with accelerated creation of entries; see [[WT:ACCEL]] and {{para|f''N''accel-form}} above. The value of this parameter goes into param {{para|g}} of the call to {{tl|head}} in the accelerated entry. You should only rarely specify this. :; {{para|f''N''accel-nostore|1}} :: For use with accelerated creation of entries. Place this on links that appear in the collapsed state of collapsible tables; see [[WT:ACCEL]]. :; {{para|f''N''nolink|1}} :: Inhibits automatic creation of a link to the forms. The forms will just be displayed in bold text instead. Links that are embedded into the form parameters are retained. :; {{para|f''N''request|1}} :: Causes the page to be added to [[:Category:Requests for inflections by language|Category:Requests for inflections in LANG entries]] if a form is missing. :; {{para|f''N''autotr|1}} :: Causes automatic transliteration to be included after each form. ==Detailed usage== Note that the examples are for illustrative purposes only, to demonstrate how {{tl|head}} works. For most of the languages and parts of speech shown here, there are dedicated headword-line templates that should be used in entries instead of directly invoking {{tl|head}}. ===Part of speech=== The part of speech (second parameter) can be either singular or plural, and written out fully (e.g. {{cd|interjection}}) or abbreviated (e.g. {{cd|int}} or {{cd|intj}}). If the part of speech is written out in full, it is stylistically preferred to write it in the singular. Add the word "form" to indicate a non-[[Wiktionary:Lemmas|lemma]] form. For example, use {{cd|noun form}} for plurals and inflections of nouns. The following part of speech aliases (abbreviations) are recognized by the module. In addition, any alias or fully-written part of speech in the singular can be followed by {{cd|f}} as an abbreviation for "form". For example, {{cd|nf}} or {{cd|nounf}} expands to {{cd|noun forms}}, and {{cd|compadjf}} expands to {{cd|comparative adjective forms}}. {{#invoke:headword doc|pos_alias_table}} ===Displayed headword=== Normally, the displayed headword is the same as the name of the current page. The parameter {{para|head}} can be used to specify a different headword to display. This can be useful if additional accent marks should be placed on the word, that are not present in the normal written form that is given in the page's name. For example, the Latin word {{m|la|scribo}} is normally written that way, but is also spelled {{m|la||scrībō}} in its fully accented form. For such a case, you would specify {{para|head|scrībō}}. Another purpose of this parameter is for terms that consist of multiple words. The {{para|head}} parameter can be used to link to the individual words that the term is made up of. For example, for the English phrasal verb {{m|en|give up}}, you could use: : <code><nowiki>{{head|en|verb|head=[[give]] [[up]]}}</nowiki></code> : {{head|en|verb|head=[[give]] [[up]]}} Note in the above example that the template automatically adds the correct language section to the links in the same way as {{temp|l}}. So the links actually come out as if written <code><nowiki>[[give#English|give]] [[up#English|up]]</nowiki></code>. This means that you should not add such section links yourself, nor should you use {{temp|l}} inside the {{para|head}} parameter. These were necessary in the past, but they can now be safely removed. In a few cases it may be necessary to show more than one headword. For example, a language like Russian might have a word with a single written form, but multiple alternative ways of placing the accent marks (compare this to English {{m|en||kílometer}} and {{m|en||kilómeter}}). Additional headwords can be displayed using the parameters {{para|head2}}, {{para|head3}} and so on. ===Transliteration=== If a term is written in a script other than the Latin alphabet, a transliteration of the term into the Latin alphabet should be provided using the {{para|tr}} parameter. Every language generally has its own rules for writing transliterations on Wiktionary; check with the language's entry guidelines page (such as [[Wiktionary:Russian entry guidelines]]) for more information. The template can automatically transliterate words in many languages; this is controlled through special transliteration modules such as [[Module:el-translit]] (and also the data in [[Module:languages]]). This means that for those languages, a transliteration does not need to be provided, as it can be generated internally. If the {{para|head}} parameter was provided, it is used as the base for the transliteration instead, so that any additional accents are also included in the transliteration. Use {{para|tr|-}} if you don't want a transliteration to be automatically generated (you shouldn't really ever do this in an entry). ===Gender and number=== The template has a set of parameters to display gender, number, noun class or other kinds of grammatical property. These are used and displayed in the standard format required by [[Module:gender and number]]. The gender is given with the optional {{para|g}} parameter. If more than one specification is necessary, separate them with a comma, with no space following, as follows (for {{m+|sc|dì}}): {{demo2|<nowiki>{{head|sc|noun|g=f,m<l:uncommon>|plural|dis|pagename=dì}}</nowiki>}} This also shows the use of an inline modifier attached to the second gender. If you know that a gender is needed, but don't know what it is, specify {{para|g|?}}, which will add the page to a cleanup category. You can also specify a partial gender. For example, if you know that a word is plural but don't know if it's, say, masculine or feminine plural, you can specify {{para|g|?-p}}. ===Inflections=== Further optional parameters are available to display inflections or other closely related forms of the word. These are given pair-wise: the first of each pair gives a label for the inflection, and the second then gives the actual term. For example, in the [[Wiktionary:Sandbox|Sandbox]]: {{demo2|<nowiki>{{head|en|noun|plural|Sandboxes|irregular plural|Sandboxen|pagename=Sandbox}}</nowiki>}} Certain diacritics are automatically removed from the term when creating the link, just like {{temp|l}} and {{temp|term}} do. So you don't need to worry about removing them yourself. A Latin example, where macrons are removed automatically: {{demo2|<nowiki>{{head|la|noun|head=nīdus|g=m|genitive|nīdī|pagename=nidus}}</nowiki>}} If you want to display multiple alternative forms of an inflection, you can use <code>or</code> as the label separating them. The template will recognise this and omit the comma: {{demo2|<nowiki>{{head|en|noun|plural|lemmas|or|lemmata|pagename=lemma}}</nowiki>}} The term (second part of a pair) may be blank. This can be used to add a simple note, such as "uncountable" or "intransitive": {{demo2|<nowiki>{{head|en|noun|countable and uncountable||plural|milks|pagename=milk}}</nowiki>}} If the label is blank, but the term is not, it acts as if the term was not specified either and omits both. This is not very useful in entries, but it can be a very powerful feature when writing templates using {{temp|head}} as a base. You can specify alternative display form, script, sense id and gender for each form with the parameters {{para|fNalt}}, {{para|fNsc}}, {{para|fNid}} and {{para|fNg}}, with "N" replaced with the number of the form. Some examples: {{demo2|<nowiki>{{head|sh|noun|head=tȇlo|g=n|Cyrillic spelling|те̑ло|f1sc=Cyrl|pagename=telo}}</nowiki>}} {{demo2|<nowiki>{{head|de|noun|g=m|genitive|Hundes|or|Hunds|plural|Hunde|diminutive|Hündchen|f4g=n|pagename=Hund}}</nowiki>}} {{demo2|<nowiki>{{head|ja|noun|uncountable||hiragana|せいじ|romaji|seiji|f3sc=Latn|pagename=政治}}</nowiki>}} {{demo2|<nowiki>{{head|cmn|noun|traditional and simplified||Pinyin|zhèngzhì|f2sc=Latn|pagename=政治}}</nowiki>}} When using {{temp|head}} as a base to create other templates, the class for accelerated links ([[WT:ACCEL]]) can be added with {{para|fNaccel-form}}. See [[Module:headword]] for more information on how to use this. If the label is <code>or</code>, the corresponding acceleration is ignored, and it is "inherited" from the preceding form. Examples: {{demo2|<nowiki>{{head|ca|noun|g=m|plural|f1accel-form=p|homes|or|hòmens|pagename=home}}</nowiki>}} An inflection term can contain wikilinks as part of the parameter, like the {{para|head}} parameter as well as the {{temp|l}} template. Language sections will be added to the individual links: {{demo2|<nowiki>{{head|en|adjective|comparative|[[more]] broken|superlative|[[most]] broken|pagename=broken}}</nowiki>}} Naturally, you should only use this to display a ''single'' form that consists of multiple words. You should not use this to specify multiple alternative forms; use the <code>or</code> label for this instead. The following example shows the use of {{para|fNl}} to attach labels to forms (on {{m+|cim|lachan}}): {{demo2|<nowiki>{{head|cim|verb|third-person singular present indicative|lachet|past participle|galàchet|or|gelacht|auxiliary|haban|or|håm|f2l=Sette Comuni|f3l=Luserna|f4l=Sette Comuni|f5l=Luserna|cat2=weak verbs|pagename=lachan}}</nowiki>}} ===Categories=== There are a few more parameters available for categories: * {{para|sort}} specifies a category sort key. This is rarely needed, as by default, a sort key will be generated for the language according to the rules defined for that language in [[Module:languages]] (the <code>sort_key</code> setting). For languages that have no sort key rules defined yet, the default sort key is the name of the page, with any hyphens removed from the beginning of the name. * {{para|cat2}}, {{para|cat3}} and , {{para|cat4}} specify additional category names that the page should be added to. The language's name is added in front, so if you use <code><nowiki>{{head|en|verb|cat2=irregular verbs}}</nowiki></code>, the page will be added to both [[:Category:English verbs]] and [[:Category:English irregular verbs]]. Note that this parameter must be given in plural, unlike the part-of-speech parameter! ===Script code=== The optional parameter {{para|sc}} gives the script code (see [[Wiktionary:Scripts]]). The script can usually be detected automatically based on the possibilities listed for the language in [[Module:languages]], so this parameter is only needed in rare cases. The example below is thus only for illustrative purposes; a real example would not need {{para|sc}} here. An example, for the entry {{m|sh|море}}, one might use: {{demo2|<nowiki>{{head|sh|noun|sc=Cyrl|g=n|pagename=море}}</nowiki>}} <includeonly> [[Category:Headword-line templates|head]] </includeonly> ==TemplateData== <templatedata> { "params": { "1": { "label": "language code", "description": "The language code. See [[Wiktionary:Languages]].", "type": "line", "required": true }, "2": { "label": "part of speech", "description": "The part of speech category which is used to add the entry to the appropriate category. This can be in either plural or singular form. In the latter case, the template will pluralise it automatically if it doesn't already end in ''-s''. Exceptions can be added to the <code>invariable</code> list at the top of [[Module:headword/templates]] if necessary.", "type": "string", "example": "verb", "required": true }, "3": { "label": "name of form 1", "description": "The name of a first of form of a term.", "type": "string" }, "4": { "label": "form 1", "description": "A first form of the term.", "type": "string" }, "sc": { "label": "script code", "description": "The script code. See [[Wiktionary:Scripts]]. This is rarely needed as the script can generally be automatically detected." }, "cat sc": { "label": "script code with category", "description": "The same as {{para|sc}}, but this also adds \"in (name) script\" to the category specified by the second parameter below. This is used to subcategorise words in different scripts, if languages can be written in more than one script. If both {{para|sc}} and {{para|cat sc}} are provided, the latter takes precedence.", "type": "string" }, "cat2": { "label": "part of speech category 2", "description": "Additional part-of-speech categories. Unlike the <code>part of speech</code>, these should always be in plural.", "type": "string" }, "cat3": { "label": "part of speech category 3", "description": "Additional part-of-speech categories. Unlike the <code>part of speech</code>, these should always be in plural.", "type": "string" }, "sort": { "label": "sort key", "description": "The sort key to use when placing the entry in the above categories. This is rarely needed, as the default generated sort key is usually correct.", "type": "string" }, "head": { "description": "Overrides the headword that is displayed. This is used primarily to add diacritical marks or to link to individual words in a multi-word term. By default, if the page name has spaces in it, the words are split across the spaces, which is usually correct but may need overriding. Additional parameters are available if more than one headword needs to be shown.", "type": "string" }, "head2": { "description": "Additional term for the headword display.", "type": "string" }, "head3": { "description": "Additional term for the headword display.", "type": "string" }, "head4": { "description": "Additional term for the headword display.", "type": "string" }, "head5": { "description": "Additional term for the headword display.", "type": "string" }, "tr": { "description": "Provides the transiteration for the term, see [[Wiktionary:Transliteration]]. For many languages, this can be generated automatically so this does not need to be specified, but some entries cannot be reliably transliterated automatically (e.g. Arabic) so this parameter is necessary then.", "type": "string" }, "tr2": { "description": "Provides the transiteration for the term, should match <code>head2</code>.", "type": "string" }, "tr3": { "description": "Provides the transiteration for the term, should match <code>head3</code>.", "type": "string" }, "tr4": { "description": "Provides the transiteration for the term, should match <code>head4</code>.", "type": "string" }, "tr5": { "description": "Provides the transiteration for the term, should match <code>head5</code>.", "type": "string" }, "g": { "description": "Provides gender specifications for the word, if necessary. See [[Module:gender and number]] for the format used.", "type": "string" }, "g2": { "description": "Provides gender specifications for the word, if necessary, should match <code>head2</code>.", "type": "string" }, "g3": { "description": "Provides gender specifications for the word, if necessary, should match <code>head3</code>.", "type": "string" }, "g4": { "description": "Provides gender specifications for the word, if necessary, should match <code>head4</code>.", "type": "string" }, "g5": { "description": "Provides gender specifications for the word, if necessary, should match <code>head5</code>.", "type": "string" } }, "description": "This template is used to create a basic headword line. This is the line of text that comes between the part-of-speech header (like <code>===Noun===</code>) and the actual definitions of the word. ", "paramOrder": [ "1", "2", "sc", "cat sc", "cat2", "cat3", "sort", "head", "head2", "head3", "head4", "head5", "tr", "tr2", "tr3", "tr4", "tr5", "g", "g2", "g3", "g4", "g5", "3", "4" ], "format": "inline" } </templatedata> c3tfffrizro0kxab5ixhdi3tjzyi5r9 साँचा:mention 10 302316 487658 478024 2026-09-01T20:23:11Z SM7 6218 updating... 487658 wikitext text/x-wiki <includeonly><onlyinclude>{{safesubst:<noinclude/>#invoke:links/templates|l_term_t|face=term}}</onlyinclude></includeonly><!-- -->{{m|en|term}}{{documentation}} h4xj9n1e4dg6e4acumj649ey2dtagiw मॉड्यूल:category tree 828 302327 487701 479599 2026-09-02T04:12:15Z SM7 6218 updating...+local little 487701 Scribunto text/plain -- Prevent substitution. if mw.isSubsting() then return require("Module:unsubst") end local export = {} local category_tree_submodule_prefix = "Module:category tree/" local category_tree_styles_css = "Module:category tree/styles.css" local m_str_utils = require("Module:string utilities") local m_template_parser = require("Module:template parser") local m_utilities = require("Module:utilities") local ceil = math.ceil local class_else_type = m_template_parser.class_else_type local concat = table.concat local deep_copy = require("Module:table").deepCopy local full_url = mw.uri.fullUrl local insert = table.insert local is_callable = require("Module:fun").is_callable local log10 = math.log10 or require("Module:math").log10 local new_title = mw.title.new local pages_in_category = mw.site.stats.pagesInCategory local parse = m_template_parser.parse local remove_comments = require("Module:string/removeComments") local sort = table.sort local split = m_str_utils.split local string_compare = require("Module:string/compare") local trim = m_str_utils.trim local uupper = m_str_utils.upper local yesno = require("Module:yesno") local current_frame = mw.getCurrentFrame() local current_title = mw.title.getCurrentTitle() local namespace = current_title.namespace local poscatboiler_subsystem = "poscatboiler" local extra_args_error = "Extra arguments to {{((}}auto cat{{))}} are not allowed for this category." -- Generates a sortkey for a numeral `n`, adding leading zeroes to avoid the "1, 10, 2, 3" sorting problem. `max_n` is the greatest expected value of `n`, and is used to determine how many leading zeroes are needed. If not supplied, it defaults to the number of languages. function export.numeral_sortkey(n, max_n) max_n = max_n or require("Module:list of languages").count() return ("#%%0%dd"):format(ceil(log10(max_n + 1))):format(n) end function export.split_lang_label(title_text) local getByCanonicalName = require("Module:languages").getByCanonicalName -- Progressively remove a word from the potential canonical name until it -- matches an actual canonical name. local words = split(title_text, " ", true) for i = #words - 1, 1, -1 do local lang = getByCanonicalName(concat(words, " ", 1, i)) if lang then return lang, concat(words, " ", i + 1) end end return nil, title_text end local function show_error(text, title) return require("Module:message box").maintenance( "red", "[[File:Codex icon Alert red.svg|40px|alt=alert]]", title or "This category is not defined in Wiktionary's category tree.", text ) end local function error_not_in_category_tree() error( "This category is not defined in Wiktionary's category tree. " .. "Double-check the category name for typos. " .. "Search existing categories or request definition at [[Wiktionary:Category and label treatment requests|WT:CLTR]]. " .. "Affected category: " .. current_title.fullText, 2 ) end -- Show the text that goes at the very top right of the page. local function show_topright(current) return current.getTopright and current:getTopright() or nil end local function link_box(content) return ("<div class=\"noprint plainlinks\" style=\"float: right; clear: both; margin: 0 0 .5em 1em; background: var(--wikt-palette-paleblue, #f9f9f9); border: 1px var(--border-color-base, #aaaaaa) solid; margin-top: -1px; padding: 5px; font-weight: bold;\">%s</div>"):format(content) end local function show_editlink(current) return link_box(("[%s Edit category data]"):format(tostring(full_url(current:getDataModule(), "action=edit")))) end local function show_related_changes() local title = current_title.fullText return link_box(("[%s <span title=\"Recent edits and other changes to pages in %s\">Recent changes</span>]"):format( tostring(full_url("Special:RecentChangesLinked", { target = title, showlinkedto = 0, })), title )) end local function show_pagelist(current) local namespace = "namespace=" local info = current:getInfo() local lang_code = info.code if info.label == "citations" or info.label == "citations of undefined terms" then namespace = namespace .. "Citations" elseif lang_code then local lang = require("Module:languages").getByCode(lang_code, true, true) if lang then -- Proto-Norse (gmq-pro) is probably the only language with a code ending in -pro -- that's intended to have mostly non-reconstructed entries. if (lang_code:find("%-pro$") and lang_code ~= "gmq-pro") or lang:hasType("reconstructed") then namespace = namespace .. "विक्षनरी" elseif lang:hasType("appendix-constructed") then namespace = namespace .. "विक्षनरी" end end elseif info.label:match("templates") then namespace = namespace .. "साँचा" elseif info.label:match("modules") then namespace = namespace .. "Module" elseif info.label:match("^विक्षनरी") or info.label:match("^Pages") then namespace = "" end return ([=[ {| id="newest-and-oldest-pages" class="wikitable mw-collapsible" style="float: right; clear: both; margin: 0 0 .5em 1em;" ! Newest and oldest pages&nbsp; |- | id="recent-additions" style="font-size:0.9em;" | '''Newest pages ordered by last [[mw:Manual:Categorylinks table#cl_timestamp|category link update]]:''' %s |- | id="oldest-pages" style="font-size:0.9em;" | '''Oldest pages ordered by last edit:''' %s |}]=]):format( current_frame:extensionTag( "DynamicPageList", ([=[ category=%s %s count=10 mode=ordered ordermethod=categoryadd order=descending]=] ):format(current_title.text, namespace) ), current_frame:extensionTag( "DynamicPageList", ([=[ category=%s %s count=10 mode=ordered ordermethod=lastedit order=ascending]=] ):format(current_title.text, namespace) ) ) end -- Show navigational "breadcrumbs" at the top of the page. local function show_breadcrumbs(current) local steps = {} -- Start at the current label and move our way up the "chain" from child to parent, until we can't go further. while current do local category, display_name, nocap if type(current) == "string" then category = current display_name = current:gsub("^श्रेणी:", "") else if not current.getCategoryName then error("Internal error: Bad format in breadcrumb chain structure, probably a misformatted value for `parents`: " .. mw.dumpObject(current)) end category = "श्रेणी:" .. current:getCategoryName() display_name, nocap = current:getBreadcrumbName() end if not nocap then display_name = mw.getContentLanguage():ucfirst(display_name) end insert(steps, 1, ("[[:%s|%s]]"):format(category, display_name)) -- Move up the "chain" by one level. if type(current) == "string" then current = nil else current = current:getParents() end if current then current = current[1].name end end local templateStyles = require("Module:TemplateStyles")(category_tree_styles_css) local ol = mw.html.create("ol") for i, step in ipairs(steps) do local li = mw.html.create("li") if i ~= 1 then local span = mw.html.create("span") :attr("aria-hidden", "true") :addClass("ts-categoryBreadcrumbs-separator") :wikitext(" » ") li:node(span) end li:wikitext(step) ol:node(li) end return templateStyles .. tostring(mw.html.create("div") :attr("role", "navigation") :attr("aria-label", "Breadcrumb") :addClass("ts-categoryBreadcrumbs") :node(ol)) end local function show_also(current) local also = current._info.also if also and #also > 0 then return ('<div style="margin-top:-1em;margin-bottom:1.5em">%s</div>'):format(require("Module:also").main(also)) end return nil end -- Show a short description text for the category. local function show_description(current) return current.getDescription and current:getDescription() or nil end local function show_appendix(current) local appendix = current.getAppendix and current:getAppendix() return appendix and ("For more information, see [[%s]]."):format(appendix) or nil end local function sort_children(child1, child2) return string_compare(uupper(child1.sort), uupper(child2.sort)) end -- Show a list of child categories. local function show_children(current) local children = current.getChildren and current:getChildren() or nil if not children then return nil end sort(children, sort_children) local children_list = {} for _, child in ipairs(children) do local child_name, child_pagetitle = child.name if type(child_name) == "string" then child_pagetitle = child_name else child_pagetitle = "श्रेणी:" .. child_name:getCategoryName() end if new_title(child_pagetitle).exists then insert(children_list, ("* [[:%s]]: %s"):format( child_pagetitle, child.description or type(child_name) == "string" and child_name:gsub("^श्रेणी:", "") .. "." or child_name:getDescription("child") )) end end return concat(children_list, "\n") end -- Show a table of contents with links to each letter in the language's script. local function show_TOC(current) local titleText = current_title.text local inCategoryPages = pages_in_category(titleText, "pages") local inCategorySubcats = pages_in_category(titleText, "subcats") local TOC_type -- Compute type of table of contents required. if inCategoryPages > 2500 or inCategorySubcats > 2500 then TOC_type = "full" elseif inCategoryPages > 200 or inCategorySubcats > 200 then TOC_type = "normal" else -- No (usual) need for a TOC if all pages or subcategories can fit on one page; -- but allow this to be overridden by a custom TOC handler. TOC_type = "none" end if current.getTOC then local TOC_text = current:getTOC(TOC_type) if TOC_text ~= true then return TOC_text or nil end end if TOC_type ~= "none" then local templatename = current:getTOCTemplateName() local TOC_template if TOC_type == "full" then -- This category is very large, see if there is a "full" version of the TOC. local TOC_template_full = new_title(templatename .. "/full") if TOC_template_full.exists then TOC_template = TOC_template_full end end if not TOC_template then local TOC_template_normal = new_title(templatename) if TOC_template_normal.exists then TOC_template = TOC_template_normal end end if TOC_template then return current_frame:expandTemplate{title = TOC_template.text, args = {}} end end return nil end -- Show the "catfix" that adds language attributes and script classes to the page. local function show_catfix(current) local lang, sc = current:getCatfixInfo() return lang and m_utilities.catfix(lang, sc) or nil end -- Show the parent categories that the current category should be placed in. local function show_categories(current, categories) local parents = current.getParents and current:getParents() or nil if not parents then return nil end for _, parent in ipairs(parents) do local parent_name = parent.name local sortkey = type(parent.sort) == "table" and parent.sort:makeSortKey() or parent.sort if type(parent_name) == "string" then insert(categories, ("[[%s|%s]]"):format(parent_name, sortkey)) else insert(categories, ("[[श्रेणी:%s|%s]]"):format(parent_name:getCategoryName(), sortkey)) end end -- Also put the category in its corresponding "umbrella" or "by language" category. local umbrella = current:getUmbrella() if umbrella then -- FIXME: use a language-neutral sorting function like the Unicode Collation Algorithm. local sortkey = current._lang and current._lang:getCanonicalName() or current:getCategoryName() sortkey = require("Module:languages").getByCode("en", true):makeSortKey(sortkey) if type(umbrella) == "string" then insert(categories, ("[[%s|%s]]"):format(umbrella, sortkey)) else insert(categories, ("[[श्रेणी:%s|%s]]"):format(umbrella:getCategoryName(), sortkey)) end end -- Check for various unwanted parser functions, which should be integrated into the category tree data instead. -- Note: HTML comments shouldn't be removed from `content` until after this step, as they can affect the result. local content = current_title:getContent() if not content then -- This happens when using [[Special:ExpandTemplates]] to call {{auto cat}} on a nonexistent category page, -- which is needed by Benwing's create_wanted_categories.py script. return end local defaultsort, displaytitle, page_has_param for node in parse(content):iterate_nodes() do local node_class = class_else_type(node) if node_class == "template" then local name = node:get_name() if name == "DEFAULTSORT:" and not defaultsort then insert(categories, "[[Category:Pages with DEFAULTSORT conflicts]]") defaultsort = true elseif name == "DISPLAYTITLE:" and not displaytitle then insert(categories,"[[Category:Pages with DISPLAYTITLE conflicts]]") displaytitle = true end elseif node_class == "parameter" and not page_has_param then insert(categories,"[[Category:Pages with raw triple-brace template parameters]]") page_has_param = true end end -- Check for raw category markup, which should also be integrated into the category tree data. content = remove_comments(content, "BOTH") local head = content:find("[[", 1, true) while head do local close = content:find("]]", head + 2, true) if not close then break end -- Make sure there are no intervening "[[" between head and close. local open = content:find("[[", head + 2, true) while open and open < close do head = open open = content:find("[[", head + 2, true) end local cat = content:sub(head + 2, close - 1) local colon = cat:match("^[ _\128-\244]*[श्रेणी][Cc][Aa][Tt][EeGgOoRrYy _\128-\244]*():") if colon then local pipe = cat:find("|", colon + 1, true) if pipe ~= #cat then local title = new_title(pipe and cat:sub(1, pipe - 1) or cat) if title and title.namespace == 14 then insert(categories,"[[Category:Categories with categories using raw markup]]") break end end end head = open end end local function generate_output(current) if current then for _, functionName in pairs{ "getBreadcrumbName", "getDataModule", "canBeEmpty", "getDescription", "getParents", "getChildren", "getUmbrella", "getAppendix", "getTOCTemplateName", } do if not is_callable(current[functionName]) then require("Module:debug").track{"category tree/missing function", "category tree/missing function/" .. functionName} end end end local boxes, display, categories = {}, {}, {} -- Categories should never show files as a gallery. insert(categories, "__NOGALLERY__") if current_frame:getParent():getTitle() == "साँचा:auto cat" then insert(categories, "[[Category:Categories calling Template:auto cat]]") end -- Check if the category is empty local totalPages = pages_in_category(current_title.text, "all") local hugeCategory = totalPages > 1000000 -- 1 million -- Categorize huge categories, as they cause DynamicPageList to time out and make the category inaccessible. if hugeCategory then insert(categories, "[[Category:Huge categories]]") end -- Are the parameters valid? if not current then -- Signal failure so export.show can try the next handler. return nil, true end -- Does the category have the correct name? local currentName = current:getCategoryName() local correctName = current_title.text == currentName if not correctName then insert(categories, "[[श्रेणी:Categories with incorrect names]]") insert(display, show_error( ("Based on the data in the category tree, this category should be called '''[[:श्रेणी:%s]]'''."):format(currentName), "इस श्रेणी में कोई ग़लत नाम है।" )) end -- Add cleanup category for empty categories. local canBeEmpty = current:canBeEmpty() if canBeEmpty and correctName then insert(categories, " __EXPECTUNUSEDCATEGORY__") elseif totalPages == 0 then insert(categories, "[[Category:Empty categories]]") end if current:isHidden() then insert(categories, " __HIDDENCAT__") end -- Put all the float-right stuff into a <div> that does not clear, so that float-left stuff like the breadcrumbs and -- description can go opposite the float-right stuff without vertical space. insert(boxes, "<div style=\"float: right;\">") insert(boxes, show_topright(current)) insert(boxes, show_editlink(current)) insert(boxes, show_related_changes()) -- Show pagelist, unless it's a huge category (since they can't use DynamicPageList - see above). if not hugeCategory then insert(boxes, show_pagelist(current)) end insert(boxes, "</div>") -- Generate the displayed information insert(display, show_breadcrumbs(current)) insert(display, show_also(current)) insert(display, show_description(current)) insert(display, show_appendix(current)) insert(display, show_children(current)) insert(display, show_TOC(current)) insert(display, show_catfix(current)) insert(display, '<br class="clear-both-in-vector-2022-only">') show_categories(current, categories) return concat(boxes, "\n") .. "\n" .. concat(display, "\n\n") .. concat(categories, "") end --[==[ List of handler functions that try to match the page name. A handler should return the name of a submodule to [[Module:category tree]] and an info table which is passed as an argument to the submodule. If a handler does not recognize the page name, it should return nil. Note that the order of handlers matters! ]==] local handlers = {} -- Thesaurus per-language category insert(handlers, function(title) local code, label = title:match("^विक्षनरी:(%l[%a-]*%a):(.+)") if code then return poscatboiler_subsystem, {label = title, raw = true} end end) -- Topic per-language category insert(handlers, function(title) local code, label = title:match("^(%l[%a-]*%a):(.+)") if code then return poscatboiler_subsystem, {label = title, raw = true} end end) -- Lect category e.g. for [[:Category:New Zealand English]] or [[:Category:Issime Walser]] insert(handlers, function(title, args) local lect = args.lect or args.dialect if lect ~= "" and yesno(lect, true) then -- Same as boolean in [[Module:parameters]]. return poscatboiler_subsystem, {label = title, args = args, raw = true} end end) -- poscatboiler per-language label, e.g. [[Category:English non-lemma forms]] insert(handlers, function(title, args) local lang, label = export.split_lang_label(title) if not lang then return end local baseLabel, script = label:match("(.+) in (.-)$") if script and baseLabel ~= "टर्म" then local scriptObj = require("Module:scripts").getByCategoryName(script) if scriptObj then return poscatboiler_subsystem, {label = baseLabel, code = lang:getCode(), sc = scriptObj:getCode(), args = args} end end return poscatboiler_subsystem, {label = label, code = lang:getCode(), args = args} end) -- poscatboiler label umbrella category insert(handlers, function(title, args) local label = title:match("(.+) भाषा अनुसार$") if label then -- The poscatboiler code will appropriately lowercase if needed. return poscatboiler_subsystem, {label = label, args = args} end end) -- poscatboiler raw handlers insert(handlers, function(title, args) return poscatboiler_subsystem, {label = title, args = args, raw = true} end) -- poscatboiler umbrella handlers without 'by language' insert(handlers, function(title, args) return poscatboiler_subsystem, {label = title, args = args} end) function export.show(frame) local args, other_args = require("Module:parameters").process(frame:getParent().args, { ["also"] = {type = "title", sublist = "comma without whitespace", namespace = 14} }, true) if args.also then for k, arg in next, args.also do args.also[k] = arg.prefixedText end end for k, arg in next, other_args do other_args[k] = trim(arg) end if namespace == 10 then -- Template return "(यह साँचा [[Help:Namespaces#Category|श्रेणी:]] नामस्थान में स्थित पृष्ठ पर प्रयोग किया जाना चाहिये।)" elseif namespace ~= 14 then -- Category error("यह साँचा/मॉड्यूल केवल [[mw:Help:Namespaces#Category|श्रेणी:]] नामस्थान में प्रयोग में लाया जा सकता है।") end local saw_tree_lookup_failure = false local failure_consumed_args = false -- Go through each handler in turn. If a handler doesn't recognize the format of the category, it will return nil, -- and we will consider the next handler. Otherwise, it returns a template name and arguments to call it with, but -- even then, that template might return an error, and we need to consider the next handler. This happens, for -- example, with the category "CAT:Mato Grosso, Brazil", where "Mato" is the name of a language, so the poscatboiler -- per-language label handler fires and tries to find a label "Grosso, Brazil". This throws an error, and -- previously, this blocked further handler consideration, but now we check for the error and continue checking -- handlers; eventually, the topic umbrella handler will fire and correctly handle the category. for _, handler in ipairs(handlers) do -- Use a new title object and args table for each handler, to keep them isolated. local submodule, info = handler(current_title.text, deep_copy(other_args)) if submodule then info.also = deep_copy(args.also) require("Module:debug").track("auto cat/" .. submodule) -- `failed` is true if no match was found in the category tree. submodule = require(category_tree_submodule_prefix .. submodule) local cattext, failed = generate_output(submodule.main(info)) if failed then saw_tree_lookup_failure = true failure_consumed_args = failure_consumed_args or not not info.args elseif not info.args and next(other_args) then error(extra_args_error) else return cattext end end end -- No handler produced a valid category-tree match. -- Preserve previous behavior: if no failing handler consumed args, surface extra-arg errors first. if saw_tree_lookup_failure and not failure_consumed_args and next(other_args) then error(extra_args_error) end error_not_in_category_tree() end -- TODO: new test entrypoint. return export 4kpw06hhc031vedtn5jifhvoybwtdbc मॉड्यूल:category tree/data 828 302328 487713 477967 2026-09-02T08:24:33Z SM7 6218 updating...+local little 487713 Scribunto text/plain local labels = {} local raw_categories = {} local handlers = {} local raw_handlers = {} local labels = {} local raw_categories = {} local handlers = {} local raw_handlers = {} local subpages = { -- It should not matter much what order we do the handlers in, but topic handling historically -- preceded "poscatboiler" handling (i.e. everything else), so keep it that way for the moment. "विषय", "affixes and compounds", "वर्ण", "प्रविष्टि रखरखाव", "व्युत्पत्ति", "परिवार", "figures of speech", "grammatical classes", "lang-specific-raw", "भाषाएँ", "लेक्ट", "लेम्मा", "lexical properties", "miscellaneous", "मॉड्यूल", "नाम", "गैर-लेम्मा रूप", "phrases", "pragmatic properties", "तुक", "लिपियाँ", "semantic classes", "shortenings", "speech acts", "चिह्न", "साँचे", "टर्म लिपि अनुसार", "ट्रांसलिट्रेशन", "युनिकोड", "विक्षनरी", "विक्षनरी रखरखाव", "विक्षनरी सदस्य'", "wiktionary votes", "word of the day", "हेडवर्ड", } -- Import subpages for _, subpage in ipairs(subpages) do local datamodule = "Module:category tree/" .. subpage local retval = require(datamodule) if retval["LABELS"] then for label, data in pairs(retval["LABELS"]) do if labels[label] and not retval["IGNOREDUP"] then error("लेबल " .. label .. " जिसे [[" .. datamodule .. "]] और [[" .. labels[label].module .. "]] दोनों में परिभाषित किया गया है।") end data.module = datamodule labels[label] = data end end if retval["RAW_CATEGORIES"] then for category, data in pairs(retval["RAW_CATEGORIES"]) do if raw_categories[category] and not retval["IGNOREDUP"] then error("प्रारूपहीन श्रेणी " .. category .. " जिसे [[" .. datamodule .. "]] और [[" .. raw_categories[category].module .. "]] दोनों में परिभाषित किया गया है।") end data.module = datamodule raw_categories[category] = data end end if retval["HANDLERS"] then for _, handler in ipairs(retval["HANDLERS"]) do table.insert(handlers, { module = datamodule, handler = handler }) end end if retval["RAW_HANDLERS"] then for _, handler in ipairs(retval["RAW_HANDLERS"]) do table.insert(raw_handlers, { module = datamodule, handler = handler }) end end end -- Add child categories to their parents local function add_children_to_parents(hierarchy, raw) for key, data in pairs(hierarchy) do local parents = data.parents if parents then if type(parents) ~= "table" then parents = {parents} end if parents.name or parents.module then parents = {parents} end for _, parent in ipairs(parents) do if type(parent) ~= "table" or not parent.name and not parent.module then parent = {name = parent} end if parent.name and not parent.module and type(parent.name) == "string" and not parent.name:find("^श्रेणी:") then local parent_is_raw if raw then parent_is_raw = not parent.is_label else parent_is_raw = parent.raw end -- Don't do anything if the child is raw and the parent is lang-specific, otherwise e.g. -- "Lemmas subcategories by language" will be listed as a child of every "LANG lemmas" category. -- FIXME: We need to rethink this mechanism. if not raw or parent_is_raw then local child_hierarchy = parent_is_raw and raw_categories or labels if child_hierarchy[parent.name] then local child = {name = key, sort = parent.sort, raw = raw} if child_hierarchy[parent.name].children then table.insert(child_hierarchy[parent.name].children, child) else child_hierarchy[parent.name].children = {child} end end end end end end end end add_children_to_parents(labels) add_children_to_parents(raw_categories, true) return { LABELS = labels, RAW_CATEGORIES = raw_categories, HANDLERS = handlers, RAW_HANDLERS = raw_handlers } 57foa48jlqpywt0oyxxrbbe2kmonz0x साँचा:auto cat 10 302411 487681 477771 2026-09-02T03:00:45Z SM7 6218 updating... 487681 wikitext text/x-wiki {{safesubst:<noinclude/>#invoke:category tree|show}}<noinclude>{{documentation}}</noinclude> j6zycuhqgb1iu335vq2dprah00g58ws मॉड्यूल:etymology languages/data 828 302573 487565 477730 2026-09-01T16:15:00Z SM7 6218 प्राकृत / कुछ अनुवाद 487565 Scribunto text/plain local m = {} -- Albanian varieties m["aln"] = { "Gheg Albanian", 181037, "sq", aliases = {"Gheg"}, } m["aae"] = { "Arbëresh Albanian", 1075302, "sq", aliases = {"Arbëreshë", "Arbëresh"}, } m["aat"] = { "Arvanitika Albanian", 29347, "sq", aliases = {"Arvanitika"}, } m["als"] = { "Tosk Albanian", 180937, "sq", aliases = {"Tosk"}, } -- Bantu varieties m["bnt-cmn"] = { "Common Bantu", nil, "bnt-pro", } -- Semitic varieties -- Akkadian varieties m["akk-old"] = { "Old Akkadian", nil, "akk", } m["akk-obb"] = { "Old Babylonian", nil, "akk", } m["akk-oas"] = { "Old Assyrian", nil, "akk", } m["akk-mbb"] = { "Middle Babylonian", nil, "akk", } m["akk-mas"] = { "Middle Assyrian", nil, "akk", } m["akk-nbb"] = { "Neo-Babylonian", nil, "akk", } m["akk-nas"] = { "Neo-Assyrian", nil, "akk", } m["akk-lbb"] = { "Late Babylonian", nil, "akk", } m["akk-stb"] = { "Standard Babylonian", nil, "akk", } -- Arabic varieties m["jrb"] = { "Judeo-Arabic", 37733, "ar", } -- Aramaic varieties m["arc-bib"] = { "Biblical Aramaic", 843235, "arc", family = "sem-are", } m["arc-cpa"] = { "Christian Palestinian Aramaic", 60790119, "arc", family = "sem-arw", aliases = {"Melkite Aramaic", "Palestinian Syriac", "Syropalestinian Aramaic"}, } m["arc-imp"] = { "Imperial Aramaic", 7079491, "arc", aliases = {"Official Aramaic"}, } m["arc-hat"] = { "Hatran Aramaic", 3832926, "arc", family = "sem-are", } m["arc-jla"] = { "Jewish Literary Aramaic", 105952842, "arc", } m["arc-nab"] = { "Nabataean Aramaic", 36178, "arc", } m["arc-old"] = { "Old Aramaic", 3398392, "arc", } m["arc-pal"] = { "Palmyrene Aramaic", 1510113, "arc", family = "sem-arw", } m["tmr"] = { "Jewish Babylonian Aramaic", 33407, "arc", family = "sem-ase", } m["jpa"] = { "Jewish Palestinian Aramaic", 948909, "arc", family = "sem-arw", aliases = {"Galilean Aramaic"}, } -- Catalan varieties m["ca-val"] = { "Valencian", 32641, "ca", } -- Central Nicobarese varieties m["ncb-cam"] = { "Camorta", 5026908, "ncb", aliases = {"Kamorta"}, } m["ncb-kat"] = { "Katchal", 17064263, "ncb", aliases = {"Tehnu"}, } m["ncb-nan"] = { "Nancowry", 6962504, "ncb", aliases = {"Nankwari"}, } -- Chinese varieties m["och-ear"] = { "Early Old Chinese", nil, "och", } m["och-lat"] = { "Late Old Chinese", nil, "och", } m["ltc-ear"] = { "Early Middle Chinese", nil, "ltc", } m["ltc-lat"] = { "Late Middle Chinese", nil, "ltc", } m["cmn-ear"] = { "Early Mandarin", 837169, "cmn", } m["cmn-sic"] = { "Sichuanese", 2278732, "cmn", } m["wuu-sha"] = { "Shanghainese", 36718, "wuu", } m["hsn-old"] = { "Old Xiang", 7085453, "hsn", aliases = {"Lou-Shao"}, } m["zhx-pin"] = { "Pinghua", 2735715, "yue", } m["nan-hai"] = { "Hainanese", 934541, "nan", } m["nan-hok"] = { "Hokkien", 1624231, "nan", } m["nan-xm"] = { "Amoy", 68744, "nan-hok", aliases = {"Xiamenese"}, } m["nan-zz"] = { "Zhangzhou Hokkien", nil, "nan-hok", } m["nan-qz"] = { "Quanzhou Hokkien", nil, "nan-hok", } m["nan-jj"] = { "Jinjiang Hokkien", nil, "nan-qz", } m["nan-ph"] = { "Philippine Hokkien", 3236692, "nan-jj", } -- Chinese romanization -- [[Wiktionary:Information desk/2022/June#Etymology Coding Issue]] -- [[Wiktionary:Grease pit/2022/June#Transliteration Systems in Etymologies 2]] m["cmn-pinyin"] = { "Hanyu Pinyin", 42222, "cmn", aliases = {"Pinyin"}, } m["cmn-tongyong"] = { "Tongyong Pinyin", 700739, "cmn", } m["cmn-wadegile"] = { "Wade–Giles", 208442, "cmn", aliases = {"Wade-Giles", "Wade Giles"}, } -- Chinese cyrillization m["cmn-palladius"] = { "Palladius", 1234239, "cmn", aliases = {"Palladius system"}, } -- Coptic varieties m["cop-akh"] = { "Akhmimic Coptic", nil, "cop", aliases = {"Akhmimic"}, } m["cop-boh"] = { "Bohairic Coptic", 890733, "cop", aliases = {"Bohairic", "Memphitic Coptic", "Memphitic"}, } m["cop-ggg"] = { "Coptic Dialect G", nil, "cop", aliases = {"Dialect G", "Mansuric Coptic", "Mansuric"}, } m["cop-jjj"] = { "Coptic Dialect J", nil, "cop", } m["cop-kkk"] = { "Coptic Dialect K", nil, "cop", } m["cop-ppp"] = { "Coptic Dialect P", nil, "cop", aliases = {"Proto-Theban Coptic", "Palaeo-Theban Coptic"}, } m["cop-fay"] = { "Fayyumic Coptic", 1399115, "cop", aliases = {"Fayyumic", "Faiyumic Coptic", "Faiyumic", "Fayumic Coptic", "Fayumic", "Bashmuric Coptic", "Bashmuric"}, } m["cop-her"] = { "Hermopolitan Coptic", nil, "cop", aliases = {"Hermopolitan", "Coptic Dialect H", "Ashmuninic", "Ashmuninic Coptic"}, } m["cop-lyc"] = { "Lycopolitan Coptic", nil, "cop", aliases = { "Lycopolitan", "Assiutic Coptic", "Asyutic Coptic", "Assiutic", "Asyutic", "Lyco-Diospolitan Coptic", "Lyco-Diospolitan", "Subakhmimic Coptic", "Subakhmimic" }, } m["cop-old"] = { "Old Coptic", nil, "cop", } m["cop-oxy"] = { "Oxyrhynchite Coptic", nil, "cop", aliases = {"Oxyrhynchite", "Mesokemic Coptic", "Mesokemic", "Middle Egyptian Coptic"}, } m["cop-ply"] = { "Proto-Lycopolitan Coptic", nil, "cop", aliases = {"Coptic Dialect i", "Proto-Lyco-Diospolitan Coptic"}, } m["cop-sah"] = { "Sahidic Coptic", 2645851, "cop", aliases = {"Sahidic", "Saidic Coptic", "Saidic", "Thebaic Coptic", "Thebaic"}, } -- Dutch varieties m["nl-BE"] = { "Belgian Dutch", 34147, "nl", aliases = { "Flemish", "Flemish Dutch", "Southern Dutch"}, } -- Egyptian varieties m["egy-old"] = { "Old Egyptian", 447117, "egy", } m["egy-mid"] = { "Middle Egyptian", 657330, "egy", aliases = {"Classical Egyptian"}, } m["egy-nmi"] = { "Neo-Middle Egyptian", nil, "egy", aliases = {"Égyptien de tradition", "Traditional Egyptian"}, } m["egy-lat"] = { "Late Egyptian", 1852329, "egy", } -- Elamite varieties m["elx-old"] = { "Old Elamite", nil, "elx", } m["elx-mid"] = { "Middle Elamite", nil, "elx", } m["elx-neo"] = { "Neo-Elamite", nil, "elx", } m["elx-ach"] = { "Achaemenid Elamite", nil, "elx", } -- English, Scots and Old English varieties m["en-CA"] = { "Canadian English", 44676, "en", } m["en-GB"] = { "British English", 7979, "en", alias_codes = {"British English", "BE."} } m["en-US"] = { "American English", 7976, "en", alias_codes = {"American English", "AE."} } m["en-geo"] = { "Geordie English", nil, "en", ancestors = "enm-nor", } m["en-HK"] = { "Hong Kong English", 1068863, "en", } -- Scots varieties m["sco-osc"] = { "Early Scots", 5326738, "enm", ancestors = "enm-nor", aliases = {"Old Scots"}, alias_codes = {"Early Scots", "Old Scots", "O.Sc."} } m["sco-smi"] = { "Middle Scots", 3327000, "sco", ancestors = "sco-osc", alias_codes = {"Middle Scots", "Mid.Sc."} } m["sco-ins"] = { "Insular Scots", 16919205, "sco", alias_codes = {"Insular Scots", "Ins.Sc."} } m["sco-uls"] = { "Ulster Scots", 201966, "sco", alias_codes = {"Ulster Scots", "Uls.Sc."} } m["sco-nor"] = { "Northern Scots", 16928150, "sco", alias_codes = {"Northern Scots", "Nor.Sc."} } m["sco-sou"] = { "South Scots", 7570457, "sco", aliases = {"Southern Scots", "Borders Scots"}, alias_codes = {"Southern Scots", "Borders Scots", "Sou.Sc."} } -- Middle English varieties m["enm-nor"] = { "Northern Middle English", nil, "enm", ancestors = "ang-nor", aliases = {"Northumbrian Middle English"}, } -- Old English varieties -- Includes both Mercian and Northumbrian. m["ang-ang"] = { "Anglian Old English", nil, "ang", } m["ang-mer"] = { "Mercian Old English", nil, "ang", } m["ang-nor"] = { "Northumbrian Old English", 1798915, "ang", } --[[ m["ang-wsx"] = { "West Saxon Old English", nil, "ang", } ]] -- French and French-based creole varieties m["fro-nor"] = { "Old Northern French", 2044917, "fro", aliases = {"Old Norman", "Old Norman French"}, alias_codes = {"Old Northern French", "ONF."} } m["fro-pic"] = { "Picard Old French", nil, "fro", } m["xno"] = { "Anglo-Norman", 35214, "fro", } m["fr-CA"] = { "Canadian French", 1450506, "fr", alias_codes = {"Canadian French", "CF."} } m["fr-CH"] = { "Switzerland French", 1480152, "fr", alias_codes = {"Swiss French", "Switzerland French"} } m["fr-aca"] = { "Acadian French", 415109, "fr", alias_codes = {"Acadian French", "fra-aca"} } m["frc"] = { "Cajun French", 880301, "fr", aliases = {"Louisiana French"}, } m["ht-sdm"] = { "Saint Dominican Creole French", nil, "ht", ancestors = "fr", } -- Norman varieties m["nrf-grn"] = { "Guernsey Norman", 56428, "nrf", aliases = {"Guernsey"}, alias_codes = {"roa-grn"} } m["nrf-jer"] = { "Jersey Norman", 56430, "nrf", aliases = {"Jersey"}, alias_codes = {"roa-jer"} } -- Brythonic m["bry-ear"] = { "Early Brythonic", nil, "cel-bry-pro", } m["bry-lat"] = { "Late Brythonic", nil, "cel-bry-pro", } -- Gaulish m["xcg"] = { "Cisalpine Gaulish", 3832927, "cel-gau", } m["xtg"] = { "Transalpine Gaulish", 29977, "cel-gau", } -- Portuguese varieties m["pt-BR"] = { "Brazilian Portuguese", 750553, "pt", } -- Spanish varieties m["es-AR"] = { "Rioplatense Spanish", 509780, "es", } m["es-CO"] = { "Colombian Spanish", 1115875, "es", } m["es-CU"] = { "Cuban Spanish", 824909, "es", } m["es-MX"] = { "Mexican Spanish", 616620, "es", } m["es-US"] = { "United States Spanish", 2301077, "es", aliases = {"US Spanish"}, } --use label "US Spanish" to put Spanish terms in this category m["es-PR"] = { "Puerto Rican Spanish", 7258609, "es", } -- Germanic varieties -- (modern) German varieties m["de-AT"] = { "Austrian German", 306626, "de", alias_codes = {"Austrian German", "AG."} } m["de-AT-vie"] = { "Viennese German", 56474, "de-AT", alias_codes = {"Viennese German", "VG."} } m["de-CH"] = { "Swiss High German", 1366643, "de", aliases = {"Schweizer Hochdeutsch", "Swiss Standard German"}, } m["ksh"] = { "Kölsch", 4624, "gmw-cfr", alias_codes = {"Kölsch"} } m["pfl"] = { "Palatine German", 23014, "gmw-rfr", aliases = {"Pfälzisch", "Pälzisch", "Palatinate German"}, } m["sli"] = { "Silesian German", 152965, "gmw-ecg", aliases = {"Silesian"}, } m["sxu"] = { "Upper Saxon", 699284, "gmw-ecg", } -- Old High German varieties m["lng"] = { "Lombardic", 35972, "goh", alias_codes = {"Lombardic", "goh-lng"} } -- Proto-West Germanic varieties m["frk"] = { "Frankish", 10860505, "gmw-pro", aliases = {"Old Frankish"}, } -- Alemannic German varieties m["gsw-FR"] = { "Alsatian", 8786, "gsw", wikipedia_article = "Alsatian dialect", } -- Old Norse varieties m["non-oen"] = { "Old East Norse", 10498031, "non", } m["non-ogt"] = { "Old Gutnish", 1133488, "non", aliases = {"Old Gotlandic"}, } m["non-own"] = { "Old West Norse", 10498026, "non", } -- Greek varieties m["qfa-sub-grc"] = { "Pre-Greek", 965052, "und", family = "qfa-sub", alias_codes = {"pregrc"} } m["grc-boi"] = { "Boeotian Greek", 406373, "grc-aeo", } m["grc-koi"] = { "Koine Greek", 107358, "grc", ancestors = "grc-att", aliases = {"Hellenistic Greek"}, alias_codes = {"Koine"} } m["gkm"] = { "Byzantine Greek", 36387, "grc", ancestors = "grc-koi", aliases = {"Medieval Greek"}, alias_codes = {"Medieval Greek"} } m["grc-dor"] = { "Doric Greek", 285494, "grc", } m["grc-att"] = { "Attic Greek", 506588, "grc", } m["grc-ion"] = { "Ionic Greek", 504165, "grc", } m["grc-pam"] = { "Pamphylian Greek", 2271793, "grc", } m["grc-kre"] = { -- code used elsewhere: see [[Module:grc:Dialects]] "Cretan Ancient Greek", -- to distinguish from Cretan Greek below nil, "grc-dor", } m["grc-arp"] = { "Arcadocypriot Greek", 499602, "grc", } m["grc-arc"] = { "Arcadian Greek", nil, "grc-arp", } m["el-cyp"] = { "Cypriot Greek", nil, "el", aliases = {"Cypriotic Greek"}, } m["el-pap"] = { "Paphian Greek", nil, "el", } m["grc-aeo"] = { "Aeolic Greek", 406373, "grc", aliases = {"Lesbic Greek", "Lesbian Greek", "Aeolian Greek"}, } m["loc-ozo"] = { "Ozolian Locrian", nil, "grc", } m["loc-opu"] = { "Opuntian Locrian", nil, "grc", } m["grc-ths"] = { "Thessalian Greek", 406373, "grc-aeo", } m["grc-ela"] = { "Elean Greek", nil, "grc", } m["grc-epc"] = { "Epic Greek", 990062, "grc", aliases = {"Homeric Greek"}, } m["el-crt"] = { "Cretan Greek", 588306, "el", } m["el-kth"] = { "Katharevousa", 31035762, "el", ancestors = "gkm", aliases = {"Katharevousa Greek"}, } -- Hebrew varieties m["hbo"] = { "Biblical Hebrew", 1982248, "he", aliases = {"Classical Hebrew"}, } m["he-mis"] = { "Mishnaic Hebrew", 1649362, "he", ancestors = "hbo", } m["he-med"] = { "Medieval Hebrew", 2712572, "he", ancestors = "he-mis", } m["he-IL"] = { "Israeli Hebrew", 8141, "he", } m["bsh-kat"] = { "Kativiri", 2605045, "bsh", aliases = {"Katə́viri"}, } m["xvi"] = { "Kamviri", 1193495, "bsh", aliases = {"Kamvíri"}, alias_codes = {"bsh-kam"} } m["bsh-mum"] = { "Mumviri", nil, aliases = {"Mumvíri"}, "bsh" } -- Iranian varieties: m["qfa-sub-bma"] = { "the BMAC substrate", 1054850, "und", family = "qfa-sub", } -- Historical and current Iranian dialects m["ae-old"] = { "Old Avestan", 29572, "ae", aliases = {"Gathic Avestan"}, } m["ae-yng"] = { "Younger Avestan", 29572, "ae-old", aliases = {"Young Avestan"}, } m["bcc"] = { "Southern Balochi", 33049, "bal", aliases = {"Southern Baluchi"}, alias_codes = {"bal-sou"} } m["bgp"] = { "Eastern Balochi", 33049, "bal", aliases = {"Eastern Baluchi"}, alias_codes = {"bal-eas"} } m["bgn"] = { "Western Balochi", 33049, "bal", aliases = {"Western Baluchi"}, alias_codes = {"bal-wes"} } m["bsg-ban"] = { "Bandari", nil, "bsg", } m["bsg-bas"] = { "Bashkardi", nil, "bsg", } m["bsg-hor"] = { "Hormozi", nil, "bsg", } m["bsg-min"] = { "Minabi", nil, "bsg", } m["kho-old"] = { "Old Khotanese", nil, "kho", } m["kho-lat"] = { "Late Khotanese", nil, "kho-old", } m["peo-ear"] = { "Early Old Persian", nil, "peo", } m["peo-lat"] = { "Late Old Persian", nil, "peo", } m["pal-ear"] = { "Early Middle Persian", nil, "pal", } m["pal-lat"] = { "Late Middle Persian", nil, "pal", ancestors = "pal-ear", } m["ps-nwe"] = { "Northwestern Pashto", nil, "ps", } m["ps-cgi"] = { "Central Ghilzay", nil, "ps-nwe", } m["ps-mah"] = { "Mahsudi", nil, "ps-nwe", } m["ps-nea"] = { "Northeastern Pashto", nil, "ps", } m["ps-afr"] = { "Afridi", nil, "ps-nea", } m["ps-bng"] = { "Bangash", nil, "ps-nea", } m["ps-xat"] = { "Khatak", nil, "ps-nea", } m["ps-pes"] = { "Peshawari", nil, "ps-nea", } m["ps-sea"] = { "Southeastern Pashto", nil, "ps", } m["ps-ban"] = { "Bannu", nil, "ps-sea", } m["ps-kak"] = { "Kakari", nil, "ps-sea", } m["ps-ser"] = { "Sher", nil, "ps-sea", } m["ps-waz"] = { "Waziri", 12274473, "ps-sea", } m["ps-swe"] = { "Southwestern Pashto", nil, "ps", } m["ps-kan"] = { "Kandahari", nil, "ps-swe", } m["ps-jad"] = { "Jadrani", nil, "ps", ancestors = "ira-pat-pro" } m["xme-azr"] = { "Old Azari", nil, "xme-ott", aliases = {"Old Azeri", "Azari", "Azeri", "Āḏarī", "Adari", "Adhari"}, } m["xme-ttc-cen"] = { "Central Tati", nil, "xme-ott", } m["xme-ttc-eas"] = { "Eastern Tati", nil, "xme-ott", } m["xme-ttc-nor"] = { "Northern Tati", nil, "xme-ott", } m["xme-ttc-sou"] = { "Southern Tati", nil, "xme-ott", } m["xme-ttc-wes"] = { "Western Tati", nil, "xme-ott", } m["xmn"] = { "Manichaean Middle Persian", nil, "pal-lat", } m["fa-ira"] = { "Iranian Persian", 3513637, "fa", aliases = {"Modern Persian", "Western Persian"}, } m["fa-cls"] = { "Classical Persian", 9168, "fa", ancestors = "pal-lat", } m["prs"] = { "Dari", 178440, "fa", aliases = {"Dari Persian", "Central Persian", "Eastern Persian", "Afghan Persian"}, } m["os-dig"] = { "Digor", 3027861, "os", aliases = {"Digoron"}, } m["os-iro"] = { "Iron", nil, "os", } m["sog-ear"] = { "Early Sogdian", nil, "sog", } m["sog-lat"] = { "Late Sogdian", nil, "sog-ear", } m["oru-kan"] = { "Kaniguram", 6363164, "oru", } m["oru-log"] = { "Logar", nil, "oru", } m["oos-ear"] = { "Early Old Ossetic", nil, "oos", } m["oos-lat"] = { "Late Old Ossetic", nil, "oos", } m["xln"] = { "Alanic", 3658580, "oos", } m["rdb-rud"] = { "Rudbari", nil, "rdb", } m["rdb-jir"] = { "Jirofti", nil, "rdb", } m["rdb-kah"] = { "Kahnuji", nil, "rdb", } -- Southwestern Fars lects m["fay-bur"] = { "Burenjani", nil, "fay", } m["fay-bsh"] = { "Bushehri", nil, "fay", } m["fay-dsh"] = { "Dashtaki", nil, "fay", } m["fay-dav"] = { "Davani", 5228140, "fay", } m["fay-eze"] = { "Emamzada Esma’ili", nil, "fay", } m["fay-gav"] = { "Gavkoshaki", nil, "fay", } m["fay-kho"] = { "Khollari", nil, "fay", } m["fay-kon"] = { "Kondazi", nil, "fay", } m["fay-kzo"] = { "Old Kazeruni", nil, "fay", } m["fay-mas"] = { "Masarami", nil, "fay", } m["fay-pap"] = { "Papuni", nil, "fay", } m["fay-sam"] = { "Samghani", nil, "fay", } m["fay-shr"] = { "Shirazi", nil, "fay", } m["fay-sho"] = { "Old Shirazi", nil, "fay", } m["fay-sam"] = { "Samghani", nil, "fay", } m["fay-kar"] = { "Khargi", nil, "fay", } m["fay-sor"] = { "Sorkhi", nil, "fay", } -- Talysh lects m["tly-cen"] = { "Central Talysh", nil, "tly", } m["tly-asa"] = { "Asalemi", nil, "tly-cen", } m["tly-kar"] = { "Karganrudi", nil, "tly-cen", } m["tly-tul"] = { "Tularudi", nil, "tly-cen", } m["tly-tal"] = { "Taleshdulabi", nil, "tly-cen", } m["tly-nor"] = { "Northern Talysh", nil, "tly", } m["tly-aze"] = { "Azerbaijani Talysh", nil, "tly-nor", } m["tly-anb"] = { "Anbarani", nil, "tly-nor", } m["tly-sou"] = { "Southern Talysh", nil, "tly", } m["tly-fum"] = { "Fumani", nil, "tly-sou", } m["tly-msu"] = { "Masulei", nil, "tly-sou", } m["tly-msa"] = { "Masali", nil, "tly-sou", } m["tly-san"] = { "Shandarmani", nil, "tly-sou", } -- Tafreshi lects m["xme-amo"] = { "Amorehi", nil, "xme-taf", } m["atn"] = { "Ashtiani", 3436590, "xme-taf", wikipedia_article = "Ashtiani language", alias_codes = {"xme-ast"} } m["xme-bor"] = { "Borujerdi", nil, "xme-taf", } m["xme-ham"] = { "Hamadani", 6302426, "xme-taf", } m["xme-kah"] = { "Kahaki", nil, "xme-taf", } m["vaf"] = { "Vafsi", 32611, "xme-taf", alias_codes = {"xme-vaf"} } -- Kermanic lects m["kfm"] = { "Khunsari", 6403030, "xme-ker", wikipedia_article = "Khunsari language", alias_codes = {"xme-xun"} } m["xme-mah"] = { "Mahallati", nil, "xme-ker", } m["xme-von"] = { "Vonishuni", nil, "xme-ker", } m["xme-bdr"] = { "Badrudi", nil, "xme-ker", } m["xme-del"] = { "Delijani", nil, "xme-ker", } m["xme-kas"] = { "Kashani", nil, "xme-ker", } m["xme-kes"] = { "Kesehi", nil, "xme-ker", } m["xme-mey"] = { "Meymehi", nil, "xme-ker", } m["ntz"] = { "Natanzi", 6968399, "xme-ker", wikipedia_article = "Natanzi language", alias_codes = {"xme-nat"} } m["xme-abz"] = { "Abuzeydabadi", nil, "xme-ker", } m["xme-aby"] = { "Abyanehi", nil, "xme-ker", } m["xme-far"] = { "Farizandi", nil, "xme-ker", } m["xme-jow"] = { "Jowshaqani", nil, "xme-ker", } m["xme-nas"] = { "Nashalji", nil, "xme-ker", } m["xme-qoh"] = { "Qohrudi", nil, "xme-ker", } m["xme-yar"] = { "Yarandi", nil, "xme-ker", } m["soj"] = { "Soi", 7930463, "xme-ker", aliases = {"Sohi"}, wikipedia_article = "Soi language", alias_codes = {"xme-soi"} } m["xme-tar"] = { "Tari", nil, "xme-ker", } m["gzi"] = { "Gazi", 5529130, "xme-ker", wikipedia_article = "Gazi language", alias_codes = {"xme-gaz"} } m["xme-sed"] = { "Sedehi", nil, "xme-ker", } m["xme-ard"] = { "Ardestani", nil, "xme-ker", } m["xme-zef"] = { "Zefrehi", nil, "xme-ker", } m["xme-isf"] = { "Isfahani", nil, "xme-ker", } m["xme-kaf"] = { "Kafroni", nil, "xme-ker", } m["xme-vrz"] = { "Varzenehi", nil, "xme-ker", } m["xme-xur"] = { "Khuri", nil, "xme-ker", } m["nyq"] = { "Nayini", 6983146, "xme-ker", wikipedia_article = "Nayini language", alias_codes = {"xme-nay"} } m["xme-ana"] = { "Anaraki", nil, "xme-ker", } m["gbz"] = { "Zoroastrian Dari", 32389, "xme-ker", aliases = {"Behdināni", "Gabri", "Gavrŭni", "Gabrōni"}, wikipedia_article = "Zoroastrian Dari language", alias_codes = {"xme-dar"} } m["xme-krm"] = { "Kermani", nil, "xme-ker", } m["xme-yaz"] = { "Yazdi", nil, "xme-ker", } m["xme-bid"] = { "Bidhandi", nil, "xme-ker", } m["xme-bij"] = { "Bijagani", nil, "xme-ker", } m["xme-cim"] = { "Chimehi", nil, "xme-ker", } m["xme-han"] = { "Hanjani", nil, "xme-ker", } m["xme-kom"] = { "Komjani", nil, "xme-ker", } m["xme-nar"] = { "Naraqi", nil, "xme-ker", } m["xme-nus"] = { "Nushabadi", nil, "xme-ker", } m["xme-qal"] = { "Qalhari", nil, "xme-ker", } m["xme-trh"] = { "Tarehi", nil, "xme-ker", } m["xme-val"] = { "Valujerdi", nil, "xme-ker", } m["xme-var"] = { "Varani", nil, "xme-ker", } m["xme-zor"] = { "Zori", nil, "xme-ker", } -- Ramandi lects m["tks-ebr"] = { "Ebrahimabadi", nil, "tks", } m["tks-sag"] = { "Sagzabadi", nil, "tks", } m["tks-esf"] = { "Esfarvarini", nil, "tks", } m["tks-tak"] = { "Takestani", nil, "tks", } m["tks-cal"] = { "Chali", nil, "tks", aliases = {"Chāli"}, wikipedia_article = "Tati language (Iran)", } m["tks-dan"] = { "Danesfani", nil, "tks", } m["tks-xia"] = { "Khiaraji", nil, "tks", } m["tks-xoz"] = { "Khoznini", nil, "tks", } -- Shughni dialects m["sgh-bro"] = { "Bartangi-Oroshori", nil, "sgh", } m["sgh-bar"] = { "Bartangi", nil, "sgh-bro", } m["sgh-oro"] = { "Oroshori", nil, "sgh-bro", aliases = {"Roshorvi"}, } m["sgh-rsx"] = { "Roshani-Khufi", nil, "sgh", } m["sgh-xuf"] = { "Khufi", 2562249, "sgh-rsx", aliases = {"Xufi", "Xūfī"}, wikipedia_article = "Khufi language", } m["sgh-ros"] = { "Roshani", 2597566, "sgh-rsx", aliases = {"Rushani", "Rōšāni"}, wikipedia_article = "Rushani language", } m["sgh-xgb"] = { "Khughni-Bajui", nil, "sgh", } m["sgh-xug"] = { "Khughni", nil, "sgh-xgb", } m["sgh-baj"] = { "Bajui", nil, "sgh-xgb", } -- Indo-Aryan varieties m["inc-mit"] = { "Mitanni", 1986700, "inc-pro", } m["awa-old"] = { "Old Awadhi", nil, "awa", } m["bra-old"] = { "Old Braj", nil, "bra", } m["gu-kat"] = { "Kathiyawadi", nil, "gu", aliases = {"Kathiyawadi Gujarati", "Kathiawadi"}, } m["gu-lda"] = { "Lisan ud-Dawat Gujarati", nil, "gu", aliases = {"Lisan ud-Dawat", "LDA"}, } m["hi-mum"] = { "बंबइया हिंदी", 3543151, "hi", aliases = {"बांबे हिंदी", "मुंबइया हिंदी"}, } m["hi-mid"] = { "मध्य हिंदी", nil, "hi", } m["sa-bhs"] = { "बौद्ध संकर संस्कृत", 248758, "sa", } m["sa-bra"] = { "ब्राह्मण संस्कृत", 36858, "sa", } m["sa-cls"] = { "लौकिक संस्कृत", 11059, "sa", } m["sa-neo"] = { "नई संस्कृत", 11059, "sa", } m["sa-ved"] = { "वैदिक संस्कृत", 36858, "sa", } m["si-med"] = { "Medieval Sinhalese", nil, "si", aliases = {"Medieval Sinhala"}, } m["kok-mid"] = { "Middle Konkani", nil, "kok", aliases = {"Medieval Konkani"}, } m["kok-old"] = { "Old Konkani", nil, "kok", aliases = {"Early Konkani"}, } -- Indian subcontinent languages -- Dhivehi varieties m["mlk-dv"] = { "Mulaku Dhivehi", nil, "dv", aliases = {"Mulaku Divehi", "Mulaku Bas"}, } m["hvd-dv"] = { "Huvadhu Dhivehi", nil, "dv", aliases = {"Huvadhu Divehi", "Huvadhu Bas"}, } m["add-dv"] = { "Addu Dhivehi", nil, "dv", aliases = {"Addu Divehi", "Addu Bas"}, } -- Dravidian varieties m["ta-mid"] = { "Middle Tamil", 20987434, "ta", } m["kn-hav"] = { "Havigannada", 24276369, "kn", } m["kn-kun"] = { "Kundagannada", 6444255, "kn", } -- Prakrits m["inc-pka"] = { "अर्धमागधी प्राकृत", 35217, "inc-pra", aliases = {"अर्धमागधी", "अर्द्धमागधी", "अर्द्धमागधी प्राकृत"}, } m["inc-elu"] = { "Helu Prakrit", 15080869, "inc-pra", aliases = {"Elu", "Elu Prakrit", "Helu"}, } m["inc-khs"] = { "खस प्राकृत", nil, "inc-pra", aliases = {"खस"}, } m["inc-pmg"] = { "मागधी प्राकृत", 2652214, aliases = {"मागधी"}, "inc-pra", } m["inc-pmh"] = { "महाराष्ट्री प्राकृत", 2586773, "inc-pra", aliases = {"Maharashtri Prakrit", "Maharastri", "Maharashtri"}, } m["inc-psi"] = { "पैशाची प्राकृत", 2995607, "inc-pra", aliases = {"पैशाची", "पैसाची"}, } m["inc-pse"] = { "शौरसेनी प्राकृत", 2452885, "inc-pra", aliases = {"सौरसेनी", "शौरसेनी"}, } m["prk-avt"] = { "अवंती", nil, "inc-pra", aliases = {"अवंती प्राकृत", "अवन्ती प्राकृत", "अवन्ती"}, } m["prc-prk"] = { "प्राच्य", nil, "inc-pra", aliases = {"प्राच्य प्राकृत"}, } m["bhl-prk"] = { "Bahliki", nil, "inc-pra", aliases = {"Bahliki Prakrit"}, } m["dks-prk"] = { "Daksinatya", nil, "inc-pra", aliases = {"Daksinatya Prakrit"}, } m["skr-prk"] = { "Sakari", nil, "inc-pra", aliases = {"Sakari Prakrit"}, } m["cnd-prk"] = { "Candali", nil, "inc-pra", aliases = {"Candali Prakrit"}, } m["sbr-prk"] = { "Sabari", nil, "inc-pra", aliases = {"Sabari Prakrit"}, } m["abh-prk"] = { "Abhiri", nil, "inc-pra", aliases = {"Abhiri Prakrit"}, } m["drm-prk"] = { "Dramili", nil, "inc-pra", aliases = {"Dramili Prakrit"}, } m["odr-prk"] = { "Odri", nil, "inc-pra", aliases = {"Odri Prakrit"}, } -- Italian, Latin and other Italic varieties m["it-oit"] = { "Old Italian", 652, "it", alias_codes = {"roa-oit"} } m["it-CH"] = { "Switzerland Italian", 672147, "it", alias_codes = {"Swiss Italian", "Switzerland Italian"} } -- Latin varieties by period m["itc-ola"] = { "Old Latin", 12289, "la", } m["la-cla"] = { "Classical Latin", 253854, "la", ancestors = "itc-ola", alias_codes = {"Classical Latin", "CL.", "CL"} } m["la-lat"] = { "Late Latin", 1503113, "la", ancestors = "la-cla", alias_codes = {"Late Latin", "LL.", "LL"} } m["la-vul"] = { "Vulgar Latin", 37560, "la", ancestors = "la-cla", alias_codes = {"Vulgar Latin", "VL.", "VL"} } m["la-med"] = { "Medieval Latin", 1163234, "la", ancestors = "la-lat", alias_codes = {"Medieval Latin", "ML.", "ML"} } m["la-ecc"] = { "Ecclesiastical Latin", 1247932, "la", aliases = {"Church Latin"}, ancestors = "la-lat", alias_codes = {"Ecclesiastical Latin", "EL.", "EL"} } m["la-ren"] = { "Renaissance Latin", 499083, "la", ancestors = "la-med", alias_codes = {"Renaissance Latin", "RL.", "RL"} } m["la-new"] = { "New Latin", 1248221, "la", aliases = {"Modern Latin"}, ancestors = "la-ren", alias_codes = {"New Latin", "NL.", "NL"} } -- other Italic lects m["osc-luc"] = { "Lucanian", nil, "osc", } m["osc-sam"] = { "Samnite", nil, "osc", } m["xum-her"] = { "Hernician", nil, "xum", } -- Malay and related varieties m["ms-old"] = { "Old Malay", nil, "ms", } m["ms-cla"] = { "Classical Malay", nil, "ms", ancestors = "ms-old", } m["pse-bsm"] = { "Besemah", nil, "pse", } m["bew-kot"] = { "Betawi Kota", nil, "bew", } m["bew-ora"] = { "Betawi Ora", nil, "bew", } m["bew-udi"] = { "Betawi Udik", nil, "bew", } -- Mongolic lects m["xng-ear"] = { "Early Middle Mongol", nil, "xng", } m["xng-lat"] = { "Late Middle Mongol", nil, "xng", ancestors = "xng-ear", } m["mn-kha"] = { "Khalkha Mongolian", 6399808, "mn", aliases = {"Khalkha"}, } m["mn-ord"] = { "Ordos Mongolian", 716904, "mn", aliases = {"Ordos"}, } m["mn-cha"] = { "Chakhar Mongolian", 907425, "mn", aliases = {"Chakhar"}, } m["mn-khr"] = { "Khorchin Mongolian", 3196210, "mn", aliases = {"Khorchin"}, } -- Japanese varieties m["ja-mid"] = { "Middle Japanese", 6841474, "ojp", ancestors = "ojp", } m["ja-mid-ear"] = { "Early Middle Japanese", 182695, "ja-mid", } m["ja-mid-lat"] = { "Late Middle Japanese", 1816184, "ja-mid", ancestors = "ja-mid-ear", } m["ja-ear"] = { "Early Modern Japanese", 5326692, "ja", ancestors = "ja-mid-lat", } -- Kartvelian varieties m["ka-mid"] = { "Middle Georgian", nil, "ka", ancestors = "oge", } -- Korean varieties m["oko-lat"] = { "Late Old Korean", nil, "oko", } m["okm-ear"] = { "Early Middle Korean", nil, "okm", } m["ko-c"] = { "Central Korean", nil, "ko", } m["ko-se"] = { "Southeastern Korean", nil, "ko", } m["ko-sw"] = { "Southwestern Korean", nil, "ko", } m["ko-nw"] = { "Northwestern Korean", nil, "ko", } m["ko-ne"] = { "Northeastern Korean", nil, "ko", } m["ko-yuk"] = { "Yukjin Korean", nil, "ko", } -- Occitan varieties m["oc-auv"] = { "Auvergnat", 35359, "oc", aliases = {"Auvernhat", "Auvergnese"}, } m["oc-gas"] = { "Gascon", 35735, "oc", } -- standardized dialect of Gascon m["oc-ara"] = { "Aranese", 10196, "oc-gas", } m["oc-lan"] = { "Languedocien", 942602, "oc", aliases = {"Lengadocian"}, } m["oc-lim"] = { "Limousin", 427614, "oc", } m["oc-pro"] = { "Provençal", 241243, "oc", aliases = {"Provencal"}, alias_codes = {"prv"} } m["oc-pro-old"] = { "Old Provençal", 2779185, "pro", } m["oc-viv"] = { "Vivaro-Alpine", 1649613, "oc", } m["oc-jud"] = { "Shuadit", 56472, "oc", aliases = { "Chouhadite", "Chouhadit", "Chouadite", "Chouadit", "Shuhadit", "Judeo-Occitan", "Judæo-Occitan", "Judaeo-Occitan", "Judeo-Provençal", "Judæo-Provençal", "Judaeo-Provençal", "Judeo-Provencal", "Judaeo-Provencal", "Judeo-Comtadin", "Judæo-Comtadin", "Judaeo-Comtadin", }, } -- Oromo varieties m["hae"] = { "Harar Oromo", 5330355, "om", aliases = {"Eastern Oromo"}, } m["gax"] = { "Borana", 2910610, "om", aliases = {"Southern Oromo"}, } m["orc"] = { "Orma", 2919128, "om", } m["ssn"] = { "Waata", 3501553, "om", } -- Phillipine varieties m["tl-old"] = { "Old Tagalog", 12967437, "tl", } m["tl-cls"] = { "Classical Tagalog", nil, "tl", } -- Pre-Roman substrates m["qfa-sub-ibe"] = { "a pre-Roman substrate of Iberia", 530799, "und", family = "qfa-sub", } m["qfa-sub-bal"] = { "a pre-Roman substrate of the Balkans", 1815070, "und", family = "qfa-sub", } -- Sardinian varieties m["sc-src"] = { "Logudorese", 777974, "sc", aliases = {"Logudorese Sardinian"}, } m["sc-nuo"] = { "Nuorese", nil, "sc-src", aliases = {"Nuorese Sardinian"}, } m["sc-sro"] = { "Campidanese", 35348, "sc", aliases = {"Campidanese Sardinian"}, } -- Rwanda-Rundi varieties m["rw-kin"] = { "Kinyarwanda", 33573, "rw", aliases = {"Rwanda"}, } m["rw-run"] = { "Kirundi", 33583, "rw", aliases = {"Rundi"}, } -- Slavic varieties m["cs-ear"] = { "Early Modern Czech", nil, "cs", ancestors = "zlw-ocs" } m["cu-bgm"] = { "Middle Bulgarian", 12294897, "cu", } m["zle-mru"] = { "Middle Russian", 35228, "ru", alias_codes = {"zle-oru"} } m["zle-obe"] = { "Old Belarusian", 13211, "zle-ort", } m["zle-ouk"] = { "Old Ukrainian", 13211, "zle-ort", } m["zlw-mpl"] = { "Middle Polish", 402878, "pl", ancestors = "zlw-opl", } -- Serbo-Croatian varieties m["ckm"] = { "Chakavian Serbo-Croatian", 337565, "sh", aliases = {"Čakavian"}, alias_codes = {"sh-cha"} } m["kjv"] = { "Kajkavian Serbo-Croatian", 838165, "sh", alias_codes = {"sh-kaj"} } m["sh-tor"] = { -- Linguist code srp-tor "Torlakian Serbo-Croatian", 1078803, "sh", aliases = {"Torlak"}, } -- Tibetic lects m["adx"] = { "Amdo Tibetan", 56509, "bo", } m["kbg"] = { "Khamba", 12952626, "bo", } m["khg"] = { "Khams Tibetan", 56601, "bo", } m["tsk"] = { "Tseku", 11159532, "bo", } -- Tuareg lects m["thv"] = { "Tamahaq", 56703, "tmh", } m["ttq"] = { "Tawellemmet", 56390, "tmh", } m["taq"] = { "Tamasheq", 4670066, "tmh", } m["thz"] = { "Tayert", 56388, "tmh", } m["tmh-ght"] = { "Ghat", 47012900, "tmh", wikipedia_article = "Tamahaq language", } -- Turkic lects m["trk-cmn"] = { "Common Turkic", 1126028, "trk-pro", } m["trk-ogz-pro"] = { "Proto-Oghuz", 494600, "trk-pro", aliases = {"Southwestern Common Turkic"}, ancestors = "trk-pro", } m["otk-kir"] = { "Old Kirghiz", 83142, "otk", } m["klj-arg"] = { "Arghu", 33455, "klj", } m["qwm-arm"] = { "Armeno-Kipchak", 2027503, "qwm", } m["qwm-mam"] = { "Mamluk-Kipchak", 4279942, "qwm", } m["az-cls"] = { "Classical Azerbaijani", nil, "az", aliases = {"Classical Azeri"}, } m["qxq"] = { "Qashqai", 13192, "az", aliases = {"Qaşqay", "Qashqayi", "Kashkai", "Kashkay"}, } -- Other lects m["alv-kro"] = { "Kromanti", 1093206, "cpe-mar", } m["bat-pro"] = { "Proto-Baltic", 1703347, "ine-bsl-pro", } m["es-lun"] = { "Lunfardo", 1401612, "es", alias_codes = {"Lunfardo"} } m["fiu-pro"] = { "Proto-Finno-Ugric", 79890, "urj-pro", } m["gem-sue"] = { "Suevic", 155085, "gmw-pro", aliases = {"Suebian"}, } m["iro-ohu"] = { "Old Wendat", nil, "wdt", wikipedia_article = "Huron language", } m["iro-omo"] = { "Old Mohawk", nil, "moh", } m["iro-oon"] = { "Old Onondaga", nil, "ono", } m["okz-A"] = { "Angkorian Old Khmer", 9205, "okz", wikipedia_article = "Khmer language#Historical periods", } m["okz-P"] = { "Pre-Angkorian Old Khmer", 9205, "okz", wikipedia_article = "Khmer language#Historical periods", } m["mul-tax"] = { "taxonomic name", nil, "mul", alias_codes = {"Tax."} } m["qfa-pyg"] = { "a substrate language originally spoken by the Pygmies", nil, "und", family = "qfa-sub", wikipedia_article = "Classification of Pygmy languages#Original Pygmy language(s)", alias_codes = {"pygmy"} } m["tai-shz"] = { "Shangsi Zhuang", 13216, "za", } m["tbq-pro"] = { "Proto-Tibeto-Burman", 7251864, "sit-pro", } m["und-idn"] = { "Idiom Neutral", 35847, "und", -- or "vo" wikipedia_article = "Idiom Neutral", } m["und-tdl"] = { "Turduli", nil, "und", wikipedia_article = "Turduli", } m["und-tdt"] = { "Turdetani", nil, "und", wikipedia_article = "Turdetani", } m["und-xnu"] = { "Xiongnu", nil, "und", wikipedia_article = "Xiongnu", } m["urj-fpr-pro"] = { "Proto-Finno-Permic", nil, "urj-pro", } m["woy"] = { "Weyto", 3915918, "und", } m = require("Module:languages").addDefaultTypes(m, false, "etymology-only") return require("Module:languages").finalizeEtymologyData(m) mp2b51x2wk84mvk5ysqt192q1cjz3on 487567 487565 2026-09-01T16:16:37Z SM7 6218 487567 Scribunto text/plain local m = {} -- Albanian varieties m["aln"] = { "Gheg Albanian", 181037, "sq", aliases = {"Gheg"}, } m["aae"] = { "Arbëresh Albanian", 1075302, "sq", aliases = {"Arbëreshë", "Arbëresh"}, } m["aat"] = { "Arvanitika Albanian", 29347, "sq", aliases = {"Arvanitika"}, } m["als"] = { "Tosk Albanian", 180937, "sq", aliases = {"Tosk"}, } -- Bantu varieties m["bnt-cmn"] = { "Common Bantu", nil, "bnt-pro", } -- Semitic varieties -- Akkadian varieties m["akk-old"] = { "Old Akkadian", nil, "akk", } m["akk-obb"] = { "Old Babylonian", nil, "akk", } m["akk-oas"] = { "Old Assyrian", nil, "akk", } m["akk-mbb"] = { "Middle Babylonian", nil, "akk", } m["akk-mas"] = { "Middle Assyrian", nil, "akk", } m["akk-nbb"] = { "Neo-Babylonian", nil, "akk", } m["akk-nas"] = { "Neo-Assyrian", nil, "akk", } m["akk-lbb"] = { "Late Babylonian", nil, "akk", } m["akk-stb"] = { "Standard Babylonian", nil, "akk", } -- Arabic varieties m["jrb"] = { "Judeo-Arabic", 37733, "ar", } -- Aramaic varieties m["arc-bib"] = { "Biblical Aramaic", 843235, "arc", family = "sem-are", } m["arc-cpa"] = { "Christian Palestinian Aramaic", 60790119, "arc", family = "sem-arw", aliases = {"Melkite Aramaic", "Palestinian Syriac", "Syropalestinian Aramaic"}, } m["arc-imp"] = { "Imperial Aramaic", 7079491, "arc", aliases = {"Official Aramaic"}, } m["arc-hat"] = { "Hatran Aramaic", 3832926, "arc", family = "sem-are", } m["arc-jla"] = { "Jewish Literary Aramaic", 105952842, "arc", } m["arc-nab"] = { "Nabataean Aramaic", 36178, "arc", } m["arc-old"] = { "Old Aramaic", 3398392, "arc", } m["arc-pal"] = { "Palmyrene Aramaic", 1510113, "arc", family = "sem-arw", } m["tmr"] = { "Jewish Babylonian Aramaic", 33407, "arc", family = "sem-ase", } m["jpa"] = { "Jewish Palestinian Aramaic", 948909, "arc", family = "sem-arw", aliases = {"Galilean Aramaic"}, } -- Catalan varieties m["ca-val"] = { "Valencian", 32641, "ca", } -- Central Nicobarese varieties m["ncb-cam"] = { "Camorta", 5026908, "ncb", aliases = {"Kamorta"}, } m["ncb-kat"] = { "Katchal", 17064263, "ncb", aliases = {"Tehnu"}, } m["ncb-nan"] = { "Nancowry", 6962504, "ncb", aliases = {"Nankwari"}, } -- Chinese varieties m["och-ear"] = { "Early Old Chinese", nil, "och", } m["och-lat"] = { "Late Old Chinese", nil, "och", } m["ltc-ear"] = { "Early Middle Chinese", nil, "ltc", } m["ltc-lat"] = { "Late Middle Chinese", nil, "ltc", } m["cmn-ear"] = { "Early Mandarin", 837169, "cmn", } m["cmn-sic"] = { "Sichuanese", 2278732, "cmn", } m["wuu-sha"] = { "Shanghainese", 36718, "wuu", } m["hsn-old"] = { "Old Xiang", 7085453, "hsn", aliases = {"Lou-Shao"}, } m["zhx-pin"] = { "Pinghua", 2735715, "yue", } m["nan-hai"] = { "Hainanese", 934541, "nan", } m["nan-hok"] = { "Hokkien", 1624231, "nan", } m["nan-xm"] = { "Amoy", 68744, "nan-hok", aliases = {"Xiamenese"}, } m["nan-zz"] = { "Zhangzhou Hokkien", nil, "nan-hok", } m["nan-qz"] = { "Quanzhou Hokkien", nil, "nan-hok", } m["nan-jj"] = { "Jinjiang Hokkien", nil, "nan-qz", } m["nan-ph"] = { "Philippine Hokkien", 3236692, "nan-jj", } -- Chinese romanization -- [[Wiktionary:Information desk/2022/June#Etymology Coding Issue]] -- [[Wiktionary:Grease pit/2022/June#Transliteration Systems in Etymologies 2]] m["cmn-pinyin"] = { "Hanyu Pinyin", 42222, "cmn", aliases = {"Pinyin"}, } m["cmn-tongyong"] = { "Tongyong Pinyin", 700739, "cmn", } m["cmn-wadegile"] = { "Wade–Giles", 208442, "cmn", aliases = {"Wade-Giles", "Wade Giles"}, } -- Chinese cyrillization m["cmn-palladius"] = { "Palladius", 1234239, "cmn", aliases = {"Palladius system"}, } -- Coptic varieties m["cop-akh"] = { "Akhmimic Coptic", nil, "cop", aliases = {"Akhmimic"}, } m["cop-boh"] = { "Bohairic Coptic", 890733, "cop", aliases = {"Bohairic", "Memphitic Coptic", "Memphitic"}, } m["cop-ggg"] = { "Coptic Dialect G", nil, "cop", aliases = {"Dialect G", "Mansuric Coptic", "Mansuric"}, } m["cop-jjj"] = { "Coptic Dialect J", nil, "cop", } m["cop-kkk"] = { "Coptic Dialect K", nil, "cop", } m["cop-ppp"] = { "Coptic Dialect P", nil, "cop", aliases = {"Proto-Theban Coptic", "Palaeo-Theban Coptic"}, } m["cop-fay"] = { "Fayyumic Coptic", 1399115, "cop", aliases = {"Fayyumic", "Faiyumic Coptic", "Faiyumic", "Fayumic Coptic", "Fayumic", "Bashmuric Coptic", "Bashmuric"}, } m["cop-her"] = { "Hermopolitan Coptic", nil, "cop", aliases = {"Hermopolitan", "Coptic Dialect H", "Ashmuninic", "Ashmuninic Coptic"}, } m["cop-lyc"] = { "Lycopolitan Coptic", nil, "cop", aliases = { "Lycopolitan", "Assiutic Coptic", "Asyutic Coptic", "Assiutic", "Asyutic", "Lyco-Diospolitan Coptic", "Lyco-Diospolitan", "Subakhmimic Coptic", "Subakhmimic" }, } m["cop-old"] = { "Old Coptic", nil, "cop", } m["cop-oxy"] = { "Oxyrhynchite Coptic", nil, "cop", aliases = {"Oxyrhynchite", "Mesokemic Coptic", "Mesokemic", "Middle Egyptian Coptic"}, } m["cop-ply"] = { "Proto-Lycopolitan Coptic", nil, "cop", aliases = {"Coptic Dialect i", "Proto-Lyco-Diospolitan Coptic"}, } m["cop-sah"] = { "Sahidic Coptic", 2645851, "cop", aliases = {"Sahidic", "Saidic Coptic", "Saidic", "Thebaic Coptic", "Thebaic"}, } -- Dutch varieties m["nl-BE"] = { "Belgian Dutch", 34147, "nl", aliases = { "Flemish", "Flemish Dutch", "Southern Dutch"}, } -- Egyptian varieties m["egy-old"] = { "Old Egyptian", 447117, "egy", } m["egy-mid"] = { "Middle Egyptian", 657330, "egy", aliases = {"Classical Egyptian"}, } m["egy-nmi"] = { "Neo-Middle Egyptian", nil, "egy", aliases = {"Égyptien de tradition", "Traditional Egyptian"}, } m["egy-lat"] = { "Late Egyptian", 1852329, "egy", } -- Elamite varieties m["elx-old"] = { "Old Elamite", nil, "elx", } m["elx-mid"] = { "Middle Elamite", nil, "elx", } m["elx-neo"] = { "Neo-Elamite", nil, "elx", } m["elx-ach"] = { "Achaemenid Elamite", nil, "elx", } -- English, Scots and Old English varieties m["en-CA"] = { "Canadian English", 44676, "en", } m["en-GB"] = { "British English", 7979, "en", alias_codes = {"British English", "BE."} } m["en-US"] = { "American English", 7976, "en", alias_codes = {"American English", "AE."} } m["en-geo"] = { "Geordie English", nil, "en", ancestors = "enm-nor", } m["en-HK"] = { "Hong Kong English", 1068863, "en", } -- Scots varieties m["sco-osc"] = { "Early Scots", 5326738, "enm", ancestors = "enm-nor", aliases = {"Old Scots"}, alias_codes = {"Early Scots", "Old Scots", "O.Sc."} } m["sco-smi"] = { "Middle Scots", 3327000, "sco", ancestors = "sco-osc", alias_codes = {"Middle Scots", "Mid.Sc."} } m["sco-ins"] = { "Insular Scots", 16919205, "sco", alias_codes = {"Insular Scots", "Ins.Sc."} } m["sco-uls"] = { "Ulster Scots", 201966, "sco", alias_codes = {"Ulster Scots", "Uls.Sc."} } m["sco-nor"] = { "Northern Scots", 16928150, "sco", alias_codes = {"Northern Scots", "Nor.Sc."} } m["sco-sou"] = { "South Scots", 7570457, "sco", aliases = {"Southern Scots", "Borders Scots"}, alias_codes = {"Southern Scots", "Borders Scots", "Sou.Sc."} } -- Middle English varieties m["enm-nor"] = { "Northern Middle English", nil, "enm", ancestors = "ang-nor", aliases = {"Northumbrian Middle English"}, } -- Old English varieties -- Includes both Mercian and Northumbrian. m["ang-ang"] = { "Anglian Old English", nil, "ang", } m["ang-mer"] = { "Mercian Old English", nil, "ang", } m["ang-nor"] = { "Northumbrian Old English", 1798915, "ang", } --[[ m["ang-wsx"] = { "West Saxon Old English", nil, "ang", } ]] -- French and French-based creole varieties m["fro-nor"] = { "Old Northern French", 2044917, "fro", aliases = {"Old Norman", "Old Norman French"}, alias_codes = {"Old Northern French", "ONF."} } m["fro-pic"] = { "Picard Old French", nil, "fro", } m["xno"] = { "Anglo-Norman", 35214, "fro", } m["fr-CA"] = { "Canadian French", 1450506, "fr", alias_codes = {"Canadian French", "CF."} } m["fr-CH"] = { "Switzerland French", 1480152, "fr", alias_codes = {"Swiss French", "Switzerland French"} } m["fr-aca"] = { "Acadian French", 415109, "fr", alias_codes = {"Acadian French", "fra-aca"} } m["frc"] = { "Cajun French", 880301, "fr", aliases = {"Louisiana French"}, } m["ht-sdm"] = { "Saint Dominican Creole French", nil, "ht", ancestors = "fr", } -- Norman varieties m["nrf-grn"] = { "Guernsey Norman", 56428, "nrf", aliases = {"Guernsey"}, alias_codes = {"roa-grn"} } m["nrf-jer"] = { "Jersey Norman", 56430, "nrf", aliases = {"Jersey"}, alias_codes = {"roa-jer"} } -- Brythonic m["bry-ear"] = { "Early Brythonic", nil, "cel-bry-pro", } m["bry-lat"] = { "Late Brythonic", nil, "cel-bry-pro", } -- Gaulish m["xcg"] = { "Cisalpine Gaulish", 3832927, "cel-gau", } m["xtg"] = { "Transalpine Gaulish", 29977, "cel-gau", } -- Portuguese varieties m["pt-BR"] = { "Brazilian Portuguese", 750553, "pt", } -- Spanish varieties m["es-AR"] = { "Rioplatense Spanish", 509780, "es", } m["es-CO"] = { "Colombian Spanish", 1115875, "es", } m["es-CU"] = { "Cuban Spanish", 824909, "es", } m["es-MX"] = { "Mexican Spanish", 616620, "es", } m["es-US"] = { "United States Spanish", 2301077, "es", aliases = {"US Spanish"}, } --use label "US Spanish" to put Spanish terms in this category m["es-PR"] = { "Puerto Rican Spanish", 7258609, "es", } -- Germanic varieties -- (modern) German varieties m["de-AT"] = { "Austrian German", 306626, "de", alias_codes = {"Austrian German", "AG."} } m["de-AT-vie"] = { "Viennese German", 56474, "de-AT", alias_codes = {"Viennese German", "VG."} } m["de-CH"] = { "Swiss High German", 1366643, "de", aliases = {"Schweizer Hochdeutsch", "Swiss Standard German"}, } m["ksh"] = { "Kölsch", 4624, "gmw-cfr", alias_codes = {"Kölsch"} } m["pfl"] = { "Palatine German", 23014, "gmw-rfr", aliases = {"Pfälzisch", "Pälzisch", "Palatinate German"}, } m["sli"] = { "Silesian German", 152965, "gmw-ecg", aliases = {"Silesian"}, } m["sxu"] = { "Upper Saxon", 699284, "gmw-ecg", } -- Old High German varieties m["lng"] = { "Lombardic", 35972, "goh", alias_codes = {"Lombardic", "goh-lng"} } -- Proto-West Germanic varieties m["frk"] = { "Frankish", 10860505, "gmw-pro", aliases = {"Old Frankish"}, } -- Alemannic German varieties m["gsw-FR"] = { "Alsatian", 8786, "gsw", wikipedia_article = "Alsatian dialect", } -- Old Norse varieties m["non-oen"] = { "Old East Norse", 10498031, "non", } m["non-ogt"] = { "Old Gutnish", 1133488, "non", aliases = {"Old Gotlandic"}, } m["non-own"] = { "Old West Norse", 10498026, "non", } -- Greek varieties m["qfa-sub-grc"] = { "Pre-Greek", 965052, "und", family = "qfa-sub", alias_codes = {"pregrc"} } m["grc-boi"] = { "Boeotian Greek", 406373, "grc-aeo", } m["grc-koi"] = { "Koine Greek", 107358, "grc", ancestors = "grc-att", aliases = {"Hellenistic Greek"}, alias_codes = {"Koine"} } m["gkm"] = { "Byzantine Greek", 36387, "grc", ancestors = "grc-koi", aliases = {"Medieval Greek"}, alias_codes = {"Medieval Greek"} } m["grc-dor"] = { "Doric Greek", 285494, "grc", } m["grc-att"] = { "Attic Greek", 506588, "grc", } m["grc-ion"] = { "Ionic Greek", 504165, "grc", } m["grc-pam"] = { "Pamphylian Greek", 2271793, "grc", } m["grc-kre"] = { -- code used elsewhere: see [[Module:grc:Dialects]] "Cretan Ancient Greek", -- to distinguish from Cretan Greek below nil, "grc-dor", } m["grc-arp"] = { "Arcadocypriot Greek", 499602, "grc", } m["grc-arc"] = { "Arcadian Greek", nil, "grc-arp", } m["el-cyp"] = { "Cypriot Greek", nil, "el", aliases = {"Cypriotic Greek"}, } m["el-pap"] = { "Paphian Greek", nil, "el", } m["grc-aeo"] = { "Aeolic Greek", 406373, "grc", aliases = {"Lesbic Greek", "Lesbian Greek", "Aeolian Greek"}, } m["loc-ozo"] = { "Ozolian Locrian", nil, "grc", } m["loc-opu"] = { "Opuntian Locrian", nil, "grc", } m["grc-ths"] = { "Thessalian Greek", 406373, "grc-aeo", } m["grc-ela"] = { "Elean Greek", nil, "grc", } m["grc-epc"] = { "Epic Greek", 990062, "grc", aliases = {"Homeric Greek"}, } m["el-crt"] = { "Cretan Greek", 588306, "el", } m["el-kth"] = { "Katharevousa", 31035762, "el", ancestors = "gkm", aliases = {"Katharevousa Greek"}, } -- Hebrew varieties m["hbo"] = { "Biblical Hebrew", 1982248, "he", aliases = {"Classical Hebrew"}, } m["he-mis"] = { "Mishnaic Hebrew", 1649362, "he", ancestors = "hbo", } m["he-med"] = { "Medieval Hebrew", 2712572, "he", ancestors = "he-mis", } m["he-IL"] = { "Israeli Hebrew", 8141, "he", } m["bsh-kat"] = { "Kativiri", 2605045, "bsh", aliases = {"Katə́viri"}, } m["xvi"] = { "Kamviri", 1193495, "bsh", aliases = {"Kamvíri"}, alias_codes = {"bsh-kam"} } m["bsh-mum"] = { "Mumviri", nil, aliases = {"Mumvíri"}, "bsh" } -- Iranian varieties: m["qfa-sub-bma"] = { "the BMAC substrate", 1054850, "und", family = "qfa-sub", } -- Historical and current Iranian dialects m["ae-old"] = { "Old Avestan", 29572, "ae", aliases = {"Gathic Avestan"}, } m["ae-yng"] = { "Younger Avestan", 29572, "ae-old", aliases = {"Young Avestan"}, } m["bcc"] = { "Southern Balochi", 33049, "bal", aliases = {"Southern Baluchi"}, alias_codes = {"bal-sou"} } m["bgp"] = { "Eastern Balochi", 33049, "bal", aliases = {"Eastern Baluchi"}, alias_codes = {"bal-eas"} } m["bgn"] = { "Western Balochi", 33049, "bal", aliases = {"Western Baluchi"}, alias_codes = {"bal-wes"} } m["bsg-ban"] = { "Bandari", nil, "bsg", } m["bsg-bas"] = { "Bashkardi", nil, "bsg", } m["bsg-hor"] = { "Hormozi", nil, "bsg", } m["bsg-min"] = { "Minabi", nil, "bsg", } m["kho-old"] = { "Old Khotanese", nil, "kho", } m["kho-lat"] = { "Late Khotanese", nil, "kho-old", } m["peo-ear"] = { "Early Old Persian", nil, "peo", } m["peo-lat"] = { "Late Old Persian", nil, "peo", } m["pal-ear"] = { "Early Middle Persian", nil, "pal", } m["pal-lat"] = { "Late Middle Persian", nil, "pal", ancestors = "pal-ear", } m["ps-nwe"] = { "Northwestern Pashto", nil, "ps", } m["ps-cgi"] = { "Central Ghilzay", nil, "ps-nwe", } m["ps-mah"] = { "Mahsudi", nil, "ps-nwe", } m["ps-nea"] = { "Northeastern Pashto", nil, "ps", } m["ps-afr"] = { "Afridi", nil, "ps-nea", } m["ps-bng"] = { "Bangash", nil, "ps-nea", } m["ps-xat"] = { "Khatak", nil, "ps-nea", } m["ps-pes"] = { "Peshawari", nil, "ps-nea", } m["ps-sea"] = { "Southeastern Pashto", nil, "ps", } m["ps-ban"] = { "Bannu", nil, "ps-sea", } m["ps-kak"] = { "Kakari", nil, "ps-sea", } m["ps-ser"] = { "Sher", nil, "ps-sea", } m["ps-waz"] = { "Waziri", 12274473, "ps-sea", } m["ps-swe"] = { "Southwestern Pashto", nil, "ps", } m["ps-kan"] = { "Kandahari", nil, "ps-swe", } m["ps-jad"] = { "Jadrani", nil, "ps", ancestors = "ira-pat-pro" } m["xme-azr"] = { "Old Azari", nil, "xme-ott", aliases = {"Old Azeri", "Azari", "Azeri", "Āḏarī", "Adari", "Adhari"}, } m["xme-ttc-cen"] = { "Central Tati", nil, "xme-ott", } m["xme-ttc-eas"] = { "Eastern Tati", nil, "xme-ott", } m["xme-ttc-nor"] = { "Northern Tati", nil, "xme-ott", } m["xme-ttc-sou"] = { "Southern Tati", nil, "xme-ott", } m["xme-ttc-wes"] = { "Western Tati", nil, "xme-ott", } m["xmn"] = { "Manichaean Middle Persian", nil, "pal-lat", } m["fa-ira"] = { "Iranian Persian", 3513637, "fa", aliases = {"Modern Persian", "Western Persian"}, } m["fa-cls"] = { "Classical Persian", 9168, "fa", ancestors = "pal-lat", } m["prs"] = { "Dari", 178440, "fa", aliases = {"Dari Persian", "Central Persian", "Eastern Persian", "Afghan Persian"}, } m["os-dig"] = { "Digor", 3027861, "os", aliases = {"Digoron"}, } m["os-iro"] = { "Iron", nil, "os", } m["sog-ear"] = { "Early Sogdian", nil, "sog", } m["sog-lat"] = { "Late Sogdian", nil, "sog-ear", } m["oru-kan"] = { "Kaniguram", 6363164, "oru", } m["oru-log"] = { "Logar", nil, "oru", } m["oos-ear"] = { "Early Old Ossetic", nil, "oos", } m["oos-lat"] = { "Late Old Ossetic", nil, "oos", } m["xln"] = { "Alanic", 3658580, "oos", } m["rdb-rud"] = { "Rudbari", nil, "rdb", } m["rdb-jir"] = { "Jirofti", nil, "rdb", } m["rdb-kah"] = { "Kahnuji", nil, "rdb", } -- Southwestern Fars lects m["fay-bur"] = { "Burenjani", nil, "fay", } m["fay-bsh"] = { "Bushehri", nil, "fay", } m["fay-dsh"] = { "Dashtaki", nil, "fay", } m["fay-dav"] = { "Davani", 5228140, "fay", } m["fay-eze"] = { "Emamzada Esma’ili", nil, "fay", } m["fay-gav"] = { "Gavkoshaki", nil, "fay", } m["fay-kho"] = { "Khollari", nil, "fay", } m["fay-kon"] = { "Kondazi", nil, "fay", } m["fay-kzo"] = { "Old Kazeruni", nil, "fay", } m["fay-mas"] = { "Masarami", nil, "fay", } m["fay-pap"] = { "Papuni", nil, "fay", } m["fay-sam"] = { "Samghani", nil, "fay", } m["fay-shr"] = { "Shirazi", nil, "fay", } m["fay-sho"] = { "Old Shirazi", nil, "fay", } m["fay-sam"] = { "Samghani", nil, "fay", } m["fay-kar"] = { "Khargi", nil, "fay", } m["fay-sor"] = { "Sorkhi", nil, "fay", } -- Talysh lects m["tly-cen"] = { "Central Talysh", nil, "tly", } m["tly-asa"] = { "Asalemi", nil, "tly-cen", } m["tly-kar"] = { "Karganrudi", nil, "tly-cen", } m["tly-tul"] = { "Tularudi", nil, "tly-cen", } m["tly-tal"] = { "Taleshdulabi", nil, "tly-cen", } m["tly-nor"] = { "Northern Talysh", nil, "tly", } m["tly-aze"] = { "Azerbaijani Talysh", nil, "tly-nor", } m["tly-anb"] = { "Anbarani", nil, "tly-nor", } m["tly-sou"] = { "Southern Talysh", nil, "tly", } m["tly-fum"] = { "Fumani", nil, "tly-sou", } m["tly-msu"] = { "Masulei", nil, "tly-sou", } m["tly-msa"] = { "Masali", nil, "tly-sou", } m["tly-san"] = { "Shandarmani", nil, "tly-sou", } -- Tafreshi lects m["xme-amo"] = { "Amorehi", nil, "xme-taf", } m["atn"] = { "Ashtiani", 3436590, "xme-taf", wikipedia_article = "Ashtiani language", alias_codes = {"xme-ast"} } m["xme-bor"] = { "Borujerdi", nil, "xme-taf", } m["xme-ham"] = { "Hamadani", 6302426, "xme-taf", } m["xme-kah"] = { "Kahaki", nil, "xme-taf", } m["vaf"] = { "Vafsi", 32611, "xme-taf", alias_codes = {"xme-vaf"} } -- Kermanic lects m["kfm"] = { "Khunsari", 6403030, "xme-ker", wikipedia_article = "Khunsari language", alias_codes = {"xme-xun"} } m["xme-mah"] = { "Mahallati", nil, "xme-ker", } m["xme-von"] = { "Vonishuni", nil, "xme-ker", } m["xme-bdr"] = { "Badrudi", nil, "xme-ker", } m["xme-del"] = { "Delijani", nil, "xme-ker", } m["xme-kas"] = { "Kashani", nil, "xme-ker", } m["xme-kes"] = { "Kesehi", nil, "xme-ker", } m["xme-mey"] = { "Meymehi", nil, "xme-ker", } m["ntz"] = { "Natanzi", 6968399, "xme-ker", wikipedia_article = "Natanzi language", alias_codes = {"xme-nat"} } m["xme-abz"] = { "Abuzeydabadi", nil, "xme-ker", } m["xme-aby"] = { "Abyanehi", nil, "xme-ker", } m["xme-far"] = { "Farizandi", nil, "xme-ker", } m["xme-jow"] = { "Jowshaqani", nil, "xme-ker", } m["xme-nas"] = { "Nashalji", nil, "xme-ker", } m["xme-qoh"] = { "Qohrudi", nil, "xme-ker", } m["xme-yar"] = { "Yarandi", nil, "xme-ker", } m["soj"] = { "Soi", 7930463, "xme-ker", aliases = {"Sohi"}, wikipedia_article = "Soi language", alias_codes = {"xme-soi"} } m["xme-tar"] = { "Tari", nil, "xme-ker", } m["gzi"] = { "Gazi", 5529130, "xme-ker", wikipedia_article = "Gazi language", alias_codes = {"xme-gaz"} } m["xme-sed"] = { "Sedehi", nil, "xme-ker", } m["xme-ard"] = { "Ardestani", nil, "xme-ker", } m["xme-zef"] = { "Zefrehi", nil, "xme-ker", } m["xme-isf"] = { "Isfahani", nil, "xme-ker", } m["xme-kaf"] = { "Kafroni", nil, "xme-ker", } m["xme-vrz"] = { "Varzenehi", nil, "xme-ker", } m["xme-xur"] = { "Khuri", nil, "xme-ker", } m["nyq"] = { "Nayini", 6983146, "xme-ker", wikipedia_article = "Nayini language", alias_codes = {"xme-nay"} } m["xme-ana"] = { "Anaraki", nil, "xme-ker", } m["gbz"] = { "Zoroastrian Dari", 32389, "xme-ker", aliases = {"Behdināni", "Gabri", "Gavrŭni", "Gabrōni"}, wikipedia_article = "Zoroastrian Dari language", alias_codes = {"xme-dar"} } m["xme-krm"] = { "Kermani", nil, "xme-ker", } m["xme-yaz"] = { "Yazdi", nil, "xme-ker", } m["xme-bid"] = { "Bidhandi", nil, "xme-ker", } m["xme-bij"] = { "Bijagani", nil, "xme-ker", } m["xme-cim"] = { "Chimehi", nil, "xme-ker", } m["xme-han"] = { "Hanjani", nil, "xme-ker", } m["xme-kom"] = { "Komjani", nil, "xme-ker", } m["xme-nar"] = { "Naraqi", nil, "xme-ker", } m["xme-nus"] = { "Nushabadi", nil, "xme-ker", } m["xme-qal"] = { "Qalhari", nil, "xme-ker", } m["xme-trh"] = { "Tarehi", nil, "xme-ker", } m["xme-val"] = { "Valujerdi", nil, "xme-ker", } m["xme-var"] = { "Varani", nil, "xme-ker", } m["xme-zor"] = { "Zori", nil, "xme-ker", } -- Ramandi lects m["tks-ebr"] = { "Ebrahimabadi", nil, "tks", } m["tks-sag"] = { "Sagzabadi", nil, "tks", } m["tks-esf"] = { "Esfarvarini", nil, "tks", } m["tks-tak"] = { "Takestani", nil, "tks", } m["tks-cal"] = { "Chali", nil, "tks", aliases = {"Chāli"}, wikipedia_article = "Tati language (Iran)", } m["tks-dan"] = { "Danesfani", nil, "tks", } m["tks-xia"] = { "Khiaraji", nil, "tks", } m["tks-xoz"] = { "Khoznini", nil, "tks", } -- Shughni dialects m["sgh-bro"] = { "Bartangi-Oroshori", nil, "sgh", } m["sgh-bar"] = { "Bartangi", nil, "sgh-bro", } m["sgh-oro"] = { "Oroshori", nil, "sgh-bro", aliases = {"Roshorvi"}, } m["sgh-rsx"] = { "Roshani-Khufi", nil, "sgh", } m["sgh-xuf"] = { "Khufi", 2562249, "sgh-rsx", aliases = {"Xufi", "Xūfī"}, wikipedia_article = "Khufi language", } m["sgh-ros"] = { "Roshani", 2597566, "sgh-rsx", aliases = {"Rushani", "Rōšāni"}, wikipedia_article = "Rushani language", } m["sgh-xgb"] = { "Khughni-Bajui", nil, "sgh", } m["sgh-xug"] = { "Khughni", nil, "sgh-xgb", } m["sgh-baj"] = { "Bajui", nil, "sgh-xgb", } -- Indo-Aryan varieties m["inc-mit"] = { "Mitanni", 1986700, "inc-pro", } m["awa-old"] = { "Old Awadhi", nil, "awa", } m["bra-old"] = { "Old Braj", nil, "bra", } m["gu-kat"] = { "Kathiyawadi", nil, "gu", aliases = {"Kathiyawadi Gujarati", "Kathiawadi"}, } m["gu-lda"] = { "Lisan ud-Dawat Gujarati", nil, "gu", aliases = {"Lisan ud-Dawat", "LDA"}, } m["hi-mum"] = { "बंबइया हिंदी", 3543151, "hi", aliases = {"Mumbai Hindi", "Bambaiyya Hindi"}, } m["hi-mid"] = { "Middle Hindi", nil, "hi", } m["sa-bhs"] = { "Buddhist Hybrid Sanskrit", 248758, "sa", } m["sa-bra"] = { "Brahmanic Sanskrit", 36858, "sa", } m["sa-cls"] = { "Classical Sanskrit", 11059, "sa", } m["sa-neo"] = { "New Sanskrit", 11059, "sa", } m["sa-ved"] = { "Vedic Sanskrit", 36858, "sa", } m["si-med"] = { "Medieval Sinhalese", nil, "si", aliases = {"Medieval Sinhala"}, } m["kok-mid"] = { "Middle Konkani", nil, "kok", aliases = {"Medieval Konkani"}, } m["kok-old"] = { "Old Konkani", nil, "kok", aliases = {"Early Konkani"}, } -- Indian subcontinent languages -- Dhivehi varieties m["mlk-dv"] = { "Mulaku Dhivehi", nil, "dv", aliases = {"Mulaku Divehi", "Mulaku Bas"}, } m["hvd-dv"] = { "Huvadhu Dhivehi", nil, "dv", aliases = {"Huvadhu Divehi", "Huvadhu Bas"}, } m["add-dv"] = { "Addu Dhivehi", nil, "dv", aliases = {"Addu Divehi", "Addu Bas"}, } -- Dravidian varieties m["ta-mid"] = { "Middle Tamil", 20987434, "ta", } m["kn-hav"] = { "Havigannada", 24276369, "kn", } m["kn-kun"] = { "Kundagannada", 6444255, "kn", } -- Prakrits m["inc-pka"] = { "Ardhamagadhi Prakrit", 35217, "inc-pra", aliases = {"Ardhamagadhi"}, } m["inc-elu"] = { "Helu Prakrit", 15080869, "inc-pra", aliases = {"Elu", "Elu Prakrit", "Helu"}, } m["inc-khs"] = { "Khasa Prakrit", nil, "inc-pra", aliases = {"Khasa"}, } m["inc-pmg"] = { "Magadhi Prakrit", 2652214, aliases = {"Magadhi"}, "inc-pra", } m["inc-pmh"] = { "Maharastri Prakrit", 2586773, "inc-pra", aliases = {"Maharashtri Prakrit", "Maharastri", "Maharashtri"}, } m["inc-psi"] = { "Paisaci Prakrit", 2995607, "inc-pra", aliases = {"Paisaci", "Paisachi"}, } m["inc-pse"] = { "Sauraseni Prakrit", 2452885, "inc-pra", aliases = {"Sauraseni", "Shauraseni"}, } m["prk-avt"] = { "Avanti", nil, "inc-pra", aliases = {"Avanti Prakrit"}, } m["prc-prk"] = { "Pracya", nil, "inc-pra", aliases = {"Pracya Prakrit"}, } m["bhl-prk"] = { "Bahliki", nil, "inc-pra", aliases = {"Bahliki Prakrit"}, } m["dks-prk"] = { "Daksinatya", nil, "inc-pra", aliases = {"Daksinatya Prakrit"}, } m["skr-prk"] = { "Sakari", nil, "inc-pra", aliases = {"Sakari Prakrit"}, } m["cnd-prk"] = { "Candali", nil, "inc-pra", aliases = {"Candali Prakrit"}, } m["sbr-prk"] = { "Sabari", nil, "inc-pra", aliases = {"Sabari Prakrit"}, } m["abh-prk"] = { "Abhiri", nil, "inc-pra", aliases = {"Abhiri Prakrit"}, } m["drm-prk"] = { "Dramili", nil, "inc-pra", aliases = {"Dramili Prakrit"}, } m["odr-prk"] = { "Odri", nil, "inc-pra", aliases = {"Odri Prakrit"}, } -- Italian, Latin and other Italic varieties m["it-oit"] = { "Old Italian", 652, "it", alias_codes = {"roa-oit"} } m["it-CH"] = { "Switzerland Italian", 672147, "it", alias_codes = {"Swiss Italian", "Switzerland Italian"} } -- Latin varieties by period m["itc-ola"] = { "Old Latin", 12289, "la", } m["la-cla"] = { "Classical Latin", 253854, "la", ancestors = "itc-ola", alias_codes = {"Classical Latin", "CL.", "CL"} } m["la-lat"] = { "Late Latin", 1503113, "la", ancestors = "la-cla", alias_codes = {"Late Latin", "LL.", "LL"} } m["la-vul"] = { "Vulgar Latin", 37560, "la", ancestors = "la-cla", alias_codes = {"Vulgar Latin", "VL.", "VL"} } m["la-med"] = { "Medieval Latin", 1163234, "la", ancestors = "la-lat", alias_codes = {"Medieval Latin", "ML.", "ML"} } m["la-ecc"] = { "Ecclesiastical Latin", 1247932, "la", aliases = {"Church Latin"}, ancestors = "la-lat", alias_codes = {"Ecclesiastical Latin", "EL.", "EL"} } m["la-ren"] = { "Renaissance Latin", 499083, "la", ancestors = "la-med", alias_codes = {"Renaissance Latin", "RL.", "RL"} } m["la-new"] = { "New Latin", 1248221, "la", aliases = {"Modern Latin"}, ancestors = "la-ren", alias_codes = {"New Latin", "NL.", "NL"} } -- other Italic lects m["osc-luc"] = { "Lucanian", nil, "osc", } m["osc-sam"] = { "Samnite", nil, "osc", } m["xum-her"] = { "Hernician", nil, "xum", } -- Malay and related varieties m["ms-old"] = { "Old Malay", nil, "ms", } m["ms-cla"] = { "Classical Malay", nil, "ms", ancestors = "ms-old", } m["pse-bsm"] = { "Besemah", nil, "pse", } m["bew-kot"] = { "Betawi Kota", nil, "bew", } m["bew-ora"] = { "Betawi Ora", nil, "bew", } m["bew-udi"] = { "Betawi Udik", nil, "bew", } -- Mongolic lects m["xng-ear"] = { "Early Middle Mongol", nil, "xng", } m["xng-lat"] = { "Late Middle Mongol", nil, "xng", ancestors = "xng-ear", } m["mn-kha"] = { "Khalkha Mongolian", 6399808, "mn", aliases = {"Khalkha"}, } m["mn-ord"] = { "Ordos Mongolian", 716904, "mn", aliases = {"Ordos"}, } m["mn-cha"] = { "Chakhar Mongolian", 907425, "mn", aliases = {"Chakhar"}, } m["mn-khr"] = { "Khorchin Mongolian", 3196210, "mn", aliases = {"Khorchin"}, } -- Japanese varieties m["ja-mid"] = { "Middle Japanese", 6841474, "ojp", ancestors = "ojp", } m["ja-mid-ear"] = { "Early Middle Japanese", 182695, "ja-mid", } m["ja-mid-lat"] = { "Late Middle Japanese", 1816184, "ja-mid", ancestors = "ja-mid-ear", } m["ja-ear"] = { "Early Modern Japanese", 5326692, "ja", ancestors = "ja-mid-lat", } -- Kartvelian varieties m["ka-mid"] = { "Middle Georgian", nil, "ka", ancestors = "oge", } -- Korean varieties m["oko-lat"] = { "Late Old Korean", nil, "oko", } m["okm-ear"] = { "Early Middle Korean", nil, "okm", } m["ko-c"] = { "Central Korean", nil, "ko", } m["ko-se"] = { "Southeastern Korean", nil, "ko", } m["ko-sw"] = { "Southwestern Korean", nil, "ko", } m["ko-nw"] = { "Northwestern Korean", nil, "ko", } m["ko-ne"] = { "Northeastern Korean", nil, "ko", } m["ko-yuk"] = { "Yukjin Korean", nil, "ko", } -- Occitan varieties m["oc-auv"] = { "Auvergnat", 35359, "oc", aliases = {"Auvernhat", "Auvergnese"}, } m["oc-gas"] = { "Gascon", 35735, "oc", } -- standardized dialect of Gascon m["oc-ara"] = { "Aranese", 10196, "oc-gas", } m["oc-lan"] = { "Languedocien", 942602, "oc", aliases = {"Lengadocian"}, } m["oc-lim"] = { "Limousin", 427614, "oc", } m["oc-pro"] = { "Provençal", 241243, "oc", aliases = {"Provencal"}, alias_codes = {"prv"} } m["oc-pro-old"] = { "Old Provençal", 2779185, "pro", } m["oc-viv"] = { "Vivaro-Alpine", 1649613, "oc", } m["oc-jud"] = { "Shuadit", 56472, "oc", aliases = { "Chouhadite", "Chouhadit", "Chouadite", "Chouadit", "Shuhadit", "Judeo-Occitan", "Judæo-Occitan", "Judaeo-Occitan", "Judeo-Provençal", "Judæo-Provençal", "Judaeo-Provençal", "Judeo-Provencal", "Judaeo-Provencal", "Judeo-Comtadin", "Judæo-Comtadin", "Judaeo-Comtadin", }, } -- Oromo varieties m["hae"] = { "Harar Oromo", 5330355, "om", aliases = {"Eastern Oromo"}, } m["gax"] = { "Borana", 2910610, "om", aliases = {"Southern Oromo"}, } m["orc"] = { "Orma", 2919128, "om", } m["ssn"] = { "Waata", 3501553, "om", } -- Phillipine varieties m["tl-old"] = { "Old Tagalog", 12967437, "tl", } m["tl-cls"] = { "Classical Tagalog", nil, "tl", } -- Pre-Roman substrates m["qfa-sub-ibe"] = { "a pre-Roman substrate of Iberia", 530799, "und", family = "qfa-sub", } m["qfa-sub-bal"] = { "a pre-Roman substrate of the Balkans", 1815070, "und", family = "qfa-sub", } -- Sardinian varieties m["sc-src"] = { "Logudorese", 777974, "sc", aliases = {"Logudorese Sardinian"}, } m["sc-nuo"] = { "Nuorese", nil, "sc-src", aliases = {"Nuorese Sardinian"}, } m["sc-sro"] = { "Campidanese", 35348, "sc", aliases = {"Campidanese Sardinian"}, } -- Rwanda-Rundi varieties m["rw-kin"] = { "Kinyarwanda", 33573, "rw", aliases = {"Rwanda"}, } m["rw-run"] = { "Kirundi", 33583, "rw", aliases = {"Rundi"}, } -- Slavic varieties m["cs-ear"] = { "Early Modern Czech", nil, "cs", ancestors = "zlw-ocs" } m["cu-bgm"] = { "Middle Bulgarian", 12294897, "cu", } m["zle-mru"] = { "Middle Russian", 35228, "ru", alias_codes = {"zle-oru"} } m["zle-obe"] = { "Old Belarusian", 13211, "zle-ort", } m["zle-ouk"] = { "Old Ukrainian", 13211, "zle-ort", } m["zlw-mpl"] = { "Middle Polish", 402878, "pl", ancestors = "zlw-opl", } -- Serbo-Croatian varieties m["ckm"] = { "Chakavian Serbo-Croatian", 337565, "sh", aliases = {"Čakavian"}, alias_codes = {"sh-cha"} } m["kjv"] = { "Kajkavian Serbo-Croatian", 838165, "sh", alias_codes = {"sh-kaj"} } m["sh-tor"] = { -- Linguist code srp-tor "Torlakian Serbo-Croatian", 1078803, "sh", aliases = {"Torlak"}, } -- Tibetic lects m["adx"] = { "Amdo Tibetan", 56509, "bo", } m["kbg"] = { "Khamba", 12952626, "bo", } m["khg"] = { "Khams Tibetan", 56601, "bo", } m["tsk"] = { "Tseku", 11159532, "bo", } -- Tuareg lects m["thv"] = { "Tamahaq", 56703, "tmh", } m["ttq"] = { "Tawellemmet", 56390, "tmh", } m["taq"] = { "Tamasheq", 4670066, "tmh", } m["thz"] = { "Tayert", 56388, "tmh", } m["tmh-ght"] = { "Ghat", 47012900, "tmh", wikipedia_article = "Tamahaq language", } -- Turkic lects m["trk-cmn"] = { "Common Turkic", 1126028, "trk-pro", } m["trk-ogz-pro"] = { "Proto-Oghuz", 494600, "trk-pro", aliases = {"Southwestern Common Turkic"}, ancestors = "trk-pro", } m["otk-kir"] = { "Old Kirghiz", 83142, "otk", } m["klj-arg"] = { "Arghu", 33455, "klj", } m["qwm-arm"] = { "Armeno-Kipchak", 2027503, "qwm", } m["qwm-mam"] = { "Mamluk-Kipchak", 4279942, "qwm", } m["az-cls"] = { "Classical Azerbaijani", nil, "az", aliases = {"Classical Azeri"}, } m["qxq"] = { "Qashqai", 13192, "az", aliases = {"Qaşqay", "Qashqayi", "Kashkai", "Kashkay"}, } -- Other lects m["alv-kro"] = { "Kromanti", 1093206, "cpe-mar", } m["bat-pro"] = { "Proto-Baltic", 1703347, "ine-bsl-pro", } m["es-lun"] = { "Lunfardo", 1401612, "es", alias_codes = {"Lunfardo"} } m["fiu-pro"] = { "Proto-Finno-Ugric", 79890, "urj-pro", } m["gem-sue"] = { "Suevic", 155085, "gmw-pro", aliases = {"Suebian"}, } m["iro-ohu"] = { "Old Wendat", nil, "wdt", wikipedia_article = "Huron language", } m["iro-omo"] = { "Old Mohawk", nil, "moh", } m["iro-oon"] = { "Old Onondaga", nil, "ono", } m["okz-A"] = { "Angkorian Old Khmer", 9205, "okz", wikipedia_article = "Khmer language#Historical periods", } m["okz-P"] = { "Pre-Angkorian Old Khmer", 9205, "okz", wikipedia_article = "Khmer language#Historical periods", } m["mul-tax"] = { "taxonomic name", nil, "mul", alias_codes = {"Tax."} } m["qfa-pyg"] = { "a substrate language originally spoken by the Pygmies", nil, "und", family = "qfa-sub", wikipedia_article = "Classification of Pygmy languages#Original Pygmy language(s)", alias_codes = {"pygmy"} } m["tai-shz"] = { "Shangsi Zhuang", 13216, "za", } m["tbq-pro"] = { "Proto-Tibeto-Burman", 7251864, "sit-pro", } m["und-idn"] = { "Idiom Neutral", 35847, "und", -- or "vo" wikipedia_article = "Idiom Neutral", } m["und-tdl"] = { "Turduli", nil, "und", wikipedia_article = "Turduli", } m["und-tdt"] = { "Turdetani", nil, "und", wikipedia_article = "Turdetani", } m["und-xnu"] = { "Xiongnu", nil, "und", wikipedia_article = "Xiongnu", } m["urj-fpr-pro"] = { "Proto-Finno-Permic", nil, "urj-pro", } m["woy"] = { "Weyto", 3915918, "und", } m = require("Module:languages").addDefaultTypes(m, false, "etymology-only") return require("Module:languages").finalizeEtymologyData(m) g2n9zlaxb3l324xp2bafb588uzjw32e 487568 487567 2026-09-01T16:16:52Z SM7 6218 "[[मॉड्यूल:etymology languages/data]]" सुरक्षित किया ([सम्पादन=केवल प्रबंधक अनुमत] (हमेशा) [स्थानांतरण=केवल प्रबंधक अनुमत] (हमेशा)) 487567 Scribunto text/plain local m = {} -- Albanian varieties m["aln"] = { "Gheg Albanian", 181037, "sq", aliases = {"Gheg"}, } m["aae"] = { "Arbëresh Albanian", 1075302, "sq", aliases = {"Arbëreshë", "Arbëresh"}, } m["aat"] = { "Arvanitika Albanian", 29347, "sq", aliases = {"Arvanitika"}, } m["als"] = { "Tosk Albanian", 180937, "sq", aliases = {"Tosk"}, } -- Bantu varieties m["bnt-cmn"] = { "Common Bantu", nil, "bnt-pro", } -- Semitic varieties -- Akkadian varieties m["akk-old"] = { "Old Akkadian", nil, "akk", } m["akk-obb"] = { "Old Babylonian", nil, "akk", } m["akk-oas"] = { "Old Assyrian", nil, "akk", } m["akk-mbb"] = { "Middle Babylonian", nil, "akk", } m["akk-mas"] = { "Middle Assyrian", nil, "akk", } m["akk-nbb"] = { "Neo-Babylonian", nil, "akk", } m["akk-nas"] = { "Neo-Assyrian", nil, "akk", } m["akk-lbb"] = { "Late Babylonian", nil, "akk", } m["akk-stb"] = { "Standard Babylonian", nil, "akk", } -- Arabic varieties m["jrb"] = { "Judeo-Arabic", 37733, "ar", } -- Aramaic varieties m["arc-bib"] = { "Biblical Aramaic", 843235, "arc", family = "sem-are", } m["arc-cpa"] = { "Christian Palestinian Aramaic", 60790119, "arc", family = "sem-arw", aliases = {"Melkite Aramaic", "Palestinian Syriac", "Syropalestinian Aramaic"}, } m["arc-imp"] = { "Imperial Aramaic", 7079491, "arc", aliases = {"Official Aramaic"}, } m["arc-hat"] = { "Hatran Aramaic", 3832926, "arc", family = "sem-are", } m["arc-jla"] = { "Jewish Literary Aramaic", 105952842, "arc", } m["arc-nab"] = { "Nabataean Aramaic", 36178, "arc", } m["arc-old"] = { "Old Aramaic", 3398392, "arc", } m["arc-pal"] = { "Palmyrene Aramaic", 1510113, "arc", family = "sem-arw", } m["tmr"] = { "Jewish Babylonian Aramaic", 33407, "arc", family = "sem-ase", } m["jpa"] = { "Jewish Palestinian Aramaic", 948909, "arc", family = "sem-arw", aliases = {"Galilean Aramaic"}, } -- Catalan varieties m["ca-val"] = { "Valencian", 32641, "ca", } -- Central Nicobarese varieties m["ncb-cam"] = { "Camorta", 5026908, "ncb", aliases = {"Kamorta"}, } m["ncb-kat"] = { "Katchal", 17064263, "ncb", aliases = {"Tehnu"}, } m["ncb-nan"] = { "Nancowry", 6962504, "ncb", aliases = {"Nankwari"}, } -- Chinese varieties m["och-ear"] = { "Early Old Chinese", nil, "och", } m["och-lat"] = { "Late Old Chinese", nil, "och", } m["ltc-ear"] = { "Early Middle Chinese", nil, "ltc", } m["ltc-lat"] = { "Late Middle Chinese", nil, "ltc", } m["cmn-ear"] = { "Early Mandarin", 837169, "cmn", } m["cmn-sic"] = { "Sichuanese", 2278732, "cmn", } m["wuu-sha"] = { "Shanghainese", 36718, "wuu", } m["hsn-old"] = { "Old Xiang", 7085453, "hsn", aliases = {"Lou-Shao"}, } m["zhx-pin"] = { "Pinghua", 2735715, "yue", } m["nan-hai"] = { "Hainanese", 934541, "nan", } m["nan-hok"] = { "Hokkien", 1624231, "nan", } m["nan-xm"] = { "Amoy", 68744, "nan-hok", aliases = {"Xiamenese"}, } m["nan-zz"] = { "Zhangzhou Hokkien", nil, "nan-hok", } m["nan-qz"] = { "Quanzhou Hokkien", nil, "nan-hok", } m["nan-jj"] = { "Jinjiang Hokkien", nil, "nan-qz", } m["nan-ph"] = { "Philippine Hokkien", 3236692, "nan-jj", } -- Chinese romanization -- [[Wiktionary:Information desk/2022/June#Etymology Coding Issue]] -- [[Wiktionary:Grease pit/2022/June#Transliteration Systems in Etymologies 2]] m["cmn-pinyin"] = { "Hanyu Pinyin", 42222, "cmn", aliases = {"Pinyin"}, } m["cmn-tongyong"] = { "Tongyong Pinyin", 700739, "cmn", } m["cmn-wadegile"] = { "Wade–Giles", 208442, "cmn", aliases = {"Wade-Giles", "Wade Giles"}, } -- Chinese cyrillization m["cmn-palladius"] = { "Palladius", 1234239, "cmn", aliases = {"Palladius system"}, } -- Coptic varieties m["cop-akh"] = { "Akhmimic Coptic", nil, "cop", aliases = {"Akhmimic"}, } m["cop-boh"] = { "Bohairic Coptic", 890733, "cop", aliases = {"Bohairic", "Memphitic Coptic", "Memphitic"}, } m["cop-ggg"] = { "Coptic Dialect G", nil, "cop", aliases = {"Dialect G", "Mansuric Coptic", "Mansuric"}, } m["cop-jjj"] = { "Coptic Dialect J", nil, "cop", } m["cop-kkk"] = { "Coptic Dialect K", nil, "cop", } m["cop-ppp"] = { "Coptic Dialect P", nil, "cop", aliases = {"Proto-Theban Coptic", "Palaeo-Theban Coptic"}, } m["cop-fay"] = { "Fayyumic Coptic", 1399115, "cop", aliases = {"Fayyumic", "Faiyumic Coptic", "Faiyumic", "Fayumic Coptic", "Fayumic", "Bashmuric Coptic", "Bashmuric"}, } m["cop-her"] = { "Hermopolitan Coptic", nil, "cop", aliases = {"Hermopolitan", "Coptic Dialect H", "Ashmuninic", "Ashmuninic Coptic"}, } m["cop-lyc"] = { "Lycopolitan Coptic", nil, "cop", aliases = { "Lycopolitan", "Assiutic Coptic", "Asyutic Coptic", "Assiutic", "Asyutic", "Lyco-Diospolitan Coptic", "Lyco-Diospolitan", "Subakhmimic Coptic", "Subakhmimic" }, } m["cop-old"] = { "Old Coptic", nil, "cop", } m["cop-oxy"] = { "Oxyrhynchite Coptic", nil, "cop", aliases = {"Oxyrhynchite", "Mesokemic Coptic", "Mesokemic", "Middle Egyptian Coptic"}, } m["cop-ply"] = { "Proto-Lycopolitan Coptic", nil, "cop", aliases = {"Coptic Dialect i", "Proto-Lyco-Diospolitan Coptic"}, } m["cop-sah"] = { "Sahidic Coptic", 2645851, "cop", aliases = {"Sahidic", "Saidic Coptic", "Saidic", "Thebaic Coptic", "Thebaic"}, } -- Dutch varieties m["nl-BE"] = { "Belgian Dutch", 34147, "nl", aliases = { "Flemish", "Flemish Dutch", "Southern Dutch"}, } -- Egyptian varieties m["egy-old"] = { "Old Egyptian", 447117, "egy", } m["egy-mid"] = { "Middle Egyptian", 657330, "egy", aliases = {"Classical Egyptian"}, } m["egy-nmi"] = { "Neo-Middle Egyptian", nil, "egy", aliases = {"Égyptien de tradition", "Traditional Egyptian"}, } m["egy-lat"] = { "Late Egyptian", 1852329, "egy", } -- Elamite varieties m["elx-old"] = { "Old Elamite", nil, "elx", } m["elx-mid"] = { "Middle Elamite", nil, "elx", } m["elx-neo"] = { "Neo-Elamite", nil, "elx", } m["elx-ach"] = { "Achaemenid Elamite", nil, "elx", } -- English, Scots and Old English varieties m["en-CA"] = { "Canadian English", 44676, "en", } m["en-GB"] = { "British English", 7979, "en", alias_codes = {"British English", "BE."} } m["en-US"] = { "American English", 7976, "en", alias_codes = {"American English", "AE."} } m["en-geo"] = { "Geordie English", nil, "en", ancestors = "enm-nor", } m["en-HK"] = { "Hong Kong English", 1068863, "en", } -- Scots varieties m["sco-osc"] = { "Early Scots", 5326738, "enm", ancestors = "enm-nor", aliases = {"Old Scots"}, alias_codes = {"Early Scots", "Old Scots", "O.Sc."} } m["sco-smi"] = { "Middle Scots", 3327000, "sco", ancestors = "sco-osc", alias_codes = {"Middle Scots", "Mid.Sc."} } m["sco-ins"] = { "Insular Scots", 16919205, "sco", alias_codes = {"Insular Scots", "Ins.Sc."} } m["sco-uls"] = { "Ulster Scots", 201966, "sco", alias_codes = {"Ulster Scots", "Uls.Sc."} } m["sco-nor"] = { "Northern Scots", 16928150, "sco", alias_codes = {"Northern Scots", "Nor.Sc."} } m["sco-sou"] = { "South Scots", 7570457, "sco", aliases = {"Southern Scots", "Borders Scots"}, alias_codes = {"Southern Scots", "Borders Scots", "Sou.Sc."} } -- Middle English varieties m["enm-nor"] = { "Northern Middle English", nil, "enm", ancestors = "ang-nor", aliases = {"Northumbrian Middle English"}, } -- Old English varieties -- Includes both Mercian and Northumbrian. m["ang-ang"] = { "Anglian Old English", nil, "ang", } m["ang-mer"] = { "Mercian Old English", nil, "ang", } m["ang-nor"] = { "Northumbrian Old English", 1798915, "ang", } --[[ m["ang-wsx"] = { "West Saxon Old English", nil, "ang", } ]] -- French and French-based creole varieties m["fro-nor"] = { "Old Northern French", 2044917, "fro", aliases = {"Old Norman", "Old Norman French"}, alias_codes = {"Old Northern French", "ONF."} } m["fro-pic"] = { "Picard Old French", nil, "fro", } m["xno"] = { "Anglo-Norman", 35214, "fro", } m["fr-CA"] = { "Canadian French", 1450506, "fr", alias_codes = {"Canadian French", "CF."} } m["fr-CH"] = { "Switzerland French", 1480152, "fr", alias_codes = {"Swiss French", "Switzerland French"} } m["fr-aca"] = { "Acadian French", 415109, "fr", alias_codes = {"Acadian French", "fra-aca"} } m["frc"] = { "Cajun French", 880301, "fr", aliases = {"Louisiana French"}, } m["ht-sdm"] = { "Saint Dominican Creole French", nil, "ht", ancestors = "fr", } -- Norman varieties m["nrf-grn"] = { "Guernsey Norman", 56428, "nrf", aliases = {"Guernsey"}, alias_codes = {"roa-grn"} } m["nrf-jer"] = { "Jersey Norman", 56430, "nrf", aliases = {"Jersey"}, alias_codes = {"roa-jer"} } -- Brythonic m["bry-ear"] = { "Early Brythonic", nil, "cel-bry-pro", } m["bry-lat"] = { "Late Brythonic", nil, "cel-bry-pro", } -- Gaulish m["xcg"] = { "Cisalpine Gaulish", 3832927, "cel-gau", } m["xtg"] = { "Transalpine Gaulish", 29977, "cel-gau", } -- Portuguese varieties m["pt-BR"] = { "Brazilian Portuguese", 750553, "pt", } -- Spanish varieties m["es-AR"] = { "Rioplatense Spanish", 509780, "es", } m["es-CO"] = { "Colombian Spanish", 1115875, "es", } m["es-CU"] = { "Cuban Spanish", 824909, "es", } m["es-MX"] = { "Mexican Spanish", 616620, "es", } m["es-US"] = { "United States Spanish", 2301077, "es", aliases = {"US Spanish"}, } --use label "US Spanish" to put Spanish terms in this category m["es-PR"] = { "Puerto Rican Spanish", 7258609, "es", } -- Germanic varieties -- (modern) German varieties m["de-AT"] = { "Austrian German", 306626, "de", alias_codes = {"Austrian German", "AG."} } m["de-AT-vie"] = { "Viennese German", 56474, "de-AT", alias_codes = {"Viennese German", "VG."} } m["de-CH"] = { "Swiss High German", 1366643, "de", aliases = {"Schweizer Hochdeutsch", "Swiss Standard German"}, } m["ksh"] = { "Kölsch", 4624, "gmw-cfr", alias_codes = {"Kölsch"} } m["pfl"] = { "Palatine German", 23014, "gmw-rfr", aliases = {"Pfälzisch", "Pälzisch", "Palatinate German"}, } m["sli"] = { "Silesian German", 152965, "gmw-ecg", aliases = {"Silesian"}, } m["sxu"] = { "Upper Saxon", 699284, "gmw-ecg", } -- Old High German varieties m["lng"] = { "Lombardic", 35972, "goh", alias_codes = {"Lombardic", "goh-lng"} } -- Proto-West Germanic varieties m["frk"] = { "Frankish", 10860505, "gmw-pro", aliases = {"Old Frankish"}, } -- Alemannic German varieties m["gsw-FR"] = { "Alsatian", 8786, "gsw", wikipedia_article = "Alsatian dialect", } -- Old Norse varieties m["non-oen"] = { "Old East Norse", 10498031, "non", } m["non-ogt"] = { "Old Gutnish", 1133488, "non", aliases = {"Old Gotlandic"}, } m["non-own"] = { "Old West Norse", 10498026, "non", } -- Greek varieties m["qfa-sub-grc"] = { "Pre-Greek", 965052, "und", family = "qfa-sub", alias_codes = {"pregrc"} } m["grc-boi"] = { "Boeotian Greek", 406373, "grc-aeo", } m["grc-koi"] = { "Koine Greek", 107358, "grc", ancestors = "grc-att", aliases = {"Hellenistic Greek"}, alias_codes = {"Koine"} } m["gkm"] = { "Byzantine Greek", 36387, "grc", ancestors = "grc-koi", aliases = {"Medieval Greek"}, alias_codes = {"Medieval Greek"} } m["grc-dor"] = { "Doric Greek", 285494, "grc", } m["grc-att"] = { "Attic Greek", 506588, "grc", } m["grc-ion"] = { "Ionic Greek", 504165, "grc", } m["grc-pam"] = { "Pamphylian Greek", 2271793, "grc", } m["grc-kre"] = { -- code used elsewhere: see [[Module:grc:Dialects]] "Cretan Ancient Greek", -- to distinguish from Cretan Greek below nil, "grc-dor", } m["grc-arp"] = { "Arcadocypriot Greek", 499602, "grc", } m["grc-arc"] = { "Arcadian Greek", nil, "grc-arp", } m["el-cyp"] = { "Cypriot Greek", nil, "el", aliases = {"Cypriotic Greek"}, } m["el-pap"] = { "Paphian Greek", nil, "el", } m["grc-aeo"] = { "Aeolic Greek", 406373, "grc", aliases = {"Lesbic Greek", "Lesbian Greek", "Aeolian Greek"}, } m["loc-ozo"] = { "Ozolian Locrian", nil, "grc", } m["loc-opu"] = { "Opuntian Locrian", nil, "grc", } m["grc-ths"] = { "Thessalian Greek", 406373, "grc-aeo", } m["grc-ela"] = { "Elean Greek", nil, "grc", } m["grc-epc"] = { "Epic Greek", 990062, "grc", aliases = {"Homeric Greek"}, } m["el-crt"] = { "Cretan Greek", 588306, "el", } m["el-kth"] = { "Katharevousa", 31035762, "el", ancestors = "gkm", aliases = {"Katharevousa Greek"}, } -- Hebrew varieties m["hbo"] = { "Biblical Hebrew", 1982248, "he", aliases = {"Classical Hebrew"}, } m["he-mis"] = { "Mishnaic Hebrew", 1649362, "he", ancestors = "hbo", } m["he-med"] = { "Medieval Hebrew", 2712572, "he", ancestors = "he-mis", } m["he-IL"] = { "Israeli Hebrew", 8141, "he", } m["bsh-kat"] = { "Kativiri", 2605045, "bsh", aliases = {"Katə́viri"}, } m["xvi"] = { "Kamviri", 1193495, "bsh", aliases = {"Kamvíri"}, alias_codes = {"bsh-kam"} } m["bsh-mum"] = { "Mumviri", nil, aliases = {"Mumvíri"}, "bsh" } -- Iranian varieties: m["qfa-sub-bma"] = { "the BMAC substrate", 1054850, "und", family = "qfa-sub", } -- Historical and current Iranian dialects m["ae-old"] = { "Old Avestan", 29572, "ae", aliases = {"Gathic Avestan"}, } m["ae-yng"] = { "Younger Avestan", 29572, "ae-old", aliases = {"Young Avestan"}, } m["bcc"] = { "Southern Balochi", 33049, "bal", aliases = {"Southern Baluchi"}, alias_codes = {"bal-sou"} } m["bgp"] = { "Eastern Balochi", 33049, "bal", aliases = {"Eastern Baluchi"}, alias_codes = {"bal-eas"} } m["bgn"] = { "Western Balochi", 33049, "bal", aliases = {"Western Baluchi"}, alias_codes = {"bal-wes"} } m["bsg-ban"] = { "Bandari", nil, "bsg", } m["bsg-bas"] = { "Bashkardi", nil, "bsg", } m["bsg-hor"] = { "Hormozi", nil, "bsg", } m["bsg-min"] = { "Minabi", nil, "bsg", } m["kho-old"] = { "Old Khotanese", nil, "kho", } m["kho-lat"] = { "Late Khotanese", nil, "kho-old", } m["peo-ear"] = { "Early Old Persian", nil, "peo", } m["peo-lat"] = { "Late Old Persian", nil, "peo", } m["pal-ear"] = { "Early Middle Persian", nil, "pal", } m["pal-lat"] = { "Late Middle Persian", nil, "pal", ancestors = "pal-ear", } m["ps-nwe"] = { "Northwestern Pashto", nil, "ps", } m["ps-cgi"] = { "Central Ghilzay", nil, "ps-nwe", } m["ps-mah"] = { "Mahsudi", nil, "ps-nwe", } m["ps-nea"] = { "Northeastern Pashto", nil, "ps", } m["ps-afr"] = { "Afridi", nil, "ps-nea", } m["ps-bng"] = { "Bangash", nil, "ps-nea", } m["ps-xat"] = { "Khatak", nil, "ps-nea", } m["ps-pes"] = { "Peshawari", nil, "ps-nea", } m["ps-sea"] = { "Southeastern Pashto", nil, "ps", } m["ps-ban"] = { "Bannu", nil, "ps-sea", } m["ps-kak"] = { "Kakari", nil, "ps-sea", } m["ps-ser"] = { "Sher", nil, "ps-sea", } m["ps-waz"] = { "Waziri", 12274473, "ps-sea", } m["ps-swe"] = { "Southwestern Pashto", nil, "ps", } m["ps-kan"] = { "Kandahari", nil, "ps-swe", } m["ps-jad"] = { "Jadrani", nil, "ps", ancestors = "ira-pat-pro" } m["xme-azr"] = { "Old Azari", nil, "xme-ott", aliases = {"Old Azeri", "Azari", "Azeri", "Āḏarī", "Adari", "Adhari"}, } m["xme-ttc-cen"] = { "Central Tati", nil, "xme-ott", } m["xme-ttc-eas"] = { "Eastern Tati", nil, "xme-ott", } m["xme-ttc-nor"] = { "Northern Tati", nil, "xme-ott", } m["xme-ttc-sou"] = { "Southern Tati", nil, "xme-ott", } m["xme-ttc-wes"] = { "Western Tati", nil, "xme-ott", } m["xmn"] = { "Manichaean Middle Persian", nil, "pal-lat", } m["fa-ira"] = { "Iranian Persian", 3513637, "fa", aliases = {"Modern Persian", "Western Persian"}, } m["fa-cls"] = { "Classical Persian", 9168, "fa", ancestors = "pal-lat", } m["prs"] = { "Dari", 178440, "fa", aliases = {"Dari Persian", "Central Persian", "Eastern Persian", "Afghan Persian"}, } m["os-dig"] = { "Digor", 3027861, "os", aliases = {"Digoron"}, } m["os-iro"] = { "Iron", nil, "os", } m["sog-ear"] = { "Early Sogdian", nil, "sog", } m["sog-lat"] = { "Late Sogdian", nil, "sog-ear", } m["oru-kan"] = { "Kaniguram", 6363164, "oru", } m["oru-log"] = { "Logar", nil, "oru", } m["oos-ear"] = { "Early Old Ossetic", nil, "oos", } m["oos-lat"] = { "Late Old Ossetic", nil, "oos", } m["xln"] = { "Alanic", 3658580, "oos", } m["rdb-rud"] = { "Rudbari", nil, "rdb", } m["rdb-jir"] = { "Jirofti", nil, "rdb", } m["rdb-kah"] = { "Kahnuji", nil, "rdb", } -- Southwestern Fars lects m["fay-bur"] = { "Burenjani", nil, "fay", } m["fay-bsh"] = { "Bushehri", nil, "fay", } m["fay-dsh"] = { "Dashtaki", nil, "fay", } m["fay-dav"] = { "Davani", 5228140, "fay", } m["fay-eze"] = { "Emamzada Esma’ili", nil, "fay", } m["fay-gav"] = { "Gavkoshaki", nil, "fay", } m["fay-kho"] = { "Khollari", nil, "fay", } m["fay-kon"] = { "Kondazi", nil, "fay", } m["fay-kzo"] = { "Old Kazeruni", nil, "fay", } m["fay-mas"] = { "Masarami", nil, "fay", } m["fay-pap"] = { "Papuni", nil, "fay", } m["fay-sam"] = { "Samghani", nil, "fay", } m["fay-shr"] = { "Shirazi", nil, "fay", } m["fay-sho"] = { "Old Shirazi", nil, "fay", } m["fay-sam"] = { "Samghani", nil, "fay", } m["fay-kar"] = { "Khargi", nil, "fay", } m["fay-sor"] = { "Sorkhi", nil, "fay", } -- Talysh lects m["tly-cen"] = { "Central Talysh", nil, "tly", } m["tly-asa"] = { "Asalemi", nil, "tly-cen", } m["tly-kar"] = { "Karganrudi", nil, "tly-cen", } m["tly-tul"] = { "Tularudi", nil, "tly-cen", } m["tly-tal"] = { "Taleshdulabi", nil, "tly-cen", } m["tly-nor"] = { "Northern Talysh", nil, "tly", } m["tly-aze"] = { "Azerbaijani Talysh", nil, "tly-nor", } m["tly-anb"] = { "Anbarani", nil, "tly-nor", } m["tly-sou"] = { "Southern Talysh", nil, "tly", } m["tly-fum"] = { "Fumani", nil, "tly-sou", } m["tly-msu"] = { "Masulei", nil, "tly-sou", } m["tly-msa"] = { "Masali", nil, "tly-sou", } m["tly-san"] = { "Shandarmani", nil, "tly-sou", } -- Tafreshi lects m["xme-amo"] = { "Amorehi", nil, "xme-taf", } m["atn"] = { "Ashtiani", 3436590, "xme-taf", wikipedia_article = "Ashtiani language", alias_codes = {"xme-ast"} } m["xme-bor"] = { "Borujerdi", nil, "xme-taf", } m["xme-ham"] = { "Hamadani", 6302426, "xme-taf", } m["xme-kah"] = { "Kahaki", nil, "xme-taf", } m["vaf"] = { "Vafsi", 32611, "xme-taf", alias_codes = {"xme-vaf"} } -- Kermanic lects m["kfm"] = { "Khunsari", 6403030, "xme-ker", wikipedia_article = "Khunsari language", alias_codes = {"xme-xun"} } m["xme-mah"] = { "Mahallati", nil, "xme-ker", } m["xme-von"] = { "Vonishuni", nil, "xme-ker", } m["xme-bdr"] = { "Badrudi", nil, "xme-ker", } m["xme-del"] = { "Delijani", nil, "xme-ker", } m["xme-kas"] = { "Kashani", nil, "xme-ker", } m["xme-kes"] = { "Kesehi", nil, "xme-ker", } m["xme-mey"] = { "Meymehi", nil, "xme-ker", } m["ntz"] = { "Natanzi", 6968399, "xme-ker", wikipedia_article = "Natanzi language", alias_codes = {"xme-nat"} } m["xme-abz"] = { "Abuzeydabadi", nil, "xme-ker", } m["xme-aby"] = { "Abyanehi", nil, "xme-ker", } m["xme-far"] = { "Farizandi", nil, "xme-ker", } m["xme-jow"] = { "Jowshaqani", nil, "xme-ker", } m["xme-nas"] = { "Nashalji", nil, "xme-ker", } m["xme-qoh"] = { "Qohrudi", nil, "xme-ker", } m["xme-yar"] = { "Yarandi", nil, "xme-ker", } m["soj"] = { "Soi", 7930463, "xme-ker", aliases = {"Sohi"}, wikipedia_article = "Soi language", alias_codes = {"xme-soi"} } m["xme-tar"] = { "Tari", nil, "xme-ker", } m["gzi"] = { "Gazi", 5529130, "xme-ker", wikipedia_article = "Gazi language", alias_codes = {"xme-gaz"} } m["xme-sed"] = { "Sedehi", nil, "xme-ker", } m["xme-ard"] = { "Ardestani", nil, "xme-ker", } m["xme-zef"] = { "Zefrehi", nil, "xme-ker", } m["xme-isf"] = { "Isfahani", nil, "xme-ker", } m["xme-kaf"] = { "Kafroni", nil, "xme-ker", } m["xme-vrz"] = { "Varzenehi", nil, "xme-ker", } m["xme-xur"] = { "Khuri", nil, "xme-ker", } m["nyq"] = { "Nayini", 6983146, "xme-ker", wikipedia_article = "Nayini language", alias_codes = {"xme-nay"} } m["xme-ana"] = { "Anaraki", nil, "xme-ker", } m["gbz"] = { "Zoroastrian Dari", 32389, "xme-ker", aliases = {"Behdināni", "Gabri", "Gavrŭni", "Gabrōni"}, wikipedia_article = "Zoroastrian Dari language", alias_codes = {"xme-dar"} } m["xme-krm"] = { "Kermani", nil, "xme-ker", } m["xme-yaz"] = { "Yazdi", nil, "xme-ker", } m["xme-bid"] = { "Bidhandi", nil, "xme-ker", } m["xme-bij"] = { "Bijagani", nil, "xme-ker", } m["xme-cim"] = { "Chimehi", nil, "xme-ker", } m["xme-han"] = { "Hanjani", nil, "xme-ker", } m["xme-kom"] = { "Komjani", nil, "xme-ker", } m["xme-nar"] = { "Naraqi", nil, "xme-ker", } m["xme-nus"] = { "Nushabadi", nil, "xme-ker", } m["xme-qal"] = { "Qalhari", nil, "xme-ker", } m["xme-trh"] = { "Tarehi", nil, "xme-ker", } m["xme-val"] = { "Valujerdi", nil, "xme-ker", } m["xme-var"] = { "Varani", nil, "xme-ker", } m["xme-zor"] = { "Zori", nil, "xme-ker", } -- Ramandi lects m["tks-ebr"] = { "Ebrahimabadi", nil, "tks", } m["tks-sag"] = { "Sagzabadi", nil, "tks", } m["tks-esf"] = { "Esfarvarini", nil, "tks", } m["tks-tak"] = { "Takestani", nil, "tks", } m["tks-cal"] = { "Chali", nil, "tks", aliases = {"Chāli"}, wikipedia_article = "Tati language (Iran)", } m["tks-dan"] = { "Danesfani", nil, "tks", } m["tks-xia"] = { "Khiaraji", nil, "tks", } m["tks-xoz"] = { "Khoznini", nil, "tks", } -- Shughni dialects m["sgh-bro"] = { "Bartangi-Oroshori", nil, "sgh", } m["sgh-bar"] = { "Bartangi", nil, "sgh-bro", } m["sgh-oro"] = { "Oroshori", nil, "sgh-bro", aliases = {"Roshorvi"}, } m["sgh-rsx"] = { "Roshani-Khufi", nil, "sgh", } m["sgh-xuf"] = { "Khufi", 2562249, "sgh-rsx", aliases = {"Xufi", "Xūfī"}, wikipedia_article = "Khufi language", } m["sgh-ros"] = { "Roshani", 2597566, "sgh-rsx", aliases = {"Rushani", "Rōšāni"}, wikipedia_article = "Rushani language", } m["sgh-xgb"] = { "Khughni-Bajui", nil, "sgh", } m["sgh-xug"] = { "Khughni", nil, "sgh-xgb", } m["sgh-baj"] = { "Bajui", nil, "sgh-xgb", } -- Indo-Aryan varieties m["inc-mit"] = { "Mitanni", 1986700, "inc-pro", } m["awa-old"] = { "Old Awadhi", nil, "awa", } m["bra-old"] = { "Old Braj", nil, "bra", } m["gu-kat"] = { "Kathiyawadi", nil, "gu", aliases = {"Kathiyawadi Gujarati", "Kathiawadi"}, } m["gu-lda"] = { "Lisan ud-Dawat Gujarati", nil, "gu", aliases = {"Lisan ud-Dawat", "LDA"}, } m["hi-mum"] = { "बंबइया हिंदी", 3543151, "hi", aliases = {"Mumbai Hindi", "Bambaiyya Hindi"}, } m["hi-mid"] = { "Middle Hindi", nil, "hi", } m["sa-bhs"] = { "Buddhist Hybrid Sanskrit", 248758, "sa", } m["sa-bra"] = { "Brahmanic Sanskrit", 36858, "sa", } m["sa-cls"] = { "Classical Sanskrit", 11059, "sa", } m["sa-neo"] = { "New Sanskrit", 11059, "sa", } m["sa-ved"] = { "Vedic Sanskrit", 36858, "sa", } m["si-med"] = { "Medieval Sinhalese", nil, "si", aliases = {"Medieval Sinhala"}, } m["kok-mid"] = { "Middle Konkani", nil, "kok", aliases = {"Medieval Konkani"}, } m["kok-old"] = { "Old Konkani", nil, "kok", aliases = {"Early Konkani"}, } -- Indian subcontinent languages -- Dhivehi varieties m["mlk-dv"] = { "Mulaku Dhivehi", nil, "dv", aliases = {"Mulaku Divehi", "Mulaku Bas"}, } m["hvd-dv"] = { "Huvadhu Dhivehi", nil, "dv", aliases = {"Huvadhu Divehi", "Huvadhu Bas"}, } m["add-dv"] = { "Addu Dhivehi", nil, "dv", aliases = {"Addu Divehi", "Addu Bas"}, } -- Dravidian varieties m["ta-mid"] = { "Middle Tamil", 20987434, "ta", } m["kn-hav"] = { "Havigannada", 24276369, "kn", } m["kn-kun"] = { "Kundagannada", 6444255, "kn", } -- Prakrits m["inc-pka"] = { "Ardhamagadhi Prakrit", 35217, "inc-pra", aliases = {"Ardhamagadhi"}, } m["inc-elu"] = { "Helu Prakrit", 15080869, "inc-pra", aliases = {"Elu", "Elu Prakrit", "Helu"}, } m["inc-khs"] = { "Khasa Prakrit", nil, "inc-pra", aliases = {"Khasa"}, } m["inc-pmg"] = { "Magadhi Prakrit", 2652214, aliases = {"Magadhi"}, "inc-pra", } m["inc-pmh"] = { "Maharastri Prakrit", 2586773, "inc-pra", aliases = {"Maharashtri Prakrit", "Maharastri", "Maharashtri"}, } m["inc-psi"] = { "Paisaci Prakrit", 2995607, "inc-pra", aliases = {"Paisaci", "Paisachi"}, } m["inc-pse"] = { "Sauraseni Prakrit", 2452885, "inc-pra", aliases = {"Sauraseni", "Shauraseni"}, } m["prk-avt"] = { "Avanti", nil, "inc-pra", aliases = {"Avanti Prakrit"}, } m["prc-prk"] = { "Pracya", nil, "inc-pra", aliases = {"Pracya Prakrit"}, } m["bhl-prk"] = { "Bahliki", nil, "inc-pra", aliases = {"Bahliki Prakrit"}, } m["dks-prk"] = { "Daksinatya", nil, "inc-pra", aliases = {"Daksinatya Prakrit"}, } m["skr-prk"] = { "Sakari", nil, "inc-pra", aliases = {"Sakari Prakrit"}, } m["cnd-prk"] = { "Candali", nil, "inc-pra", aliases = {"Candali Prakrit"}, } m["sbr-prk"] = { "Sabari", nil, "inc-pra", aliases = {"Sabari Prakrit"}, } m["abh-prk"] = { "Abhiri", nil, "inc-pra", aliases = {"Abhiri Prakrit"}, } m["drm-prk"] = { "Dramili", nil, "inc-pra", aliases = {"Dramili Prakrit"}, } m["odr-prk"] = { "Odri", nil, "inc-pra", aliases = {"Odri Prakrit"}, } -- Italian, Latin and other Italic varieties m["it-oit"] = { "Old Italian", 652, "it", alias_codes = {"roa-oit"} } m["it-CH"] = { "Switzerland Italian", 672147, "it", alias_codes = {"Swiss Italian", "Switzerland Italian"} } -- Latin varieties by period m["itc-ola"] = { "Old Latin", 12289, "la", } m["la-cla"] = { "Classical Latin", 253854, "la", ancestors = "itc-ola", alias_codes = {"Classical Latin", "CL.", "CL"} } m["la-lat"] = { "Late Latin", 1503113, "la", ancestors = "la-cla", alias_codes = {"Late Latin", "LL.", "LL"} } m["la-vul"] = { "Vulgar Latin", 37560, "la", ancestors = "la-cla", alias_codes = {"Vulgar Latin", "VL.", "VL"} } m["la-med"] = { "Medieval Latin", 1163234, "la", ancestors = "la-lat", alias_codes = {"Medieval Latin", "ML.", "ML"} } m["la-ecc"] = { "Ecclesiastical Latin", 1247932, "la", aliases = {"Church Latin"}, ancestors = "la-lat", alias_codes = {"Ecclesiastical Latin", "EL.", "EL"} } m["la-ren"] = { "Renaissance Latin", 499083, "la", ancestors = "la-med", alias_codes = {"Renaissance Latin", "RL.", "RL"} } m["la-new"] = { "New Latin", 1248221, "la", aliases = {"Modern Latin"}, ancestors = "la-ren", alias_codes = {"New Latin", "NL.", "NL"} } -- other Italic lects m["osc-luc"] = { "Lucanian", nil, "osc", } m["osc-sam"] = { "Samnite", nil, "osc", } m["xum-her"] = { "Hernician", nil, "xum", } -- Malay and related varieties m["ms-old"] = { "Old Malay", nil, "ms", } m["ms-cla"] = { "Classical Malay", nil, "ms", ancestors = "ms-old", } m["pse-bsm"] = { "Besemah", nil, "pse", } m["bew-kot"] = { "Betawi Kota", nil, "bew", } m["bew-ora"] = { "Betawi Ora", nil, "bew", } m["bew-udi"] = { "Betawi Udik", nil, "bew", } -- Mongolic lects m["xng-ear"] = { "Early Middle Mongol", nil, "xng", } m["xng-lat"] = { "Late Middle Mongol", nil, "xng", ancestors = "xng-ear", } m["mn-kha"] = { "Khalkha Mongolian", 6399808, "mn", aliases = {"Khalkha"}, } m["mn-ord"] = { "Ordos Mongolian", 716904, "mn", aliases = {"Ordos"}, } m["mn-cha"] = { "Chakhar Mongolian", 907425, "mn", aliases = {"Chakhar"}, } m["mn-khr"] = { "Khorchin Mongolian", 3196210, "mn", aliases = {"Khorchin"}, } -- Japanese varieties m["ja-mid"] = { "Middle Japanese", 6841474, "ojp", ancestors = "ojp", } m["ja-mid-ear"] = { "Early Middle Japanese", 182695, "ja-mid", } m["ja-mid-lat"] = { "Late Middle Japanese", 1816184, "ja-mid", ancestors = "ja-mid-ear", } m["ja-ear"] = { "Early Modern Japanese", 5326692, "ja", ancestors = "ja-mid-lat", } -- Kartvelian varieties m["ka-mid"] = { "Middle Georgian", nil, "ka", ancestors = "oge", } -- Korean varieties m["oko-lat"] = { "Late Old Korean", nil, "oko", } m["okm-ear"] = { "Early Middle Korean", nil, "okm", } m["ko-c"] = { "Central Korean", nil, "ko", } m["ko-se"] = { "Southeastern Korean", nil, "ko", } m["ko-sw"] = { "Southwestern Korean", nil, "ko", } m["ko-nw"] = { "Northwestern Korean", nil, "ko", } m["ko-ne"] = { "Northeastern Korean", nil, "ko", } m["ko-yuk"] = { "Yukjin Korean", nil, "ko", } -- Occitan varieties m["oc-auv"] = { "Auvergnat", 35359, "oc", aliases = {"Auvernhat", "Auvergnese"}, } m["oc-gas"] = { "Gascon", 35735, "oc", } -- standardized dialect of Gascon m["oc-ara"] = { "Aranese", 10196, "oc-gas", } m["oc-lan"] = { "Languedocien", 942602, "oc", aliases = {"Lengadocian"}, } m["oc-lim"] = { "Limousin", 427614, "oc", } m["oc-pro"] = { "Provençal", 241243, "oc", aliases = {"Provencal"}, alias_codes = {"prv"} } m["oc-pro-old"] = { "Old Provençal", 2779185, "pro", } m["oc-viv"] = { "Vivaro-Alpine", 1649613, "oc", } m["oc-jud"] = { "Shuadit", 56472, "oc", aliases = { "Chouhadite", "Chouhadit", "Chouadite", "Chouadit", "Shuhadit", "Judeo-Occitan", "Judæo-Occitan", "Judaeo-Occitan", "Judeo-Provençal", "Judæo-Provençal", "Judaeo-Provençal", "Judeo-Provencal", "Judaeo-Provencal", "Judeo-Comtadin", "Judæo-Comtadin", "Judaeo-Comtadin", }, } -- Oromo varieties m["hae"] = { "Harar Oromo", 5330355, "om", aliases = {"Eastern Oromo"}, } m["gax"] = { "Borana", 2910610, "om", aliases = {"Southern Oromo"}, } m["orc"] = { "Orma", 2919128, "om", } m["ssn"] = { "Waata", 3501553, "om", } -- Phillipine varieties m["tl-old"] = { "Old Tagalog", 12967437, "tl", } m["tl-cls"] = { "Classical Tagalog", nil, "tl", } -- Pre-Roman substrates m["qfa-sub-ibe"] = { "a pre-Roman substrate of Iberia", 530799, "und", family = "qfa-sub", } m["qfa-sub-bal"] = { "a pre-Roman substrate of the Balkans", 1815070, "und", family = "qfa-sub", } -- Sardinian varieties m["sc-src"] = { "Logudorese", 777974, "sc", aliases = {"Logudorese Sardinian"}, } m["sc-nuo"] = { "Nuorese", nil, "sc-src", aliases = {"Nuorese Sardinian"}, } m["sc-sro"] = { "Campidanese", 35348, "sc", aliases = {"Campidanese Sardinian"}, } -- Rwanda-Rundi varieties m["rw-kin"] = { "Kinyarwanda", 33573, "rw", aliases = {"Rwanda"}, } m["rw-run"] = { "Kirundi", 33583, "rw", aliases = {"Rundi"}, } -- Slavic varieties m["cs-ear"] = { "Early Modern Czech", nil, "cs", ancestors = "zlw-ocs" } m["cu-bgm"] = { "Middle Bulgarian", 12294897, "cu", } m["zle-mru"] = { "Middle Russian", 35228, "ru", alias_codes = {"zle-oru"} } m["zle-obe"] = { "Old Belarusian", 13211, "zle-ort", } m["zle-ouk"] = { "Old Ukrainian", 13211, "zle-ort", } m["zlw-mpl"] = { "Middle Polish", 402878, "pl", ancestors = "zlw-opl", } -- Serbo-Croatian varieties m["ckm"] = { "Chakavian Serbo-Croatian", 337565, "sh", aliases = {"Čakavian"}, alias_codes = {"sh-cha"} } m["kjv"] = { "Kajkavian Serbo-Croatian", 838165, "sh", alias_codes = {"sh-kaj"} } m["sh-tor"] = { -- Linguist code srp-tor "Torlakian Serbo-Croatian", 1078803, "sh", aliases = {"Torlak"}, } -- Tibetic lects m["adx"] = { "Amdo Tibetan", 56509, "bo", } m["kbg"] = { "Khamba", 12952626, "bo", } m["khg"] = { "Khams Tibetan", 56601, "bo", } m["tsk"] = { "Tseku", 11159532, "bo", } -- Tuareg lects m["thv"] = { "Tamahaq", 56703, "tmh", } m["ttq"] = { "Tawellemmet", 56390, "tmh", } m["taq"] = { "Tamasheq", 4670066, "tmh", } m["thz"] = { "Tayert", 56388, "tmh", } m["tmh-ght"] = { "Ghat", 47012900, "tmh", wikipedia_article = "Tamahaq language", } -- Turkic lects m["trk-cmn"] = { "Common Turkic", 1126028, "trk-pro", } m["trk-ogz-pro"] = { "Proto-Oghuz", 494600, "trk-pro", aliases = {"Southwestern Common Turkic"}, ancestors = "trk-pro", } m["otk-kir"] = { "Old Kirghiz", 83142, "otk", } m["klj-arg"] = { "Arghu", 33455, "klj", } m["qwm-arm"] = { "Armeno-Kipchak", 2027503, "qwm", } m["qwm-mam"] = { "Mamluk-Kipchak", 4279942, "qwm", } m["az-cls"] = { "Classical Azerbaijani", nil, "az", aliases = {"Classical Azeri"}, } m["qxq"] = { "Qashqai", 13192, "az", aliases = {"Qaşqay", "Qashqayi", "Kashkai", "Kashkay"}, } -- Other lects m["alv-kro"] = { "Kromanti", 1093206, "cpe-mar", } m["bat-pro"] = { "Proto-Baltic", 1703347, "ine-bsl-pro", } m["es-lun"] = { "Lunfardo", 1401612, "es", alias_codes = {"Lunfardo"} } m["fiu-pro"] = { "Proto-Finno-Ugric", 79890, "urj-pro", } m["gem-sue"] = { "Suevic", 155085, "gmw-pro", aliases = {"Suebian"}, } m["iro-ohu"] = { "Old Wendat", nil, "wdt", wikipedia_article = "Huron language", } m["iro-omo"] = { "Old Mohawk", nil, "moh", } m["iro-oon"] = { "Old Onondaga", nil, "ono", } m["okz-A"] = { "Angkorian Old Khmer", 9205, "okz", wikipedia_article = "Khmer language#Historical periods", } m["okz-P"] = { "Pre-Angkorian Old Khmer", 9205, "okz", wikipedia_article = "Khmer language#Historical periods", } m["mul-tax"] = { "taxonomic name", nil, "mul", alias_codes = {"Tax."} } m["qfa-pyg"] = { "a substrate language originally spoken by the Pygmies", nil, "und", family = "qfa-sub", wikipedia_article = "Classification of Pygmy languages#Original Pygmy language(s)", alias_codes = {"pygmy"} } m["tai-shz"] = { "Shangsi Zhuang", 13216, "za", } m["tbq-pro"] = { "Proto-Tibeto-Burman", 7251864, "sit-pro", } m["und-idn"] = { "Idiom Neutral", 35847, "und", -- or "vo" wikipedia_article = "Idiom Neutral", } m["und-tdl"] = { "Turduli", nil, "und", wikipedia_article = "Turduli", } m["und-tdt"] = { "Turdetani", nil, "und", wikipedia_article = "Turdetani", } m["und-xnu"] = { "Xiongnu", nil, "und", wikipedia_article = "Xiongnu", } m["urj-fpr-pro"] = { "Proto-Finno-Permic", nil, "urj-pro", } m["woy"] = { "Weyto", 3915918, "und", } m = require("Module:languages").addDefaultTypes(m, false, "etymology-only") return require("Module:languages").finalizeEtymologyData(m) g2n9zlaxb3l324xp2bafb588uzjw32e मॉड्यूल:Yesno 828 302857 487663 469059 2026-09-01T20:43:47Z SM7 6218 updating... 487663 Scribunto text/plain -- Function allowing for consistent treatment of boolean-like wikitext input. -- It works similarly to the template {{yesno}}. local lower = string.lower local tonumber = tonumber local type = type local yesno return function (val, default) if val == nil then return nil elseif not yesno then yesno = { [true] = true, [false] = false, ["true"] = true, ["false"] = false, ["t"] = true, ["f"] = false, [1] = true, [0] = false, ["1"] = true, ["0"] = false, ["yes"] = true, ["no"] = false, ["y"] = true, ["n"] = false, ["on"] = true, ["off"] = false, } end local ret = yesno[val] if ret ~= nil then return ret elseif type(val) ~= "string" then return default end -- Catch inputs like "00". ret = yesno[tonumber(val)] if ret ~= nil then return ret end -- Case-insensitive. ret = yesno[lower(val)] if ret ~= nil then return ret end return default end 50fw3j6qj6cod4hrcb5leyd15zs34hg 487664 487663 2026-09-01T20:44:00Z SM7 6218 "[[मॉड्यूल:Yesno]]" सुरक्षित किया ([सम्पादन=केवल प्रबंधक अनुमत] (हमेशा) [स्थानांतरण=केवल प्रबंधक अनुमत] (हमेशा)) 487663 Scribunto text/plain -- Function allowing for consistent treatment of boolean-like wikitext input. -- It works similarly to the template {{yesno}}. local lower = string.lower local tonumber = tonumber local type = type local yesno return function (val, default) if val == nil then return nil elseif not yesno then yesno = { [true] = true, [false] = false, ["true"] = true, ["false"] = false, ["t"] = true, ["f"] = false, [1] = true, [0] = false, ["1"] = true, ["0"] = false, ["yes"] = true, ["no"] = false, ["y"] = true, ["n"] = false, ["on"] = true, ["off"] = false, } end local ret = yesno[val] if ret ~= nil then return ret elseif type(val) ~= "string" then return default end -- Catch inputs like "00". ret = yesno[tonumber(val)] if ret ~= nil then return ret end -- Case-insensitive. ret = yesno[lower(val)] if ret ~= nil then return ret end return default end 50fw3j6qj6cod4hrcb5leyd15zs34hg मॉड्यूल:language-like 828 303069 487632 477496 2026-09-01T19:05:05Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487632 Scribunto text/plain local export = {} local string_utilities_module = "Module:string utilities" local table_module = "Module:table" -- In a locally installed Docker container containing Wiktionary, Wikibase is typically not installed because it's -- a real pain to get working properly. In such a case, `mw.wikibase` returns nil. We now have checks in the code -- below so it does reasonable things in the absence of Wikibase. local wikibase = mw.wikibase local category_name_has_suffix -- defined as export.categoryNameHasSuffix below local get_entity = wikibase and wikibase.getEntity or nil local get_entity_id_for_title = wikibase and wikibase.getEntityIdForTitle or nil local gsub = string.gsub local ipairs = ipairs local match = string.match local select = select local sitelink = wikibase and wikibase.sitelink or nil local type = type local umatch = mw.ustring.match --[==[ Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==] local function case_insensitive_pattern(...) case_insensitive_pattern = require(string_utilities_module).case_insensitive_pattern return case_insensitive_pattern(...) end local function table_flatten(...) table_flatten = require(table_module).flatten return table_flatten(...) end --[==[ Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==] local content_lang local function get_content_lang() content_lang, get_content_lang = mw.getContentLanguage(), nil return content_lang end -- Implementation of getAliases() for languages, etymology languages, -- families, scripts and writing systems. function export.getAliases(self) local aliases = self._aliases if aliases == nil then aliases = (self._data or self).aliases or {} self._aliases = aliases end return aliases end -- Implementation of getVarieties() for languages, etymology languages, -- families, scripts and writing systems. If `flatten` is passed in, -- flatten down to a list of strings; otherwise, keep the structure. function export.getVarieties(self, flatten) local varieties = self._varieties if varieties == nil then varieties = (self._data or self).varieties or {} self._varieties = varieties end if not flatten then return varieties end local flattened_varieties = self._flattened_varieties if flattened_varieties == nil then flattened_varieties = table_flatten(varieties) self._flattened_varieties = flattened_varieties end return flattened_varieties end -- Implementation of getOtherNames() for languages, etymology languages, -- families, scripts and writing systems. function export.getOtherNames(self) local other_names = self._other_names if other_names == nil then other_names = (self._data or self).other_names or {} self._other_names = other_names end return other_names end -- Implementation of getAllNames() for languages, etymology languages, -- families, scripts and writing systems. function export.getAllNames(self) local all_names = self._allNames if all_names == nil then all_names = table_flatten{ self.getCanonicalNames and self:getCanonicalNames() or self:getCanonicalName(), self:getAliases(), self:getVarieties(), self:getOtherNames(), } self._allNames = all_names end return all_names end function export.hasType(self, ...) local n = select("#", ...) if n == 0 then error("Must specify at least one type.") end local types = self:getTypes() if not types[...] then return false elseif n == 1 then return true end local args = {...} for i = 2, n do if not types[args[i]] then return false end end return true end -- Implementation of template-callable getByCode() function for languages, -- etymology languages, families and scripts. `item` is the language, -- family or script in question; `args` is the arguments passed in by the -- module invocation; `extra_processing`, if specified, is a function of -- one argument (the requested property) and should return the value to -- be returned to the caller, or nil if the property isn't recognized. -- `extra_processing` is called after special-cased properties are handled -- and before general-purpose processing code that works for all string -- properties. function export.templateGetByCode(args, extra_processing) -- The item that the caller wanted to look up. local item, itemname, list = args[1], args[2] if itemname == "getAllNames" then list = item:getAllNames() elseif itemname == "getOtherNames" then list = item:getOtherNames() elseif itemname == "getAliases" then list = item:getAliases() elseif itemname == "getVarieties" then list = item:getVarieties(true) end if list then local index = args[3]; if index == "" then index = nil end index = tonumber(index or error("Numeric index of the desired item in the list (parameter 3) has not been specified.")) return list[index] or "" end if itemname == "getFamily" and item.getFamily then return item:getFamily():getCode() end if extra_processing then local retval = extra_processing(itemname) if retval then return retval end end if item[itemname] then local ret = item[itemname](item) if type(ret) == "string" then return ret end error("The function \"" .. itemname .. "\" did not return a string value.") end error("Requested invalid item name \"" .. itemname .. "\".") end -- Implementation of getCommonsCategory() for languages, etymology languages, -- families, scripts and writing systems. function export.getWikidataItem(self) local item = self._WikidataItem if item == nil then item = (self._data or self)[2] -- If the value is nil, it's cached as false. item = item ~= nil and (type(item) == "number" and "Q" .. item or item) or false self._WikidataItem = item end return item or nil end do local function get_wiki_article(self, project) local article -- If the project is enwiki, check the language data. if project == "enwiki" then article = (self._data or self).wikipedia_article if article then return article end end -- Otherwise, check the Wikidata item for a sitelink. local item = self:getWikidataItem() article = item and sitelink and sitelink(item, project) or false if article then return article end -- If there's still no article, try the parent (if any). local get_parent = self.getParent if get_parent then local parent = get_parent(self) if parent then return get_wiki_article(parent, project) end end return false end -- Implementation of getWikipediaArticle() for languages, etymology languages, -- families, scripts and writing systems. function export.getWikipediaArticle(self, noCategoryFallback, project) if project == nil then project = "enwiki" end local article if project == "enwiki" then article = self._wikipedia_article if article == nil then article = get_wiki_article(self, project) self._wikipedia_article = article end else -- If the project isn't enwiki, default to no category fallback, but -- this can be overridden by specifying the value `false`. if noCategoryFallback == nil then noCategoryFallback = true end local non_en_wikipedia_articles = self._non_en_wikipedia_articles if non_en_wikipedia_articles == nil then non_en_wikipedia_articles = {} self._non_en_wikipedia_articles = non_en_wikipedia_articles else article = non_en_wikipedia_articles[project] end if article == nil then article = get_wiki_article(self, project) non_en_wikipedia_articles[project] = article end end if article or noCategoryFallback then return article or nil end return (gsub(self:getCategoryName(), "Creole language", "Creole")) end end do local function get_commons_cat_claim(item) if item then local entity = get_entity and get_entity(item) or nil if entity then -- P373 is the "Commons category" property. local claim = entity:getBestStatements("P373")[1] return claim and ("Category:" .. claim.mainsnak.datavalue.value) or nil end end end local function get_commons_cat_sitelink(item) if item then local commons_sitelink = sitelink and sitelink(item, "commonswiki") or nil -- Reject any sitelinks that aren't categories. return commons_sitelink and match(commons_sitelink, "^Category:") and commons_sitelink or nil end end local function get_commons_cat(self) -- Checks are in decreasing order of likelihood for a useful match. -- Get the Commons Category claim from the object's item. local lang_item = self:getWikidataItem() local category = get_commons_cat_claim(lang_item) if category then return category end -- Otherwise, try the object's category's item. local langcat_item = get_entity_id_for_title and get_entity_id_for_title("श्रेणी:" .. self:getCategoryName()) or nil category = get_commons_cat_claim(langcat_item) if category then return category end -- If there's no P373 claim, there might be a sitelink on the -- object's category's item. category = get_commons_cat_sitelink(langcat_item) if category then return category end -- Otherwise, try for a sitelink on the object's own item. category = get_commons_cat_sitelink(lang_item) if category then return category end -- If there's still no category, try the parent (if any). local get_parent = self.getParent if get_parent then local parent = get_parent(self) if parent then return get_commons_cat(parent) end end return false end -- Implementation of getCommonsCategory() for languages, etymology -- languages, families, scripts and writing systems. function export.getCommonsCategory(self) local category category = self._commons_category -- Nil values cached as false. if category ~= nil then return category or nil end category = get_commons_cat(self) self._commons_category = category return category or nil end end function export.categoryNameHasSuffix(name, suffixes) for _, suffix in ipairs(suffixes) do if umatch(name, "%f[%w]" .. case_insensitive_pattern(suffix, "^.") .. "$") then return false end end return true end category_name_has_suffix = export.categoryNameHasSuffix function export.categoryNameToCode(name, suffix, data, suffixes) local truncated = match(name, "(.*)" .. suffix .. "$") if truncated and category_name_has_suffix(truncated, suffixes) then local code = data[truncated] if code ~= nil then return code, truncated end truncated = (content_lang or get_content_lang()):lcfirst(truncated) code = data[truncated] if code ~= nil then return code, truncated end end if not category_name_has_suffix(name, suffixes) then local code = data[name] if code ~= nil then return code, name end name = (content_lang or get_content_lang()):lcfirst(name) code = data[name] if code ~= nil then return code, name end end return nil, nil end return export ph8cg2e1900g3x6l9fixjp3r361nx3w 487633 487632 2026-09-01T19:07:53Z SM7 6218 लोकेलाइज 487633 Scribunto text/plain local export = {} local string_utilities_module = "Module:string utilities" local table_module = "Module:table" -- In a locally installed Docker container containing Wiktionary, Wikibase is typically not installed because it's -- a real pain to get working properly. In such a case, `mw.wikibase` returns nil. We now have checks in the code -- below so it does reasonable things in the absence of Wikibase. local wikibase = mw.wikibase local category_name_has_suffix -- defined as export.categoryNameHasSuffix below local get_entity = wikibase and wikibase.getEntity or nil local get_entity_id_for_title = wikibase and wikibase.getEntityIdForTitle or nil local gsub = string.gsub local ipairs = ipairs local match = string.match local select = select local sitelink = wikibase and wikibase.sitelink or nil local type = type local umatch = mw.ustring.match --[==[ Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==] local function case_insensitive_pattern(...) case_insensitive_pattern = require(string_utilities_module).case_insensitive_pattern return case_insensitive_pattern(...) end local function table_flatten(...) table_flatten = require(table_module).flatten return table_flatten(...) end --[==[ Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==] local content_lang local function get_content_lang() content_lang, get_content_lang = mw.getContentLanguage(), nil return content_lang end -- Implementation of getAliases() for languages, etymology languages, -- families, scripts and writing systems. function export.getAliases(self) local aliases = self._aliases if aliases == nil then aliases = (self._data or self).aliases or {} self._aliases = aliases end return aliases end -- Implementation of getVarieties() for languages, etymology languages, -- families, scripts and writing systems. If `flatten` is passed in, -- flatten down to a list of strings; otherwise, keep the structure. function export.getVarieties(self, flatten) local varieties = self._varieties if varieties == nil then varieties = (self._data or self).varieties or {} self._varieties = varieties end if not flatten then return varieties end local flattened_varieties = self._flattened_varieties if flattened_varieties == nil then flattened_varieties = table_flatten(varieties) self._flattened_varieties = flattened_varieties end return flattened_varieties end -- Implementation of getOtherNames() for languages, etymology languages, -- families, scripts and writing systems. function export.getOtherNames(self) local other_names = self._other_names if other_names == nil then other_names = (self._data or self).other_names or {} self._other_names = other_names end return other_names end -- Implementation of getAllNames() for languages, etymology languages, -- families, scripts and writing systems. function export.getAllNames(self) local all_names = self._allNames if all_names == nil then all_names = table_flatten{ self.getCanonicalNames and self:getCanonicalNames() or self:getCanonicalName(), self:getAliases(), self:getVarieties(), self:getOtherNames(), } self._allNames = all_names end return all_names end function export.hasType(self, ...) local n = select("#", ...) if n == 0 then error("Must specify at least one type.") end local types = self:getTypes() if not types[...] then return false elseif n == 1 then return true end local args = {...} for i = 2, n do if not types[args[i]] then return false end end return true end -- Implementation of template-callable getByCode() function for languages, -- etymology languages, families and scripts. `item` is the language, -- family or script in question; `args` is the arguments passed in by the -- module invocation; `extra_processing`, if specified, is a function of -- one argument (the requested property) and should return the value to -- be returned to the caller, or nil if the property isn't recognized. -- `extra_processing` is called after special-cased properties are handled -- and before general-purpose processing code that works for all string -- properties. function export.templateGetByCode(args, extra_processing) -- The item that the caller wanted to look up. local item, itemname, list = args[1], args[2] if itemname == "getAllNames" then list = item:getAllNames() elseif itemname == "getOtherNames" then list = item:getOtherNames() elseif itemname == "getAliases" then list = item:getAliases() elseif itemname == "getVarieties" then list = item:getVarieties(true) end if list then local index = args[3]; if index == "" then index = nil end index = tonumber(index or error("Numeric index of the desired item in the list (parameter 3) has not been specified.")) return list[index] or "" end if itemname == "getFamily" and item.getFamily then return item:getFamily():getCode() end if extra_processing then local retval = extra_processing(itemname) if retval then return retval end end if item[itemname] then local ret = item[itemname](item) if type(ret) == "string" then return ret end error("The function \"" .. itemname .. "\" did not return a string value.") end error("Requested invalid item name \"" .. itemname .. "\".") end -- Implementation of getCommonsCategory() for languages, etymology languages, -- families, scripts and writing systems. function export.getWikidataItem(self) local item = self._WikidataItem if item == nil then item = (self._data or self)[2] -- If the value is nil, it's cached as false. item = item ~= nil and (type(item) == "number" and "Q" .. item or item) or false self._WikidataItem = item end return item or nil end do local function get_wiki_article(self, project) local article -- If the project is enwiki, check the language data. if project == "hiwiki" then article = (self._data or self).wikipedia_article if article then return article end end -- Otherwise, check the Wikidata item for a sitelink. local item = self:getWikidataItem() article = item and sitelink and sitelink(item, project) or false if article then return article end -- If there's still no article, try the parent (if any). local get_parent = self.getParent if get_parent then local parent = get_parent(self) if parent then return get_wiki_article(parent, project) end end return false end -- Implementation of getWikipediaArticle() for languages, etymology languages, -- families, scripts and writing systems. function export.getWikipediaArticle(self, noCategoryFallback, project) if project == nil then project = "hiwiki" end local article if project == "hiwiki" then article = self._wikipedia_article if article == nil then article = get_wiki_article(self, project) self._wikipedia_article = article end else -- If the project isn't enwiki, default to no category fallback, but -- this can be overridden by specifying the value `false`. if noCategoryFallback == nil then noCategoryFallback = true end local non_en_wikipedia_articles = self._non_en_wikipedia_articles if non_en_wikipedia_articles == nil then non_en_wikipedia_articles = {} self._non_en_wikipedia_articles = non_en_wikipedia_articles else article = non_en_wikipedia_articles[project] end if article == nil then article = get_wiki_article(self, project) non_en_wikipedia_articles[project] = article end end if article or noCategoryFallback then return article or nil end return (gsub(self:getCategoryName(), "क्रियोल भाषा", "क्रियोल")) end end do local function get_commons_cat_claim(item) if item then local entity = get_entity and get_entity(item) or nil if entity then -- P373 is the "Commons category" property. local claim = entity:getBestStatements("P373")[1] return claim and ("श्रेणी:" .. claim.mainsnak.datavalue.value) or nil end end end local function get_commons_cat_sitelink(item) if item then local commons_sitelink = sitelink and sitelink(item, "commonswiki") or nil -- Reject any sitelinks that aren't categories. return commons_sitelink and match(commons_sitelink, "^श्रेणी:") and commons_sitelink or nil end end local function get_commons_cat(self) -- Checks are in decreasing order of likelihood for a useful match. -- Get the Commons Category claim from the object's item. local lang_item = self:getWikidataItem() local category = get_commons_cat_claim(lang_item) if category then return category end -- Otherwise, try the object's category's item. local langcat_item = get_entity_id_for_title and get_entity_id_for_title("श्रेणी:" .. self:getCategoryName()) or nil category = get_commons_cat_claim(langcat_item) if category then return category end -- If there's no P373 claim, there might be a sitelink on the -- object's category's item. category = get_commons_cat_sitelink(langcat_item) if category then return category end -- Otherwise, try for a sitelink on the object's own item. category = get_commons_cat_sitelink(lang_item) if category then return category end -- If there's still no category, try the parent (if any). local get_parent = self.getParent if get_parent then local parent = get_parent(self) if parent then return get_commons_cat(parent) end end return false end -- Implementation of getCommonsCategory() for languages, etymology -- languages, families, scripts and writing systems. function export.getCommonsCategory(self) local category category = self._commons_category -- Nil values cached as false. if category ~= nil then return category or nil end category = get_commons_cat(self) self._commons_category = category return category or nil end end function export.categoryNameHasSuffix(name, suffixes) for _, suffix in ipairs(suffixes) do if umatch(name, "%f[%w]" .. case_insensitive_pattern(suffix, "^.") .. "$") then return false end end return true end category_name_has_suffix = export.categoryNameHasSuffix function export.categoryNameToCode(name, suffix, data, suffixes) local truncated = match(name, "(.*)" .. suffix .. "$") if truncated and category_name_has_suffix(truncated, suffixes) then local code = data[truncated] if code ~= nil then return code, truncated end truncated = (content_lang or get_content_lang()):lcfirst(truncated) code = data[truncated] if code ~= nil then return code, truncated end end if not category_name_has_suffix(name, suffixes) then local code = data[name] if code ~= nil then return code, name end name = (content_lang or get_content_lang()):lcfirst(name) code = data[name] if code ~= nil then return code, name end end return nil, nil end return export qbl98b8u1lh0ve0xkv1pjd7wvo2hv0f मॉड्यूल:TemplateStyles 828 303190 487718 470621 2026-09-02T10:20:28Z SM7 6218 updating... 487718 Scribunto text/plain local frame = mw.getCurrentFrame() local args = {} return function (stylesheet) args.src = stylesheet return frame:extensionTag("templatestyles", nil, args) end fpxp4rqu6felstio94845c8h0qu6kw7 मॉड्यूल:string utilities 828 303604 487595 477422 2026-09-01T17:57:00Z SM7 6218 updating... 487595 Scribunto text/plain local export = {} local function_module = "Module:fun" local load_module = "Module:load" local memoize_module = "Module:memoize" local string_char_module = "Module:string/char" local string_charset_escape_module = "Module:string/charsetEscape" local mw = mw local string = string local table = table local ustring = mw.ustring local byte = string.byte local char = string.char local concat = table.concat local find = string.find local format = string.format local gmatch = string.gmatch local gsub = string.gsub local insert = table.insert local len = string.len local lower = string.lower local match = string.match local next = next local require = require local reverse = string.reverse local select = select local sort = table.sort local sub = string.sub local tonumber = tonumber local tostring = tostring local type = type local ucodepoint = ustring.codepoint local ufind = ustring.find local ugcodepoint = ustring.gcodepoint local ugmatch = ustring.gmatch local ugsub = ustring.gsub local ulower = ustring.lower local umatch = ustring.match local unpack = unpack or table.unpack -- Lua 5.2 compatibility local upper = string.upper local usub = ustring.sub local uupper = ustring.upper local memoize = require(memoize_module) -- Defined below. local codepoint local explode_utf8 local format_fun local get_charset local gsplit local pattern_escape local pattern_simplifier local replacement_escape local title_case local trim local ucfirst local ulen --[==[ Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls. ]==] local function charset_escape(...) charset_escape = require(string_charset_escape_module) return charset_escape(...) end local function is_callable(...) is_callable = require(function_module).is_callable return is_callable(...) end local function load_data(...) load_data = require(load_module).load_data return load_data(...) end local function u(...) u = require(string_char_module) return u(...) end local function prepare_iter(str, pattern, str_lib, plain) local callable = is_callable(pattern) if str_lib or plain then return pattern, #str, string, callable elseif not callable then local simple = pattern_simplifier(pattern) if simple then return simple, #str, string, false end end return pattern, ulen(str), ustring, callable end --[==[ Returns {nil} if the input value is the empty string, or otherwise the same value. If the input is a string and `do_trim` is set, the input value will be trimmed before returning; if the trimmed value is the empty string, returns {nil}. If `quote_delimiters` is set, then any outer pair of quotation marks ({' '} or {" "}) surrounding the rest of the input string will be stripped, if present. The string will not be trimmed again, converted to {nil}, or have further quotation marks stripped, as it exists as a way to embed spaces or the empty string in an input. Genuine quotation marks may also be embedded this way (e.g. {"''foo''"} returns {"'foo'"}). ]==] function export.is_not_empty(str, do_trim, quote_delimiters) if str == "" then return nil elseif not (str and type(str) == "string") then return str elseif do_trim then str = trim(str) if str == "" then return nil end end return quote_delimiters and gsub(str, "^(['\"])(.*)%1$", "%2") or str end --[==[ Explodes a string into an array of UTF-8 characters. '''Warning''': this function assumes that the input is valid UTF-8 in order to optimize speed and memory use. Passing in an input containing non-UTF-8 byte sequences could result in unexpected behaviour. ]==] function export.explode_utf8(str) local text, i = {}, 0 for ch in gmatch(str, ".[\128-\191]*") do i = i + 1 text[i] = ch end return text end explode_utf8 = export.explode_utf8 --[==[ Returns {true} if `str` is a valid UTF-8 string. This is true if, for each character, all of the following are true: * It has the expected number of bytes, which is determined by value of the leading byte: 1-byte characters are `0x00` to `0x7F`, 2-byte characters start with `0xC2` to `0xDF`, 3-byte characters start with `0xE0` to `0xEF`, and 4-byte characters start with `0xF0` to `0xF4`. * The leading byte must not fall outside of the above ranges. * The trailing byte(s) (if any), must be between `0x80` to `0xBF`. * The character's codepoint must be between U+0000 (`0x00`) and U+10FFFF (`0xF4 0x8F 0xBF 0xBF`). * The character cannot have an overlong encoding: for each byte length, the lowest theoretical encoding is equivalent to U+0000 (e.g. `0xE0 0x80 0x80`, the lowest theoretical 3-byte encoding, is exactly equivalent to U+0000). Encodings that use more than the minimum number of bytes are not considered valid, meaning that the first valid 3-byte character is `0xE0 0xA0 0x80` (U+0800), and the first valid 4-byte character is `0xF0 0x90 0x80 0x80` (U+10000). Formally, 2-byte characters have leading bytes ranging from `0xC0` to `0xDF` (rather than `0xC2` to `0xDF`), but `0xC0 0x80` to `0xC1 0xBF` are overlong encodings, so it is simpler to say that the 2-byte range begins at `0xC2`. If `allow_surrogates` is set, surrogates (U+D800 to U+DFFF) will be treated as valid UTF-8. Surrogates are used in UTF-16, which encodes codepoints U+0000 to U+FFFF with 2 bytes, and codepoints from U+10000 upwards using a pair of surrogates, which are taken together as a 4-byte unit. Since surrogates have no use in UTF-8, as it encodes higher codepoints in a different way, they are not considered valid in UTF-8 text. However, there are limited circumstances where they may be necessary: for instance, JSON escapes characters using the format `\u0000`, which must contain exactly 4 hexadecimal digits; under the scheme, codepoints above U+FFFF must be escaped as the equivalent pair of surrogates, even though the text itself must be encoded in UTF-8 (e.g. U+10000 becomes `\uD800\uDC00`). ]==] function export.isutf8(str, allow_surrogates) for ch in gmatch(str, "[\128-\255][\128-\191]*") do if #ch > 4 then return false end local b1, b2, b3, b4 = byte(ch, 1, 4) if not (b2 and b2 >= 0x80 and b2 <= 0xBF) then return false -- 1-byte is always invalid, as gmatch excludes 0x00 to 0x7F elseif not b3 then -- 2-byte if not (b1 >= 0xC2 and b1 <= 0xDF) then -- b1 == 0xC0 or b1 == 0xC1 is overlong return false end elseif not (b3 >= 0x80 and b3 <= 0xBF) then -- trailing byte return false elseif not b4 then -- 3-byte if b1 > 0xEF then return false elseif b2 < 0xA0 then if b1 < 0xE1 then -- b1 == 0xE0 and b2 < 0xA0 is overlong return false end elseif b1 < 0xE0 or (b1 == 0xED and not allow_surrogates) then -- b1 == 0xED and b2 >= 0xA0 is a surrogate return false end elseif not (b4 >= 0x80 and b4 <= 0xBF) then -- 4-byte return false elseif b2 < 0x90 then if not (b1 >= 0xF1 and b1 <= 0xF4) then -- b1 == 0xF0 and b2 < 0x90 is overlong return false end elseif not (b1 >= 0xF0 and b1 <= 0xF3) then -- b1 == 0xF4 and b2 >= 0x90 is too high return false end end return true end do local charset_chars = { ["\0"] = "%z", ["%"] = "%%", ["-"] = "%-", ["]"] = "%]", ["^"] = "%^" } charset_chars.__index = charset_chars local chars = setmetatable({ ["$"] = "%$", ["("] = "%(", [")"] = "%)", ["*"] = "%*", ["+"] = "%+", ["."] = "%.", ["?"] = "%?", ["["] = "%[" }, charset_chars) --[==[ Escapes the magic characters used in a [[mw:Extension:Scribunto/Lua reference manual#Patterns|pattern]] (Lua's version of regular expressions): {$%()*+-.?[]^}, and converts the null character to {%z}. For example, {"^$()%.[]*+-?\0"} becomes {"%^%$%(%)%%%.%[%]%*%+%-%?%z"}. This is necessary when constructing a pattern involving arbitrary text (e.g. from user input). ]==] function export.pattern_escape(str) return (gsub(str, "[%z$%%()*+%-.?[%]^]", chars)) end pattern_escape = export.pattern_escape --[==[ Escapes only {%}, which is the only magic character used in replacement [[mw:Extension:Scribunto/Lua reference manual#Patterns|patterns]] with string.gsub and mw.ustring.gsub. ]==] function export.replacement_escape(str) return (gsub(str, "%%", "%%%%")) end replacement_escape = export.replacement_escape local function case_insensitive_char(ch) local upper_ch = uupper(ch) if upper_ch == ch then ch = ulower(ch) if ch == upper_ch then return chars[ch] or ch end end return "[" .. (charset_chars[upper_ch] or upper_ch) .. (charset_chars[ch] or ch) .. "]" end local function iterate(str, str_len, text, n, start, _gsub, _sub, loc1, loc2) if not (loc1 and start <= str_len) then -- Add final chunk and return. n = n + 1 text[n] = _gsub(_sub(str, start), ".", chars) return elseif loc2 < loc1 then if _sub == sub then local b = byte(str, loc1) if b and b >= 128 then loc1 = loc1 + (b < 224 and 1 or b < 240 and 2 or 3) end end n = n + 1 text[n] = _gsub(_sub(str, start, loc1), ".", chars) start = loc1 + 1 if start > str_len then return end else -- Add chunk up to the current match. n = n + 1 text[n] = _gsub(_sub(str, start, loc1 - 1), ".", chars) -- Add current match. n = n + 1 text[n] = _gsub(_sub(str, loc1, loc2), ".", case_insensitive_char) start = loc2 + 1 end return n, start end --[==[ Escapes the magic characters used in a [[mw:Extension:Scribunto/Lua reference manual#Patterns|pattern]], and makes all characters case-insensitive. An optional pattern or find function (see {split}) may be supplied as the second argument, the third argument (`str_lib`) forces use of the string library, while the fourth argument (`plain`) turns any pattern matching facilities off in the optional pattern supplied. ]==] function export.case_insensitive_pattern(str, pattern_or_func, str_lib, plain) if pattern_or_func == nil then return (gsub(str, str_lib and "[^\128-\255]" or ".[\128-\191]*", case_insensitive_char)) end local text, n, start, str_len, _string, callable = {}, 0, 1 pattern_or_func, str_len, _string, callable = prepare_iter(str, pattern_or_func, str_lib, plain) local _find, _gsub, _sub = _string.find, _string.gsub, _string.sub if callable then repeat n, start = iterate(str, str_len, text, n, start, _gsub, _sub, pattern_or_func(str, start)) until not start -- Special case if the pattern is anchored to the start: "^" always -- anchors to the start position, not the start of the string, so get -- around this by only attempting one match with the pattern, then match -- the end of the string. elseif byte(pattern_or_func) == 0x5E then -- ^ n, start = iterate(str, str_len, text, n, start, _gsub, _sub, _find(str, pattern_or_func, start, plain)) if start ~= nil then iterate(str, str_len, text, n, start, _gsub, _sub, _find(str, "$", start, plain)) end else repeat n, start = iterate(str, str_len, text, n, start, _gsub, _sub, _find(str, pattern_or_func, start, plain)) until not start end return concat(text) end end do local character_classes local function get_character_classes() character_classes, get_character_classes = { [0x41] = true, [0x61] = true, -- Aa [0x43] = true, [0x63] = true, -- Cc [0x44] = true, [0x64] = true, -- Dd [0x4C] = true, [0x6C] = true, -- Ll [0x50] = true, [0x70] = true, -- Pp [0x53] = true, [0x73] = true, -- Ss [0x55] = true, [0x75] = true, -- Uu [0x57] = true, [0x77] = true, -- Ww [0x58] = true, [0x78] = true, -- Xx [0x5A] = true, -- z dealt with separately. }, nil return character_classes end local function check_sets_equal(set1, set2) local k2 for k1, v1 in next, set1 do local v2 = set2[k1] if v1 ~= v2 and (v2 == nil or not check_sets_equal(v1, v2)) then return false end k2 = next(set2, k2) end return next(set2, k2) == nil end local function check_sets(bytes) local key, set1, set = next(bytes) if set1 == true then return true elseif not check_sets(set1) then return false end while true do key, set = next(bytes, key) if not key then return true elseif not check_sets_equal(set, set1) then return false end end end local function make_charset(range) if #range == 1 then return char(range[1]) end sort(range) local compressed, n, start = {}, 0, range[1] for i = 1, #range do local this, nxt = range[i], range[i + 1] if nxt ~= this + 1 then n = n + 1 compressed[n] = this == start and char(this) or char(start) .. "-" .. char(this) start = nxt end end return "[" .. concat(compressed) .. "]" end local function parse_1_byte_charset(pattern, pos) local ch while true do pos, ch = match(pattern, "()([%%%]\192-\255])", pos) if ch == "%" then local nxt = byte(pattern, pos + 1) if not nxt or nxt >= 128 or (character_classes or get_character_classes())[nxt] then -- acdlpsuwxACDLPSUWXZ, but not z return false end pos = pos + 2 elseif ch == "]" then pos = pos + 1 return pos else return false end end end --[==[ Parses `pattern`, a ustring library pattern, and attempts to convert it into a string library pattern. If conversion isn't possible, returns false. ]==] function pattern_simplifier(pattern) if type(pattern) == "number" then return tostring(pattern) end local pos, capture_groups, start, n, output, ch, nxt_pos = 1, 0, 1, 0 while true do -- FIXME: use "()([%%(.[\128-\255])[\128-\191]?[\128-\191]?[\128-\191]?()" and ensure non-UTF8 always fails. pos, ch, nxt_pos = match(pattern, "()([%%(.[\192-\255])[\128-\191]*()", pos) if not ch then break end local nxt = byte(pattern, nxt_pos) if ch == "%" then if nxt == 0x62 then -- b local nxt2, nxt3 = byte(pattern, pos + 2, pos + 3) if not (nxt2 and nxt2 < 128 and nxt3 and nxt3 < 128) then return false end pos = pos + 4 elseif nxt == 0x66 then -- f nxt_pos = nxt_pos + 2 local nxt2, nxt3 = byte(pattern, nxt_pos - 1, nxt_pos) -- Only possible to convert a positive %f charset which is -- all ASCII, so use parse_1_byte_charset. if not (nxt2 == 0x5B and nxt3 and nxt3 ~= 0x5E and nxt3 < 128) then -- [^ return false elseif nxt3 == 0x5D then -- Initial ] is non-magic. nxt_pos = nxt_pos + 1 end pos = parse_1_byte_charset(pattern, nxt_pos) if not pos then return false end elseif nxt == 0x5A then -- Z nxt = byte(pattern, nxt_pos + 1) if nxt == 0x2A or nxt == 0x2D then -- *- pos = pos + 3 else if output == nil then output = {} end local ins = sub(pattern, start, pos - 1) .. "[\1-\127\192-\255]" n = n + 1 if nxt == 0x2B then -- + output[n] = ins .. "%Z*" pos = pos + 3 elseif nxt == 0x3F then -- ? output[n] = ins .. "?[\128-\191]*" pos = pos + 3 else output[n] = ins .. "[\128-\191]*" pos = pos + 2 end start = pos end elseif not nxt or (character_classes or get_character_classes())[nxt] then -- acdlpsuwxACDLPSUWX, but not Zz return false -- Skip the next character if it's ASCII. Otherwise, we will -- still need to do length checks. else pos = pos + (nxt < 128 and 2 or 1) end elseif ch == "(" then if nxt == 0x29 or capture_groups == 32 then -- ) return false end capture_groups = capture_groups + 1 pos = pos + 1 elseif ch == "." then if nxt == 0x2A or nxt == 0x2D then -- *- pos = pos + 2 else if output == nil then output = {} end local ins = sub(pattern, start, pos - 1) .. "[^\128-\191]" n = n + 1 if nxt == 0x2B then -- + output[n] = ins .. ".*" pos = pos + 2 elseif nxt == 0x3F then -- ? output[n] = ins .. "?[\128-\191]*" pos = pos + 2 else output[n] = ins .. "[\128-\191]*" pos = pos + 1 end start = pos end elseif ch == "[" then -- Fail negative charsets. TODO: 1-byte charsets should be safe. if nxt == 0x5E then -- ^ return false -- If the first character is "%", ch_len is determined by the -- next one instead. elseif nxt == 0x25 then -- % nxt = byte(pattern, nxt_pos + 1) elseif nxt == 0x5D then -- Initial ] is non-magic. nxt_pos = nxt_pos + 1 end if not nxt then return false end local ch_len = nxt < 128 and 1 or nxt < 224 and 2 or nxt < 240 and 3 or 4 if ch_len == 1 then -- Single-byte charset. pos = parse_1_byte_charset(pattern, nxt_pos) if not pos then return false end else -- Multibyte charset. -- TODO: 1-byte chars should be safe to mix with multibyte chars. CONFIRM THIS FIRST. local charset_pos, bytes = pos pos = pos + 1 while true do -- TODO: non-ASCII charset ranges. pos, ch, nxt_pos = match(pattern, "^()([^\128-\191])[\128-\191]*()", pos) -- If escaped, get the next character. No need to -- distinguish magic characters or character classes, -- as they'll all fail for having the wrong length -- anyway. if ch == "%" then pos, ch, nxt_pos = match(pattern, "^()([^\128-\191])[\128-\191]*()", nxt_pos) elseif ch == "]" then pos = nxt_pos break end if not (ch and nxt_pos - pos == ch_len) then return false elseif bytes == nil then bytes = {} end local bytes, last = bytes, nxt_pos - 1 for i = pos, last - 1 do local b = byte(pattern, i) local bytes_b = bytes[b] if bytes_b == nil then bytes_b = {} bytes[b] = bytes_b end bytes[b], bytes = bytes_b, bytes_b end bytes[byte(pattern, last)] = true pos = nxt_pos end if not pos then return false end nxt = byte(pattern, pos) if ( (nxt == 0x2A or nxt == 0x2D or nxt == 0x3F) or -- *-? (nxt == 0x2B and ch_len > 2) or -- + not check_sets(bytes) ) then return false end local ranges, b, key, next_byte = {}, 0 repeat key, next_byte = next(bytes) local range, n = {key}, 1 -- Loop starts on the second iteration. for key in next, bytes, key do n = n + 1 range[n] = key end b = b + 1 ranges[b] = range bytes = next_byte until next_byte == true if nxt == 0x2B then -- + local range1, range2 = ranges[1], ranges[2] ranges[1], ranges[3] = make_charset(range1), make_charset(range2) local n = #range2 for i = 1, #range1 do n = n + 1 range2[n] = range1[i] end ranges[2] = make_charset(range2) .. "*" pos = pos + 1 else for i = 1, #ranges do ranges[i] = make_charset(ranges[i]) end end if output == nil then output = {} end nxt = byte(pattern, pos) n = n + 1 output[n] = sub(pattern, start, charset_pos - 1) .. concat(ranges) .. ((nxt == 0x2A or nxt == 0x2B or nxt == 0x2D or nxt == 0x3F) and "%" or "") -- following *+-? now have to be escaped start = pos end elseif not nxt then break elseif nxt == 0x2B then -- + if nxt_pos - pos ~= 2 then return false elseif output == nil then output = {} end pos, nxt_pos = pos + 1, nxt_pos + 1 nxt = byte(pattern, nxt_pos) local ch2 = sub(pattern, pos, pos) n = n + 1 output[n] = sub(pattern, start, pos - 1) .. "[" .. ch .. ch2 .. "]*" .. ch2 .. ((nxt == 0x2A or nxt == 0x2B or nxt == 0x2D or nxt == 0x3F) and "%" or "") -- following *+-? now have to be escaped pos, start = nxt_pos, nxt_pos elseif nxt == 0x2A or nxt == 0x2D or nxt == 0x3F then -- *-? return false else pos = nxt_pos end end if start == 1 then return pattern end return concat(output) .. sub(pattern, start) end pattern_simplifier = memoize(pattern_simplifier, true) export.pattern_simplifier = pattern_simplifier end --[==[ Parses `charset`, the interior of a string or ustring library character set, and normalizes it into a string or ustring library pattern (e.g. {"abcd-g"} becomes {"[abcd-g]"}, and {"[]"} becomes {"[[%]]"}). The negative (`^`), range (`-`) and literal (`%`) magic characters work as normal, and character classes may be used (e.g. `%d` and `%w`), but opening and closing square brackets are sanitized so that they behave like ordinary characters. ]==] function get_charset(charset) if type(charset) == "number" then return tostring(charset) end local pos, start, n, output = 1, 1, 0 if byte(charset) == 0x5E then -- ^ pos = pos + 1 end -- FIXME: "]" is non-magic if it's the first character in a charset. local nxt_pos, nxt while true do local new_pos, ch = match(charset, "()([%%%-%]])", pos) if not ch then break -- Skip percent escapes. Ranges can't start with them, either. elseif ch == "%" then pos = new_pos + 2 else -- If `ch` is a hyphen, get the character before iff it's at or ahead of `pos`. if ch == "-" and new_pos > pos then pos, nxt_pos, nxt = new_pos - 1, new_pos, ch ch = sub(charset, pos, pos) else pos, nxt_pos = new_pos, new_pos + 1 nxt = sub(charset, nxt_pos, nxt_pos) end -- Range. if nxt == "-" then if output == nil then output = {} end n = n + 1 output[n] = sub(charset, start, pos - 1) nxt_pos = nxt_pos + 1 nxt = sub(charset, nxt_pos, nxt_pos) -- Ranges fail if they end with a percent escape, so escape the hyphen to avoid undefined behaviour. if nxt == "" or nxt == "%" then n = n + 1 output[n] = (ch == "]" and "%]" or ch) .. "%-" start = nxt_pos nxt_pos = nxt_pos + 2 -- Since ranges can't contain "%]", since it's escaped, range inputs like "]-z" or "a-]" must be -- adjusted to the character before or after, plus "%]" (e.g. "%]^-z" or "a-\\%]"). The escaped "%]" is -- omitted if the range would be empty (i.e. if the first byte is greater than the second). else n = n + 1 output[n] = (ch == "]" and (byte(nxt) >= 0x5D and "%]^" or "^") or ch) .. "-" .. (nxt == "]" and (byte(ch) <= 0x5D and "\\%]" or "\\") or nxt) nxt_pos = nxt_pos + 1 start = nxt_pos end elseif ch == "-" or ch == "]" then if output == nil then output = {} end n = n + 1 output[n] = sub(charset, start, pos - 1) .. "%" .. ch start = nxt_pos end pos = nxt_pos end end if start == 1 then return "[" .. charset .. "]" end return "[" .. concat(output) .. sub(charset, start) .. "]" end get_charset = memoize(get_charset, true) export.get_charset = get_charset function export.len(str) return type(str) == "number" and len(str) or #str - #gsub(str, "[^\128-\191]+", "") end ulen = export.len function export.sub(str, i, j) str, i = type(str) == "number" and tostring(str) or str, i or 1 if i < 0 or j and j < 0 then return usub(str, i, j) elseif j and i > j or i > #str then return "" end local n, new_i = 0 for loc1, loc2 in gmatch(str, "()[^\128-\191]+()[\128-\191]*") do n = n + loc2 - loc1 if not new_i and n >= i then new_i = loc2 - (n - i) - 1 if not j then return sub(str, new_i) end end if j and n > j then return sub(str, new_i, loc2 - (n - j) - 1) end end return new_i and sub(str, new_i) or "" end do local function _find(str, loc1, loc2, ...) if loc1 and not match(str, "^()[^\128-\255]*$") then -- Use raw values of loc1 and loc2 to get loc1 and the length of the match. loc1, loc2 = ulen(sub(str, 1, loc1)), ulen(sub(str, loc1, loc2)) -- Offset length with loc1 to get loc2. loc2 = loc1 + loc2 - 1 end return loc1, loc2, ... end --[==[A version of find which uses string.find when possible, but otherwise uses mw.ustring.find.]==] function export.find(str, pattern, init, plain) init = init or 1 if init ~= 1 and not match(str, "^()[^\128-\255]*$") then return ufind(str, pattern, init, plain) elseif plain then return _find(str, find(str, pattern, init, true)) end local simple = pattern_simplifier(pattern) if simple then return _find(str, find(str, simple, init)) end return ufind(str, pattern, init) end end --[==[A version of match which uses string.match when possible, but otherwise uses mw.ustring.match.]==] function export.match(str, pattern, init) init = init or 1 if init ~= 1 and not match(str, "^()[^\128-\255]*$") then return umatch(str, pattern, init) end local simple = pattern_simplifier(pattern) if simple then return match(str, simple, init) end return umatch(str, pattern, init) end --[==[A version of gmatch which uses string.gmatch when possible, but otherwise uses mw.ustring.gmatch.]==] function export.gmatch(str, pattern) local simple = pattern_simplifier(pattern) if simple then return gmatch(str, simple) end return ugmatch(str, pattern) end --[==[A version of gsub which uses string.gsub when possible, but otherwise uses mw.ustring.gsub.]==] function export.gsub(str, pattern, repl, n) local simple = pattern_simplifier(pattern) if simple then return gsub(str, simple, repl, n) end return ugsub(str, pattern, repl, n) end --[==[ Like gsub, but pattern-matching facilities are turned off, so `pattern` and `repl` (if a string) are treated as literal. ]==] function export.plain_gsub(str, pattern, repl, n) return gsub(str, pattern_escape(pattern), type(repl) == "string" and replacement_escape(repl) or repl, n) end --[==[ Reverses a UTF-8 string; equivalent to string.reverse. ]==] function export.reverse(str) return reverse((gsub(str, "[\192-\255][\128-\191]*", reverse))) end function export.char(...) -- To be moved to [[Module:string/char]]. return u(...) end do local function utf8_err(func_name) error(format("bad argument #1 to '%s' (string is not UTF-8)", func_name), 4) end local function get_codepoint(func_name, b1, b2, b3, b4) if b1 <= 0x7F then return b1, 1 elseif not (b2 and b2 >= 0x80 and b2 <= 0xBF) then utf8_err(func_name) elseif b1 <= 0xDF then local cp = 0x40 * b1 + b2 - 0x3080 return cp >= 0x80 and cp or utf8_err(func_name), 2 elseif not (b3 and b3 >= 0x80 and b3 <= 0xBF) then utf8_err(func_name) elseif b1 <= 0xEF then local cp = 0x1000 * b1 + 0x40 * b2 + b3 - 0xE2080 return cp >= 0x800 and cp or utf8_err(func_name), 3 elseif not (b4 and b4 >= 0x80 and b4 <= 0xBF) then utf8_err(func_name) end local cp = 0x40000 * b1 + 0x1000 * b2 + 0x40 * b3 + b4 - 0x3C82080 return cp >= 0x10000 and cp <= 0x10FFFF and cp or utf8_err(func_name), 4 end function export.codepoint(str, i, j) if str == "" then return -- return nothing elseif type(str) == "number" then return byte(str, i, j) end i, j = i or 1, j == -1 and #str or i or 1 if i == 1 and j == 1 then return (get_codepoint("codepoint", byte(str, 1, 4))) elseif i < 0 or j < 0 then return ucodepoint(str, i, j) -- FIXME end local n, nb, ret, nr = 0, 1, {}, 0 while n < j do n = n + 1 if n < i then local b = byte(str, nb) nb = nb + (b < 128 and 1 or b < 224 and 2 or b < 240 and 3 or 4) else local b1, b2, b3, b4 = byte(str, nb, nb + 3) if not b1 then break end nr = nr + 1 local add ret[nr], add = get_codepoint("codepoint", b1, b2, b3, b4) nb = nb + add end end return unpack(ret) end codepoint = export.codepoint function export.gcodepoint(str, i, j) i, j = i or 1, j ~= -1 and j or nil if i < 0 or j and j < 0 then return ugcodepoint(str, i, j) -- FIXME end local n, nb = 1, 1 while n < i do local b = byte(str, nb) if not b then break end nb = nb + (b < 128 and 1 or b < 224 and 2 or b < 240 and 3 or 4) n = n + 1 end return function() if j and n > j then return nil end n = n + 1 local b1, b2, b3, b4 = byte(str, nb, nb + 3) if not b1 then return nil end local ret, add = get_codepoint("gcodepoint", b1, b2, b3, b4) nb = nb + add return ret end end end do local _ulower = ulower --[==[A version of lower which uses string.lower when possible, but otherwise uses mw.ustring.lower.]==] function export.lower(str) return (match(str, "^()[^\128-\255]*$") and lower or _ulower)(str) end end do local _uupper = uupper --[==[A version of upper which uses string.upper when possible, but otherwise uses mw.ustring.upper.]==] function export.upper(str) return (match(str, "^()[^\128-\255]*$") and upper or _uupper)(str) end end do local function add_captures(t, n, ...) if ... == nil then return end -- Insert any captures from the splitting pattern. local offset, capture = n - 1, ... while capture do n = n + 1 t[n] = capture capture = select(n - offset, ...) end return n end --[==[ Reimplementation of mw.text.split() that includes any capturing groups in the splitting pattern. This works like Python's re.split() function, except that it has Lua's behavior when the split pattern is empty (i.e. advancing by one character at a time; Python returns the whole remainder of the string). When possible, it will use the string library, but otherwise uses the ustring library. There are two optional parameters: `str_lib` forces use of the string library, while `plain` turns any pattern matching facilities off, treating `pattern` as literal. In addition, `pattern` may be a custom find function (or callable table), which takes the input string and start index as its two arguments, and must return the start and end index of the match, plus any optional captures, or nil if there are no further matches. By default, the start index will be calculated using the ustring library, unless `str_lib` or `plain` is set. ]==] function export.split(str, pattern_or_func, str_lib, plain) local iter, t, n = gsplit(str, pattern_or_func, str_lib, plain), {}, 0 repeat n = add_captures(t, n, iter()) until n == nil return t end export.capturing_split = export.split -- To be removed. end --[==[ Returns an iterator function, which iterates over the substrings returned by {split}. The first value returned is the string up the splitting pattern, with any capture groups being returned as additional values on that iteration. ]==] function export.gsplit(str, pattern_or_func, str_lib, plain) local start, final, str_len, _string, callable = 1 pattern_or_func, str_len, _string, callable = prepare_iter(str, pattern_or_func, str_lib, plain) local _find, _sub = _string.find, _string.sub local function iter(loc1, loc2, ...) -- If no match, or there is but we're past the end of the string -- (which happens when the match is the empty string), then return -- the final chunk. if not loc1 then final = true return _sub(str, start) end -- Special case: If we match the empty string, then eat the -- next character; this avoids an infinite loop, and makes -- splitting by the empty string work the way mw.text.gsplit() does -- (including non-adjacent empty string matches with %f). If we -- reach the end of the string this way, set `final` to true, so we -- don't get stuck matching the empty string at the end. local chunk if loc2 < loc1 then -- If using the string library, we need to make sure we advance -- by one UTF-8 character. if _sub == sub then local b = byte(str, loc1) if b and b >= 128 then loc1 = loc1 + (b < 224 and 1 or b < 240 and 2 or 3) end end chunk = _sub(str, start, loc1) if loc1 >= str_len then final = true else start = loc1 + 1 end -- Eat chunk up to the current match. else chunk = _sub(str, start, loc1 - 1) start = loc2 + 1 end return chunk, ... end if callable then return function() if not final then return iter(pattern_or_func(str, start)) end end -- Special case if the pattern is anchored to the start: "^" always -- anchors to the start position, not the start of the string, so get -- around this by only attempting one match with the pattern, then match -- the end of the string. elseif byte(pattern_or_func) == 0x5E then -- ^ local returned return function() if not returned then returned = true return iter(_find(str, pattern_or_func, start, plain)) elseif not final then return iter(_find(str, "$", start, plain)) end end end return function() if not final then return iter(_find(str, pattern_or_func, start, plain)) end end end gsplit = export.gsplit function export.count(str, pattern, plain) if plain then return select(2, gsub(str, pattern_escape(pattern), "")) end local simple = pattern_simplifier(pattern) if simple then return select(2, gsub(str, pattern, "")) end return select(2, ugsub(str, pattern, "")) end function export.trim(str, charset, str_lib, plain) if charset == nil then -- "^.*%S" is the fastest trim algorithm except when strings only consist of characters to be trimmed, which are -- very slow due to catastrophic backtracking. gsub with "^%s*" gets around this by trimming such strings to "" -- first. return match(gsub(str, "^%s*", ""), "^.*%S") or "" elseif charset == "" then return str end charset = plain and ("[" .. charset_escape(charset) .. "]") or get_charset(charset) -- The pattern uses a non-greedy quantifier instead of the algorithm used for %s, because negative character sets -- are non-trivial to compute (e.g. "[^^-z]" becomes "[%^_-z]"). Plus, if the ustring library has to be used, there -- would be two callbacks into PHP, which is slower. local pattern = "^" .. charset .. "*(.-)" .. charset .. "*$" if not str_lib then local simple = pattern_simplifier(pattern) if not simple then return umatch(str, pattern) end pattern = simple end return match(str, pattern) end trim = export.trim do local entities local function get_entities() entities, get_entities = load_data("Module:data/entities"), nil return entities end local function decode_entity(hash, x, code) if hash == "" then return (entities or get_entities())[x .. code] end local cp if x == "" then cp = match(code, "^()%d+$") and tonumber(code) else cp = match(code, "^()%x+$") and tonumber(code, 16) end return cp and (cp <= 0xD7FF or cp >= 0xE000 and cp <= 0x10FFFF) and u(cp) or nil end -- Non-ASCII characters aren't valid in proper HTML named entities, but MediaWiki uses them in some custom aliases -- which have also been included in [[Module:data/entities]]. function export.decode_entities(str) local amp = find(str, "&", nil, true) return amp and find(str, ";", amp, true) and gsub(str, "&(#?)([xX]?)([%w\128-\255]+);", decode_entity) or str end end do local entities local function get_entities() -- Memoized HTML entities (taken from mw.text.lua). entities, get_entities = { ["\""] = "&quot;", ["&"] = "&amp;", ["'"] = "&#039;", ["<"] = "&lt;", [">"] = "&gt;", ["\194\160"] = "&nbsp;", }, nil return entities end local function encode_entity(ch) local entity = (entities or get_entities())[ch] if entity == nil then local cp = codepoint(ch) -- U+D800 to U+DFFF are surrogates, so can't be encoded as entities. entity = cp and (cp <= 0xD7FF or cp >= 0xE000) and format("&#%d;", cp) or false entities[ch] = entity end return entity or nil end function export.encode_entities(str, charset, str_lib, plain) if charset == nil then return (gsub(str, "[\"&'<>\194]\160?", entities or get_entities())) elseif charset == "" then return str end local pattern = plain and ("[" .. charset_escape(charset) .. "]") or charset == "." and charset or get_charset(charset) if not str_lib then local simple = pattern_simplifier(pattern) if not simple then return (ugsub(str, pattern, encode_entity)) end pattern = simple end return (gsub(str, pattern, encode_entity)) end end do local function decode_path(code) return char(tonumber(code, 16)) end local function decode(lead, trail) if lead == "+" or lead == "_" then return " " .. trail elseif #trail == 2 then return decode_path(trail) end return lead .. trail end function export.decode_uri(str, enctype) enctype = enctype and upper(enctype) or "QUERY" if enctype == "PATH" then return find(str, "%", nil, true) and gsub(str, "%%(%x%x)", decode_path) or str elseif enctype == "QUERY" then return (find(str, "%", nil, true) or find(str, "+", nil, true)) and gsub(str, "([%%%+])(%x?%x?)", decode) or str elseif enctype == "WIKI" then return (find(str, "%", nil, true) or find(str, "_", nil, true)) and gsub(str, "([%%_])(%x?%x?)", decode) or str end error("bad argument #2 to 'decode_uri' (expected QUERY, PATH, or WIKI)", 2) end end do local function _remove_comments(str, pre) local head = find(str, "<!--", nil, true) if not head then return str end local ret, n = {sub(str, 1, head - 1)}, 1 while true do local loc = find(str, "-->", head + 4, true) if not loc then return pre and concat(ret) or concat(ret) .. sub(str, head) end head = loc + 3 loc = find(str, "<!--", head, true) if not loc then return concat(ret) .. sub(str, head) end n = n + 1 ret[n] = sub(str, head, loc - 1) head = loc end end --[==[ Removes any HTML comments from the input text. `stage` can be one of three options: * {"PRE"} (default) applies the method used by MediaWiki's preprocessor: all {{code|html|<nowiki><!-- ... --></nowiki>}} pairs are removed, as well as any text after an unclosed {{code|html|<nowiki><!--</nowiki>}}. This is generally suitable when parsing raw template or [[mw:Parser extension tags|parser extension tag]] code. (Note, however, that the actual method used by the preprocessor is considerably more complex and differs under certain conditions (e.g. comments inside nowiki tags); if full accuracy is absolutely necessary, use [[Module:template parser]] instead). * {"POST"} applies the method used to generate the final page output once all templates have been expanded: it loops over the text, removing any {{code|html|<nowiki><!-- ... --></nowiki>}} pairs until no more are found (e.g. {{code|html|<nowiki><!-<!-- ... -->- ... --></nowiki>}} would be fully removed), but any unclosed {{code|html|<nowiki><!--</nowiki>}} is ignored. This is suitable for handling links embedded in template inputs, where the {"PRE"} method will have already been applied by the native parser. * {"BOTH"} applies {"PRE"} then {"POST"}. ]==] function export.remove_comments(str, stage) if not stage or stage == "PRE" then return _remove_comments(str, true) end local processed = stage == "POST" and _remove_comments(str) or stage == "BOTH" and _remove_comments(str, true) or error("bad argument #2 to 'remove_comments' (expected PRE, POST, or BOTH)", 2) while processed ~= str do str = processed processed = _remove_comments(str) end return str end end do local byte_escapes local function get_byte_escapes() byte_escapes, get_byte_escapes = load_data("Module:string utilities/data").byte_escapes, nil return byte_escapes end local function escape_byte(b) return (byte_escapes or get_byte_escapes())[b] or format("\\%03d", byte(b)) end function export.escape_bytes(str) return (gsub(str, ".", escape_byte)) end end function export.format_fun(str, fun) return (gsub(str, "{(\\?)((\\?)[^{}]*)}", function(p1, name, p2) if #p1 + #p2 == 1 then return name == "op" and "{" or name == "cl" and "}" or error(mw.getCurrentFrame():getTitle() .. " format: unrecognized escape sequence '{\\" .. name .. "}'") elseif fun(name) and type(fun(name)) ~= "string" then error(mw.getCurrentFrame():getTitle() .. " format: \"" .. name .. "\" is a " .. type(fun(name)) .. ", not a string") end return fun(name) or error(mw.getCurrentFrame():getTitle() .. " format: \"" .. name .. "\" not found in table") end)) end format_fun = export.format_fun --[==[ This function, unlike {string.format} and {mw.ustring.format}, takes just two parameters, a format string and a table, and replaces all instances of { {param_name} } in the format string with the table's entry for {param_name}. The opening and closing brace characters can be escaped with { {\op} } and { {\cl} }, respectively. A table entry beginning with a slash can be escaped by doubling the initial slash. ====Examples==== * {string_utilities.format("{foo} fish, {bar} fish, {baz} fish, {quux} fish", {["foo"]="one", ["bar"]="two", ["baz"]="red", ["quux"]="blue"}) } *: produces: {"one fish, two fish, red fish, blue fish"} * {string_utilities.format("The set {\\op}1, 2, 3{\\cl} contains {\\\\hello} elements.", {["\\hello"]="three"})} *: produces: {"The set {1, 2, 3} contains three elements."} *:* Note that the single and double backslashes should be entered as double and quadruple backslashes when quoted in a literal string. ]==] function export.format(str, tbl) return format_fun(str, function(key) return tbl[key] end) end do local function do_uclcfirst(str, case_func) -- Re-case the first letter. local first, remainder = match(str, "^(.[\128-\191]*)(.*)") return first and (case_func(first) .. remainder) or "" end local function uclcfirst(str, case_func) -- Strip off any HTML tags at the beginning. This currently does not handle comments or <ref>...</ref> -- correctly; it's intended for text wrapped in <span> or the like, as happens when passing text through -- [[Module:links]]. local html_at_beginning = nil if str:match("^<") then while true do local html_tag, rest = str:match("^(<.->)(.*)$") if not html_tag then break end if not html_at_beginning then html_at_beginning = {} end insert(html_at_beginning, html_tag) str = rest end end -- If there's a link at the beginning, re-case the first letter of the -- link text. This pattern matches both piped and unpiped links. -- If the link is not piped, the second capture (linktext) will be empty. local link, linktext, remainder = match(str, "^%[%[([^|%]]+)%|?(.-)%]%](.*)$") local retval if link then retval = "[[" .. link .. "|" .. do_uclcfirst(linktext ~= "" and linktext or link, case_func) .. "]]" .. remainder else retval = do_uclcfirst(str, case_func) end if html_at_beginning then retval = concat(html_at_beginning) .. retval end return retval end --[==[ Uppercase the first character of the input string, correctly handling one-part and two-part links, optionally surrounded by HTML tags such as `<nowiki><span>...</span></nowiki>`, possibly nested. Intended to correctly uppercase the first character of text that may include links that have been passed through `full_link()` in [[Module:links]] or a similar function. ]==] function export.ucfirst(str) return uclcfirst(str, uupper) end ucfirst = export.ucfirst --[==[ Lowercase the first character of the input string, correctly handling one-part and two-part links, optionally surrounded by HTML tags such as `<nowiki><span>...</span></nowiki>`, possibly nested. Intended to correctly lowercase the first character of text that may include links that have been passed through `full_link()` in [[Module:links]] or a similar function. ]==] function export.lcfirst(str) return uclcfirst(str, ulower) end --[==[Capitalizes each word of the input string. WARNING: May be broken in the presence of multiword links.]==] function export.capitalize(str) -- Capitalize multi-word that is separated by spaces -- by uppercasing the first letter of each part. return (ugsub(str, "%w+", ucfirst)) end local function do_title_case(first, remainder) first = uupper(first) return remainder == "" and first or (first .. ulower(remainder)) end --[==[ Capitalizes each word of the input string, with any further letters in each word being converted to lowercase. ]==] function export.title_case(str) return str == "" and "" or ugsub(str, "(%w)(%w*)", do_title_case) end title_case = export.title_case --[==[ Converts the input string to {{w|Camel case|CamelCase}}. Any non-word characters are treated as breaks between words. If `lower_first` is set, then the first character of the string will be lowercase (e.g. camelCase). ]==] function export.camel_case(str, lower_first) str = ugsub(str, "%W*(%w*)", title_case) return lower_first and do_uclcfirst(str, ulower) or str end end do local function do_snake_case(nonword, word) return nonword == "" and word or "_" .. word end --[==[ Converts the input string to {{w|Snake case|snake_case}}. Any non-word characters are treated as breaks between words. ]==] function export.snake_case(str) return (ugsub(str, "(%W*)(%w*)", do_snake_case)) end end return export ndjfpg4lokleft04xzto19wigx7fczh मॉड्यूल:scripts/charToScript 828 303644 487621 477432 2026-09-01T18:45:57Z SM7 6218 updating... 487621 Scribunto text/plain local subexport = {} local require_when_needed = require("Module:require when needed") local cp = require_when_needed("Module:string utilities", "codepoint") local floor = math.floor local get_plaintext = require_when_needed("Module:utilities", "get_plaintext") local get_script = require_when_needed("Module:scripts", "getByCode") local insert = table.insert local ipairs = ipairs local min = math.min local pairs = pairs local setmetatable = setmetatable local sort = table.sort local split = require_when_needed("Module:string utilities", "split") local table_len = require_when_needed("Module:table", "length") local type = type -- Copied from [[Module:Unicode data]]. local function binaryRangeSearch(codepoint, ranges) local low, mid, high low, high = 1, ranges.length or table_len(ranges) while low <= high do mid = floor((low + high) / 2) local range = ranges[mid] if codepoint < range[1] then high = mid - 1 elseif codepoint <= range[2] then return range, mid else low = mid + 1 end end return nil, mid end -- Copied from [[Module:Unicode data]]. local function linearRangeSearch(codepoint, ranges) for i, range in ipairs(ranges) do if codepoint < range[1] then break elseif codepoint <= range[2] then return range end end end local function compareRanges(range1, range2) return range1[1] < range2[1] end -- Save previously used codepoint ranges in case another character is in the -- same range. local rangesCache = {} --[=[ Takes a codepoint or a character and finds the script code(s) (if any) that are appropriate for it based on the codepoint, using the data module [[Module:scripts/recognition data]]. The data module was generated from the patterns in [[Module:scripts/data]] using [[Module:User:Erutuon/script recognition]]. By default, it returns only the first script code if there are multiple matches (i.e. the code we take to be the default). If `all_scripts` is set, then a table of all matching codes is returned. ]=] local charToScriptData function subexport.charToScript(char, all_scripts) charToScriptData = charToScriptData or mw.loadData("Module:scripts/recognition data") local t = type(char) local codepoint if t == "string" then local etc codepoint, etc = cp(char, 1, 2) if etc then error("bad argument #1 to 'charToScript' (expected a single character)") end elseif t == "number" then codepoint = char else error(("bad argument #1 to 'charToScript' (expected string or a number, got %s)") :format(t)) end local ret = {} local individualMatch = charToScriptData.individual[codepoint] if individualMatch then ret = split(individualMatch, "%s*,%s*", true) else local range if rangesCache[1] then range = linearRangeSearch(codepoint, rangesCache) if range then for i, script in ipairs(range) do if i > 2 then insert(ret, script) if not all_scripts then break end end end end end if not ret[1] then local index = floor(codepoint / 0x1000) range = linearRangeSearch(index, charToScriptData.blocks) if not range and charToScriptData[index] then range = binaryRangeSearch(codepoint, charToScriptData[index]) if range then insert(rangesCache, range) sort(rangesCache, compareRanges) end end if range then for i, script in ipairs(range) do if i > 2 then insert(ret, script) if not all_scripts then break end end end end end end if not ret[1] then insert(ret, "None") end if all_scripts then return ret else return ret[1] end end --[=[ Finds the best script for a string in a language-agnostic way. Converts each character to a codepoint. Iterates the counter for the script code if the codepoint is in the list of individual characters, or if it is in one of the defined ranges in the 4096-character block that it belongs to. Each script has a two-part counter, for primary and secondary matches. Primary matches are when the script is the first one listed; otherwise, it's a secondary match. When comparing scripts, first the total of both are compared (i.e. the overall number of matches). If these are the same, the number of primary and then secondary matches are used as tiebreakers. For example, this is used to ensure that `Grek` takes priority over `Polyt` if no characters which exclusively match `Polyt` are found, as `Grek` is a subset of `Polyt`. If `none_is_last_resort_only` is specified, this will never return None if any characters in `text` belong to a script. Otherwise, it will return None if there are more characters that don't belong to a script than belong to any individual script. (FIXME: This behavior is probably wrong, and `none_is_last_resort_only` should probably become the default.) ]=] function subexport.findBestScriptWithoutLang(text, none_is_last_resort_only) -- `scripts` contains counters for any scripts detected so far. Jpan and Kore are handled as special-cases, as they are combinations of other scripts. local scripts_mt = {Jpan = true, Kore = true} local weights_mt = { __lt = function(a, b) if a[1] + a[2] ~= b[1] + b[2] then return a[1] + a[2] < b[1] + b[2] elseif a[1] ~= b[1] then return a[1] < b[1] elseif a[2] ~= b[2] then return a[2] < b[2] else return false end end } scripts_mt.__index = function(t, k) local ret = {} if k == "Jpan" and scripts_mt.Jpan then for i = 1, 2 do ret[i] = t["Hani"][i] + t["Hira"][i] + t["Kana"][i] end elseif k == "Kore" and scripts_mt.Kore then for i = 1, 2 do ret[i] = t["Hani"][i] + t["Hang"][i] end else for i = 1, 2 do insert(ret, 0) end end return setmetatable(ret, weights_mt) end local scripts = setmetatable({}, scripts_mt) text = get_plaintext(text) local combined_scripts = { Jpan = {["Hani"] = true, ["Hira"] = true, ["Kana"] = true}, Kore = {["Hani"] = true, ["Hang"] = true} } for character in text:gmatch(".[\128-\191]*") do for i, script in ipairs(subexport.charToScript(character, true)) do if not none_is_last_resort_only or script ~= "None" then scripts[script] = scripts[script] local weight = min(i, 2) scripts[script][weight] = scripts[script][weight] + 1 end end end -- Check the combined script counts. If a single constituent has the same count (i.e. it's the only one), discard the combined script. for combined_script, set in pairs(combined_scripts) do for script in pairs(set) do scripts[combined_script] = scripts[combined_script] if (scripts[script][1] + scripts[script][2]) == (scripts[combined_script][1] + scripts[combined_script][2]) then scripts[combined_script] = nil break end end end local bestScript local greatestCount for script, count in pairs(scripts) do if (not greatestCount) or greatestCount < count then bestScript = script greatestCount = count end end bestScript = bestScript or "None" return get_script(bestScript) end return subexport cs19bg8d41yuv7ovit6o3v0kd4ou9kq मॉड्यूल:debug/track 828 303645 487600 473727 2026-09-01T18:03:10Z SM7 6218 updating... 487600 Scribunto text/plain -- TODO 1: normalize keys with leading spaces, which don't get removed when -- "Tracking/" is prefixed. -- TODO 2: avoid weird inputs like "", which don't register as invalid since -- "Tracking/" is a valid page title. -- TODO 3: use varargs instead of a table input, then recurse with track(). local title_make_title_module = "Module:title/makeTitle" -- Transclusion-based tracking as subpages of [[Wiktionary:Tracking]]. -- Tracked pages can be found at [[Special:WhatLinksHere/Wiktionary:Tracking/KEY]]. local error = error local find = string.find local log = mw.log local sub = string.sub local type = type local invalid_tracking_key_key = "debug/track/invalid key" local function make_title(...) make_title = require(title_make_title_module) return make_title(...) end local memo local function track(key) if not memo then memo = {} -- Return if memoized. elseif memo[key] then return end -- Throw an error if `key` isn't a string. local key_type = type(key) if key_type ~= "string" then error("Tracking keys supplied to [[Module:debug/track]] must be strings; received " .. key_type .. ".", 3) end -- make_title returns nil for invalid titles, but "#" is treated as a -- fragment separator (e.g. "foo#bar" generates the title "foo"), so it -- needs to be manually excluded. local title = not find(key, "#", nil, true) and make_title(4, "Tracking/" .. key) if not title then -- Track uses of invalid keys. Instead of recursing, simply memoize the -- invalid key and replace it with the 'invalid tracking key' key. -- [[Special:WhatLinksHere/Wiktionary:Tracking/debug/track/invalid key]] log("Invalid tracking key: " .. key) memo[key] = true key = invalid_tracking_key_key if memo[key] then return end title = make_title(4, "Tracking/" .. key) end -- Normalize the key by treating it as a subpage of "Tracking", which gives -- the normalized title without the initial "Tracking/". If the normalized -- form has been memoized, don't transclude the page again. Otherwise, -- transclude the page using the `content` key on the title, which is the -- cheapest way to trigger transclusion, as it avoids any parser expansion -- of the target page. local normalized = sub(title.text, 10) -- excludes "Tracking/" if not memo[normalized] then title = title.content memo[normalized] = true end -- Memoize the original key. memo[key] = true end return function(input) if input == nil then error("No tracking key supplied to [[Module:debug/track]].", 2) elseif type(input) ~= "table" then track(input) return true end local key = input[1] if key == nil then error("No tracking keys in table supplied to [[Module:debug/track]].", 2) end local i = 1 repeat track(key) i = i + 1 key = input[i] until key == nil return true end p6sdr83482xvakdb92gtqfoyor6nnlb मॉड्यूल:scripts/recognition data 828 303647 487622 477433 2026-09-01T18:47:00Z SM7 6218 updating... 487622 Scribunto text/plain local data = { [0x00] = { { 0x00041, 0x0005A, "Latn"}, { 0x00061, 0x0007A, "Latn"}, { 0x000C0, 0x000D6, "Latn"}, { 0x000D8, 0x000F6, "Latn"}, { 0x000F8, 0x0024F, "Latn"}, { 0x00370, 0x003E1, "Grek", "Polyt" }, { 0x003E2, 0x003EF, "Copt" }, { 0x003F0, 0x003FF, "Grek", "Polyt" }, { 0x00400, 0x0045F, "Cyrl" }, { 0x00460, 0x00469, "Cyrs" }, { 0x0046A, 0x0046D, "Cyrl" }, { 0x0046E, 0x00471, "Cyrs" }, { 0x00472, 0x00475, "Cyrl" }, { 0x00476, 0x00489, "Cyrs" }, { 0x0048A, 0x00527, "Cyrl" }, { 0x00531, 0x0058F, "Armn" }, { 0x00590, 0x005FF, "Hebr" }, { 0x00600, 0x006FF, "Arab" }, { 0x00700, 0x0074F, "Syrc" }, { 0x00750, 0x0077F, "Arab" }, { 0x00780, 0x007B1, "Thaa" }, { 0x007C0, 0x007FF, "Nkoo" }, { 0x00800, 0x0083E, "Samr" }, { 0x00840, 0x0085E, "Mand" }, { 0x00860, 0x0086A, "Syrc" }, { 0x008A0, 0x008FF, "Arab" }, { 0x00900, 0x0097F, "Deva" }, { 0x00980, 0x00983, "Beng" }, { 0x00985, 0x0098C, "Beng" }, { 0x00993, 0x009A8, "Beng" }, { 0x009AA, 0x009B0, "Beng" }, { 0x009B6, 0x009B9, "Beng" }, { 0x009BC, 0x009C4, "Beng" }, { 0x009CB, 0x009CE, "Beng" }, { 0x009E0, 0x009E3, "Beng" }, { 0x009E6, 0x009EF, "Beng" }, { 0x009F0, 0x009F1, "as-Beng" }, { 0x00A01, 0x00A76, "Guru" }, { 0x00A81, 0x00AF1, "Gujr" }, { 0x00B01, 0x00B77, "Orya" }, { 0x00B82, 0x00BFA, "Taml" }, { 0x00C00, 0x00C7F, "Telu" }, { 0x00C80, 0x00CF2, "Knda" }, { 0x00D02, 0x00D7F, "Mlym" }, { 0x00D82, 0x00DF4, "Sinh" }, { 0x00E01, 0x00E5B, "Thai" }, { 0x00E81, 0x00EDF, "Laoo" }, { 0x00F00, 0x00FDA, "Tibt" }, }, [0x01] = { { 0x01000, 0x0109F, "Mymr" }, { 0x010A0, 0x010CD, "Geok" }, { 0x010D0, 0x010FF, "Geor" }, { 0x01100, 0x011FF, "Hang" }, { 0x01200, 0x01399, "Ethi" }, { 0x013A0, 0x013F4, "Cher" }, { 0x01400, 0x0167F, "Cans" }, { 0x01680, 0x0169C, "Ogam" }, { 0x016A0, 0x016F0, "Runr" }, { 0x01700, 0x01714, "Tglg" }, { 0x01720, 0x01734, "Hano" }, { 0x01740, 0x01753, "Buhd" }, { 0x01760, 0x01773, "Tagb" }, { 0x01780, 0x017F9, "Khmr" }, { 0x01800, 0x018AA, "Mong" }, { 0x01900, 0x0194F, "Limb" }, { 0x01950, 0x01974, "Tale" }, { 0x01980, 0x019DF, "Talu" }, { 0x019E0, 0x019FF, "Khmr" }, { 0x01A00, 0x01A1F, "Bugi" }, { 0x01A20, 0x01AAD, "Lana" }, { 0x01B00, 0x01B7C, "Bali" }, { 0x01B80, 0x01BBF, "Sund" }, { 0x01BC0, 0x01BFF, "Batk" }, { 0x01C00, 0x01C4F, "Lepc" }, { 0x01C50, 0x01C7F, "Olck" }, { 0x01C90, 0x01CBF, "Geor" }, { 0x01E00, 0x01EFF, "Latn" }, { 0x01F00, 0x01FFE, "Polyt" }, }, [0x02] = { { 0x02190, 0x021FF, "Zsym" }, { 0x02200, 0x022FF, "Zmth" }, { 0x02300, 0x023FF, "Zsym" }, { 0x02500, 0x027BF, "Zsym" }, { 0x027C0, 0x027EF, "Zmth" }, { 0x02800, 0x028FF, "Brai" }, { 0x02980, 0x02AFF, "Zmth" }, { 0x02B00, 0x02BFE, "Zsym" }, { 0x02C00, 0x02C5E, "Glag" }, { 0x02C60, 0x02C7F, "Latn" }, { 0x02C80, 0x02CFF, "Copt" }, { 0x02D00, 0x02D2D, "Geok" }, { 0x02D30, 0x02D7F, "Tfng" }, { 0x02D80, 0x02DDE, "Ethi" }, { 0x02E80, 0x02FDF, "Hani" }, }, [0x03] = { { 0x03001, 0x03002, "Hani", "Bopo", "Hang", "Hira", "Kana", "Yiii" }, { 0x03003, 0x03007, "Hani" }, { 0x03008, 0x03011, "Hani", "Bopo", "Hang", "Hira", "Kana", "Yiii" }, { 0x03012, 0x03013, "Hani" }, { 0x03014, 0x0301B, "Hani", "Bopo", "Hang", "Hira", "Kana", "Yiii" }, { 0x0301C, 0x0301F, "Hani", "Bopo", "Hang", "Hira", "Kana" }, { 0x03020, 0x0303F, "Hani" }, { 0x03041, 0x0309F, "Hira" }, { 0x030A0, 0x030FF, "Kana" }, { 0x03105, 0x0312F, "Bopo" }, { 0x03131, 0x0318E, "Hang" }, { 0x031A0, 0x031BA, "Bopo" }, { 0x031C0, 0x031E3, "Hani" }, { 0x031F0, 0x031FF, "Kana" }, { 0x03220, 0x03247, "Hani" }, { 0x03280, 0x032B0, "Hani" }, { 0x032C0, 0x032CB, "Hani" }, { 0x03300, 0x03357, "Kana" }, { 0x03358, 0x03370, "Hani" }, { 0x0337B, 0x0337F, "Hani" }, { 0x033E0, 0x033FE, "Hani" }, { 0x03400, 0x03FFF, "Hani" }, }, [0x04] = { { 0x04000, 0x04DB5, "Hani" }, { 0x04E00, 0x04FFF, "Hani" }, }, [0x05] = { { 0x05000, 0x05FFF, "Hani" }, }, [0x06] = { { 0x06000, 0x06FFF, "Hani" }, }, [0x07] = { { 0x07000, 0x07FFF, "Hani" }, }, [0x08] = { { 0x08000, 0x08FFF, "Hani" }, }, [0x09] = { { 0x09000, 0x09FFF, "Hani" }, }, [0x0A] = { { 0x0A000, 0x0A4C6, "Yiii" }, { 0x0A4D0, 0x0A4FF, "Lisu" }, { 0x0A500, 0x0A62B, "Vaii" }, { 0x0A640, 0x0A67F, "Cyrs" }, { 0x0A680, 0x0A697, "Cyrl" }, { 0x0A6A0, 0x0A6F7, "Bamu" }, { 0x0A720, 0x0A7FF, "Latn" }, { 0x0A800, 0x0A82B, "Sylo" }, { 0x0A830, 0x0A832, "Deva", "Dogr", "Gujr", "Guru", "Khoj", "Knda", "Kthi", "Mahj", "Modi", "Nand", "Sind", "Takr", "Tirh"}, { 0x0A833, 0x0A835, "Deva", "Dogr", "Gujr", "Guru", "Khoj", "Knda", "Kthi", "Mahj", "Mlym", "Modi", "Nand", "Sind", "Takr", "Tirh"}, { 0x0A836, 0x0A839, "Deva", "Dogr", "Gujr", "Guru", "Khoj", "Kthi", "Mahj", "Modi", "Sind", "Takr", "Tirh"}, { 0x0A840, 0x0A877, "Phag" }, { 0x0A880, 0x0A8D9, "Saur" }, { 0x0A8E0, 0x0A8FF, "Deva" }, { 0x0A900, 0x0A92F, "Kali" }, { 0x0A930, 0x0A95F, "Rjng" }, { 0x0A980, 0x0A9DF, "Java" }, { 0x0A9E0, 0x0A9FE, "Mymr" }, { 0x0AA00, 0x0AA5F, "Cham" }, { 0x0AA60, 0x0AA7F, "Mymr" }, { 0x0AA80, 0x0AADF, "Tavt" }, { 0x0AAE0, 0x0AAFF, "Mtei" }, { 0x0AB01, 0x0AB2E, "Ethi" }, { 0x0AB30, 0x0AB65, "Latn" }, { 0x0AB70, 0x0ABBF, "Cher" }, { 0x0ABC0, 0x0ABFF, "Mtei" }, { 0x0AC00, 0x0AFFF, "Hang" }, }, [0x0B] = { { 0x0B000, 0x0BFFF, "Hang" }, }, [0x0C] = { { 0x0C000, 0x0CFFF, "Hang" }, }, [0x0D] = { { 0x0D000, 0x0D7A3, "Hang" }, }, [0x0F] = { { 0x0FA27, 0x0FA29, "Hani" }, { 0x0FB13, 0x0FB17, "Armn" }, { 0x0FB1D, 0x0FB4F, "Hebr" }, { 0x0FB50, 0x0FDFD, "Arab" }, { 0x0FE45, 0x0FE46, "Hani", "Bopo", "Hang", "Hira", "Kana" }, { 0x0FE70, 0x0FEFC, "Arab" }, { 0x0FF61, 0x0FF65, "Hani", "Bopo", "Hang", "Hira", "Kana", "Yiii" }, }, [0x10] = { { 0x10000, 0x100FA, "Linb" }, { 0x10280, 0x1029C, "Lyci" }, { 0x102A0, 0x102D0, "Cari" }, { 0x102E1, 0x102FB, "Copt" }, { 0x10300, 0x10323, "Ital" }, { 0x10330, 0x1034A, "Goth" }, { 0x10350, 0x1037A, "Perm" }, { 0x10380, 0x1039F, "Ugar" }, { 0x103A0, 0x103D5, "Xpeo" }, { 0x10400, 0x1044F, "Dsrt" }, { 0x10450, 0x1047F, "Shaw" }, { 0x10480, 0x104A9, "Osma" }, { 0x104B0, 0x104FB, "Osge" }, { 0x10500, 0x10527, "Elba" }, { 0x10530, 0x10563, "Aghb" }, { 0x10600, 0x10767, "Lina" }, { 0x10800, 0x1083F, "Cprt" }, { 0x10840, 0x1085F, "Armi" }, { 0x10860, 0x1087F, "Palm" }, { 0x10880, 0x108AF, "Nbat" }, { 0x108E0, 0x108FF, "Hatr" }, { 0x10900, 0x1091F, "Phnx" }, { 0x10920, 0x1093F, "Lydi" }, { 0x10980, 0x1099F, "Mero" }, { 0x109A0, 0x109BF, "Merc" }, { 0x10A00, 0x10A58, "Khar" }, { 0x10A60, 0x10A7F, "Sarb" }, { 0x10A80, 0x10A9F, "Narb" }, { 0x10AC0, 0x10AF6, "Mani" }, { 0x10B00, 0x10B3F, "Avst" }, { 0x10B40, 0x10B5F, "Prti" }, { 0x10B60, 0x10B7F, "Phli" }, { 0x10B80, 0x10BAF, "Phlp" }, { 0x10C00, 0x10C48, "Orkh" }, { 0x10C80, 0x10CB2, "Hung" }, { 0x10D00, 0x10D39, "Rohg" }, { 0x10E60, 0x10E7E, "Rumin" }, { 0x10F00, 0x10F27, "Sogo" }, { 0x10F30, 0x10F59, "Sogd" }, { 0x10F70, 0x10FAF, "Ougr" }, { 0x10FE0, 0x10FFF, "Elym" }, }, [0x11] = { { 0x11000, 0x1107F, "Brah" }, { 0x11080, 0x110CD, "Kthi" }, { 0x110D0, 0x110F9, "Sora" }, { 0x11100, 0x11146, "Cakm" }, { 0x11150, 0x11176, "Mahj" }, { 0x11180, 0x111D9, "Shrd" }, { 0x11200, 0x1123D, "Khoj" }, { 0x11280, 0x112A9, "Mult" }, { 0x112B0, 0x112F9, "Sind" }, { 0x11301, 0x11374, "Gran" }, { 0x11400, 0x1145E, "Newa" }, { 0x11480, 0x114D9, "Tirh" }, { 0x11580, 0x115DD, "Sidd" }, { 0x11600, 0x11659, "Modi" }, { 0x11680, 0x116C9, "Takr" }, { 0x11700, 0x1173F, "Ahom" }, { 0x11800, 0x1183B, "Dogr" }, { 0x118A0, 0x118FF, "Wara" }, { 0x119A0, 0x119FF, "Nand" }, { 0x11A00, 0x11A47, "Zanb" }, { 0x11A50, 0x11AA2, "Soyo" }, { 0x11AC0, 0x11AF8, "Pauc" }, { 0x11C00, 0x11C6C, "Bhks" }, { 0x11C70, 0x11CB6, "Marc" }, { 0x11D00, 0x11D59, "Gonm" }, { 0x11D60, 0x11DA9, "Gong" }, { 0x11EE0, 0x11EF8, "Maka" }, }, [0x12] = { { 0x12000, 0x1236E, "Xsux" }, { 0x12400, 0x12473, "Xsux" }, { 0x12F90, 0x12FFF, "Cpmn" }, }, [0x13] = { { 0x13000, 0x1342E, "Egyp" }, }, [0x14] = { { 0x14400, 0x14646, "Hluw" }, }, [0x16] = { { 0x16800, 0x16A38, "Bamu" }, { 0x16A40, 0x16A6F, "Mroo" }, { 0x16AD0, 0x16AF5, "Bass" }, { 0x16B00, 0x16B8F, "Hmng" }, { 0x16E40, 0x16E9A, "Medf" }, { 0x16F00, 0x16F9F, "Plrd" }, }, [0x17] = { { 0x17000, 0x17FFF, "Tang" }, }, [0x18] = { { 0x18000, 0x18AF2, "Tang" }, }, [0x1B] = { { 0x1B001, 0x1B11E, "Hira" }, { 0x1B170, 0x1B2FB, "Nshu" }, { 0x1BC00, 0x1BC9F, "Dupl" }, }, [0x1C] = { { 0x1CF00, 0x1CFCF, "Zname" }, }, [0x1D] = { { 0x1D100, 0x1D1DD, "Music" }, { 0x1D2E0, 0x1D2F3, "Maya" }, { 0x1D400, 0x1D7FF, "Zmth" }, { 0x1D800, 0x1DAAF, "Sgnw" }, }, [0x1E] = { { 0x1E000, 0x1E02A, "Glag" }, { 0x1E800, 0x1E8D6, "Mend" }, { 0x1E900, 0x1E95F, "Adlm" }, }, [0x1F] = { { 0x1F000, 0x1F0F5, "Zsym" }, { 0x1F300, 0x1FA6D, "Zsym" }, }, [0x20] = { { 0x20000, 0x20FFF, "Hani" }, }, [0x21] = { { 0x21000, 0x21FFF, "Hani" }, }, [0x22] = { { 0x22000, 0x22FFF, "Hani" }, }, [0x23] = { { 0x23000, 0x23FFF, "Hani" }, }, [0x24] = { { 0x24000, 0x24FFF, "Hani" }, }, [0x25] = { { 0x25000, 0x25FFF, "Hani" }, }, [0x26] = { { 0x26000, 0x26FFF, "Hani" }, }, [0x27] = { { 0x27000, 0x27FFF, "Hani" }, }, [0x28] = { { 0x28000, 0x28FFF, "Hani" }, }, [0x29] = { { 0x29000, 0x29FFF, "Hani" }, }, [0x2A] = { { 0x2A000, 0x2AFFF, "Hani" }, }, [0x2B] = { { 0x2B000, 0x2BFFF, "Hani" }, }, [0x2C] = { { 0x2C000, 0x2CFFF, "Hani" }, }, [0x2D] = { { 0x2D000, 0x2DFFF, "Hani" }, }, [0x2E] = { { 0x2E000, 0x2EBE0, "Hani" }, }, [0x30] = { { 0x30000, 0x30FFF, "Hani" }, }, [0x31] = { { 0x31000, 0x31FFF, "Hani" }, }, [0x32] = { { 0x32000, 0x32FFF, "Hani" }, }, [0x33] = { { 0x33000, 0x33FFF, "Hani" }, }, } for _, v in next, data do v.length = #v end data.individual = { [0x00462] = "Cyrl", [0x00463] = "Cyrl", [0x0060C] = "Arab, Nkoo, Rohg, Syrc, Thaa, Yezi", [0x0061B] = "Arab, Nkoo, Rohg, Syrc, Thaa, Yezi", [0x0061F] = "Arab, Adlm, Nkoo, Rohg, Syrc, Thaa, Yezi", [0x00640] = "Arab, Adlm, Mand, Mani, Ougr, Phlp, Rohg, Sogd, Syrc", [0x00951] = "Deva, Beng, Gran, Gujr, Guru, Knda, Latn, Mlym, Orya, Shrd, Taml, Telu, Tirh", [0x00952] = "Deva, Beng, Gran, Gujr, Guru, Knda, Latn, Mlym, Orya, Taml, Telu, Tirh", [0x00964] = "Deva, Beng, Dogr, Gong, Gonm, Gran, Gujr, Guru, Knda, Mahj, Mlym, Nand, Orya, Sind, Sinh, Sylo, Takr, Taml, Telu, Tirh", [0x00965] = "Deva, Beng, Dogr, Gong, Gonm, Gran, Gujr, Guru, Knda, Limb, Mahj, Mlym, Nand, Orya, Sind, Sinh, Sylo, Takr, Taml, Telu, Tirh", [0x0098F] = "Beng", [0x00990] = "Beng", [0x009A1] = "Beng", [0x009A2] = "Beng", [0x009AF] = "Beng", [0x009B2] = "Beng", [0x009BC] = "Beng", [0x009C7] = "Beng", [0x009C8] = "Beng", [0x009D7] = "Beng", [0x01CDA] = "Deva, Knda, Mlym, Orya, Taml, Telu", [0x01CF2] = "Deva, Beng, Gran, Knda, Nand, Orya, Telu, Tirh", [0x02135] = "Zmth", [0x03000] = "Hani", [0x03003] = "Hani, Bopo, Hang, Hira, Kana", [0x03013] = "Hani, Bopo, Hang, Hira, Kana", [0x03030] = "Hani, Bopo, Hang, Hira, Kana", [0x03037] = "Hani, Bopo, Hang, Hira, Kana", [0x030FB] = "Kana, Hani, Bopo, Hang, Hira, Yiii", [0x032FF] = "Hani", [0x0FA0E] = "Hani", [0x0FA0F] = "Hani", [0x0FA11] = "Hani", [0x0FA13] = "Hani", [0x0FA14] = "Hani", [0x0FA1F] = "Hani", [0x0FA21] = "Hani", [0x0FA23] = "Hani", [0x0FA24] = "Hani", [0x1056F] = "Aghb", [0x16FE0] = "Tang", [0x16FE1] = "Nshu", [0x1B000] = "Kana", } data.blocks = { { 0x04, 0x09, "Hani" }, { 0x0B, 0x0D, "Hang" }, { 0x17, 0x18, "Tang" }, { 0x20, 0x2E, "Hani" }, } return data 4m69qs8gnq8knzros5qbkff3yz21cb5 मॉड्यूल:fun 828 303698 487599 477726 2026-09-01T18:02:19Z SM7 6218 updating... 487599 Scribunto text/plain local export = {} local debug_track_module = "Module:debug/track" local table_get_unprotected_metatable = "Module:table/getUnprotectedMetatable" local chain -- defined below local chain_iter -- defined below local format = string.format local gmatch = string.gmatch local ipairs = ipairs local is_callable -- defined below local pairs = pairs local pcall = pcall local rawget = rawget local require = require local select = select local tostring = tostring local type = type local unpack = unpack or table.unpack -- Lua 5.2 compatibility local unroll -- defined below local xpcall = xpcall local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local function get_unprotected_metatable(...) get_unprotected_metatable = require(table_get_unprotected_metatable) return get_unprotected_metatable(...) end local function _iterString(iter, i) i = i + 1 local char = iter() if char ~= nil then return i, char end end -- Iterate over UTF-8-encoded codepoints in string. local function iterString(str) return _iterString, gmatch(str, ".[\128-\191]*"), 0 end --[==[ Return {true} if the input is a function or functor (an object which can be called like a function, because it has a {__call} metamethod). Note: if the input is an object with a {__call} metamethod, but this function is not able to find it because the object's metatable is protected with {__metatable}, then it will return {false} by default, or {nil} if the {allow_maybe} flag is set.]==] function export.is_callable(f, allow_maybe) if type(f) == "function" then return true end -- An object is a functor if it has a `__call` metamethod. The only way to truly confirm this is by trying to call it, but that could be expensive or have side effects, so look for a `__call` metamethod instead. If the metatable is protected with `__metatable`, this may not be possible. local mt = get_unprotected_metatable(f) if mt == nil then return false -- `get_unprotected_metatable` returns false if the metatable is protected. elseif mt == false then debug_track("fun/is_callable/protected metatable") if allow_maybe then return nil end return false end -- `__call` metamethods have to be functions, so don't recurse to check it. local __call = rawget(mt, "__call") return __call and type(__call) == "function" or false end is_callable = export.is_callable --[==[ A version of {xpcall} which takes any arguments to be given to {f} as additional arguments after the error handler. This fixes a deficiency in the standard version of {xpcall}, which is not able to handle arguments to be given to {f}, and brings it in line with {pcall}.]==] function export.xpcall(f, err_handler, ...) -- If there are no arguments, just call xpcall() with `f`. if select("#", ...) == 0 then return xpcall(f, err_handler) end -- Any arguments have to be smuggled in via a table, as ... can't be an -- upvalue, and it's not possible to use pcall() to get aroud this, because -- xpcall() calls the error handler before the stack unwinds. local args = {...} return xpcall(function() return f(unpack(args)) end, err_handler) end do local function catch_values(f, success, ...) if success then return success, ... -- Error message will only take this exact form if `f` is not callable, -- because it will contain a traceback if it was thrown further up the -- stack. elseif (...) == format("attempt to call a %s value", type(f)) then return false end return error(...) end --[==[ A special form of {pcall()}, which returns {true} plus the result value(s) if {f} is callable, or {false} if it isn't. Errors that occur within the called function are not protected.]==] function export.try_call(f, ...) local callable = is_callable(f, true) if callable then return true, f(...) elseif callable == false then return false end -- If `callable` is nil, there's a protected metatable, so there's no way to check without doing a protected call. return catch_values(f, pcall(f, ...)) end end --[==[ Takes two or more functions as arguments, and returns a new function which calls each of the input functions in turn. Any arguments given to the returned function are given to the first function, and all other functions receive the output value(s) from the previous function.]==] function export.chain(func1, func2, ...) local function chained_func(...) return func2(func1(...)) end if select("#", ...) == 0 then return chained_func end return chain(chained_func, ...) end chain = export.chain --[==[ Takes the usual for-loop parameters (an iterator, plus an optional state and initial index), and unrolls the iterator by returning every (first) value returned by the iterator. For instance, {unroll(pairs(t))} will return every key in {t}, and {unroll(string.gmatch(s, "%w+"))} will return every word in {s}.]==] function export.unroll(iter, state, k) k = iter(state, k) if k ~= nil then return k, unroll(iter, state, k) end end unroll = export.unroll --[==[ Takes a generator function (i.e. a function that returns an iterator, such as {ipairs}) and one or more additional functions, and returns a new generator function. Any arguments given to the new generator (e.g. an input table) are given to the original generator, and the additional functions are called on each iteration. The first additional function takes the output from the original iterator (i.e. the function returned by the original generator), and any further functions receive the output value(s) from the previous function. This can be used to modify the values returned from an iterator.]==] function export.chainIter(gen, new_iter, ...) if select("#", ...) > 0 then new_iter = chain(new_iter, ...) end return function(...) local orig_iter, state, k = gen(...) -- k has to be the first value returned by orig_iter on the last iteration, not whatever new_iter returned. local function catch_values(...) k = ... if k ~= nil then return new_iter(...) end end return function() return catch_values(orig_iter(state, k)) end, state, k end end chain_iter = export.chainIter do local function catch_values(start, iter, state, k, ...) if start == k or k == nil then return k, ... end return catch_values(start, iter, state, iter(state, k)) end function export.iterateFrom(start, iter, state, k) local first = true return function(state, k) if first then first = false return catch_values(start, iter, state, iter(state, k)) end return iter(state, k) end, state, k end end -- map(function(number) return number ^ 2 end, -- { 1, 2, 3 }) --> { 1, 4, 9 } -- map(function (char) return string.char(string.byte(char) - 0x20) end, -- "abc") --> { "A", "B", "C" } function export.map(func, iterable, isArray) local array = {} for k, v in (type(iterable) == "string" and iterString or (isArray or iterable[1] ~= nil) and ipairs or pairs)(iterable) do array[k] = func(v, k, iterable) end return array end function export.mapIter(func, iter, state, init) -- init could be anything local array, i = {}, 0 for x, y in iter, state, init do i = i + 1 array[i] = func(y, x, state) end return array end do local function iter_tuples(tuples) local i = tuples.i if i > 1 then i = i - 1 tuples.i = i return unpack(tuples[i]) end end -- Takes an iterator function, and returns a new iterator that iterates in reverse, given the same arguments. -- Note: changes to the state during iteration are not taken into account, since all the return values are calculated in advance. function export.reverseIter(func) return function(...) -- Store all returned values as a list of tuples, then iterate in reverse over that list. local tuples, i, iter, state, val1 = {}, 0, func(...) while true do i = i + 1 local vals = {iter(state, val1)} -- Terminates if the first return value is nil, even if other values are non-nil. val1 = vals[1] if val1 == nil then tuples.i = i return iter_tuples, tuples end tuples[i] = vals end end end end function export.forEach(func, iterable, isArray) for k, v in (type(iterable) == "string" and iterString or (isArray or iterable[1] ~= nil) and ipairs or pairs)(iterable) do func(v, k, iterable) end return nil end ------------------------------------------------- -- From http://lua-users.org/wiki/CurriedLua -- reverse(...) : take some tuple and return a tuple of elements in reverse order -- -- e.g. "reverse(1,2,3)" returns 3,2,1 local function reverse(...) -- reverse args by building a function to do it, similar to the unpack() example local function reverseHelper(acc, v, ...) if select("#", ...) == 0 then return v, acc() else return reverseHelper(function() return v, acc() end, ...) end end -- initial acc is the end of the list return reverseHelper(function() return end, ...) end function export.curry(func, numArgs) -- currying 2-argument functions seems to be the most popular application numArgs = numArgs or 2 -- no sense currying for 1 arg or less if numArgs <= 1 then return func end -- helper takes an argTrace function, and number of arguments remaining to be applied local function curryHelper(argTrace, n) if n == 0 then -- kick off argTrace, reverse argument list, and call the original function return func(reverse(argTrace())) else -- "push" argument (by building a wrapper function) and decrement n return function(onearg) return curryHelper(function() return onearg, argTrace() end, n - 1) end end end -- push the terminal case of argTrace into the function first return curryHelper(function() return end, numArgs) end ------------------------------------------------- -- some(function(val) return val % 2 == 0 end, -- { 2, 3, 5, 7, 11 }) --> true function export.some(func, t, isArray) for k, v in ((isArray or t[1] ~= nil) and ipairs or pairs)(t) do if func(v, k, t) then return true end end return false end -- all(function(val) return val % 2 == 0 end, -- { 2, 4, 8, 10, 12 }) --> true function export.all(func, t, isArray) for k, v in ((isArray or t[1] ~= nil) and ipairs or pairs)(t) do if not func(v, k, t) then return false end end return true end function export.filter(func, t, isArray) local new_t = {} if isArray or t[1] ~= nil then -- array local new_i = 0 for i, v in ipairs(t) do if func(v, i, t) then new_i = new_i + 1 new_t[new_i] = v end end else for k, v in pairs(t) do if func(v, k, t) then new_t[k] = v -- or create array? end end end return new_t end function export.fold(func, t, accum) for i, v in ipairs(t) do accum = func(accum, v, i, t) end return accum end ------------------------------- -- Fancy stuff local function capture(...) local vals = {n = select("#", ...), ...} return function() return unpack(vals, 1, vals.n) end end -- Log input and output of function. -- Receives a function and returns a modified form of that function. function export.logReturnValues(func, prefix) return function(...) local inputValues = capture(...) local returnValues = capture(func(...)) if prefix then mw.log(prefix, inputValues()) mw.log(returnValues()) else mw.log(inputValues()) mw.log(returnValues()) end return returnValues() end end export.log = export.logReturnValues -- Convenience function to make all functions in a table log their input and output. function export.logAll(t) for k, v in pairs(t) do if is_callable(v) then t[k] = export.logReturnValues(v, tostring(k)) end end return t end return export mc1wbmetcrpjp1ihyth6j2ajabvak7y मॉड्यूल:ConvertNumeric 828 304100 487716 475415 2026-09-02T10:18:07Z SM7 6218 updating... 487716 Scribunto text/plain local export = {} -- functions that can be called from another module -- Module for converting between different representations of numbers. -- For unit tests see: [[Module:ConvertNumeric/testcases]] -- When editing, preview with: Module:ConvertNumeric/testcases/documentation export.ones_position = { [0] = 'zero', [1] = 'one', [2] = 'two', [3] = 'three', [4] = 'four', [5] = 'five', [6] = 'six', [7] = 'seven', [8] = 'eight', [9] = 'nine', [10] = 'ten', [11] = 'eleven', [12] = 'twelve', [13] = 'thirteen', [14] = 'fourteen', [15] = 'fifteen', [16] = 'sixteen', [17] = 'seventeen', [18] = 'eighteen', [19] = 'nineteen' } export.ones_position_ord = { [0] = 'zeroth', [1] = 'first', [2] = 'second', [3] = 'third', [4] = 'fourth', [5] = 'fifth', [6] = 'sixth', [7] = 'seventh', [8] = 'eighth', [9] = 'ninth', [10] = 'tenth', [11] = 'eleventh', [12] = 'twelfth', [13] = 'thirteenth', [14] = 'fourteenth', [15] = 'fifteenth', [16] = 'sixteenth', [17] = 'seventeenth', [18] = 'eighteenth', [19] = 'nineteenth' } export.ones_position_plural = { [0] = 'zeros', [1] = 'ones', [2] = 'twos', [3] = 'threes', [4] = 'fours', [5] = 'fives', [6] = 'sixes', [7] = 'sevens', [8] = 'eights', [9] = 'nines', [10] = 'tens', [11] = 'elevens', [12] = 'twelves', [13] = 'thirteens', [14] = 'fourteens', [15] = 'fifteens', [16] = 'sixteens', [17] = 'seventeens', [18] = 'eighteens', [19] = 'nineteens' } export.tens_position = { [2] = 'twenty', [3] = 'thirty', [4] = 'forty', [5] = 'fifty', [6] = 'sixty', [7] = 'seventy', [8] = 'eighty', [9] = 'ninety' } export.tens_position_ord = { [2] = 'twentieth', [3] = 'thirtieth', [4] = 'fortieth', [5] = 'fiftieth', [6] = 'sixtieth', [7] = 'seventieth', [8] = 'eightieth', [9] = 'ninetieth' } export.tens_position_plural = { [2] = 'twenties', [3] = 'thirties', [4] = 'forties', [5] = 'fifties', [6] = 'sixties', [7] = 'seventies', [8] = 'eighties', [9] = 'nineties' } export.groups = { [1] = 'thousand', [2] = 'million', [3] = 'billion', [4] = 'trillion', [5] = 'quadrillion', [6] = 'quintillion', [7] = 'sextillion', [8] = 'septillion', [9] = 'octillion', [10] = 'nonillion', [11] = 'decillion', [12] = 'undecillion', [13] = 'duodecillion', [14] = 'tredecillion', [15] = 'quattuordecillion', [16] = 'quindecillion', [17] = 'sexdecillion', [18] = 'septendecillion', [19] = 'octodecillion', [20] = 'novemdecillion', [21] = 'vigintillion', [22] = 'unvigintillion', [23] = 'duovigintillion', [24] = 'tresvigintillion', [25] = 'quattuorvigintillion', [26] = 'quinquavigintillion', [27] = 'sesvigintillion', [28] = 'septemvigintillion', [29] = 'octovigintillion', [30] = 'novemvigintillion', [31] = 'trigintillion', [32] = 'untrigintillion', [33] = 'duotrigintillion', [34] = 'trestrigintillion', [35] = 'quattuortrigintillion', [36] = 'quinquatrigintillion', [37] = 'sestrigintillion', [38] = 'septentrigintillion', [39] = 'octotrigintillion', [40] = 'noventrigintillion', [41] = 'quadragintillion', [51] = 'quinquagintillion', [61] = 'sexagintillion', [71] = 'septuagintillion', [81] = 'octogintillion', [91] = 'nonagintillion', [101] = 'centillion', [102] = 'uncentillion', [103] = 'duocentillion', [104] = 'trescentillion', [111] = 'decicentillion', [112] = 'undecicentillion', [121] = 'viginticentillion', [122] = 'unviginticentillion', [131] = 'trigintacentillion', [141] = 'quadragintacentillion', [151] = 'quinquagintacentillion', [161] = 'sexagintacentillion', [171] = 'septuagintacentillion', [181] = 'octogintacentillion', [191] = 'nonagintacentillion', [201] = 'ducentillion', [301] = 'trecentillion', [401] = 'quadringentillion', [501] = 'quingentillion', [601] = 'sescentillion', [701] = 'septingentillion', [801] = 'octingentillion', [901] = 'nongentillion', [1001] = 'millinillion', } export.roman_numerals = { I = 1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000 } -- Converts a given valid roman numeral (and some invalid roman numerals) to a number. Returns -1, errorstring on error function export.roman_to_numeral(roman) if type(roman) ~= "string" then return -1, "roman numeral not a string" end local rev = roman:reverse() local raising = true local last = 0 local result = 0 for i = 1, #rev do local c = rev:sub(i, i) local next = export.roman_numerals[c] if next == nil then return -1, "roman numeral contains illegal character " .. c end if next > last then result = result + next raising = true elseif next < last then result = result - next raising = false elseif raising then result = result + next else result = result - next end last = next end return result end -- Converts a given integer between 0 and 100 to English text (e.g. 47 -> forty-seven) local function numeral_to_english_less_100(num, ordinal, plural, zero) local terminal_ones, terminal_tens if ordinal then terminal_ones = export.ones_position_ord terminal_tens = export.tens_position_ord elseif plural then terminal_ones = export.ones_position_plural terminal_tens = export.tens_position_plural else terminal_ones = export.ones_position terminal_tens = export.tens_position end if num == 0 and zero ~= nil then return zero elseif num < 20 then return terminal_ones[num] elseif num % 10 == 0 then return terminal_tens[num / 10] else return export.tens_position[math.floor(num / 10)] .. '-' .. terminal_ones[num % 10] end end local function standard_suffix(ordinal, plural) if ordinal then return 'th' end if plural then return 's' end return '' end -- Converts a given integer (in string form) between 0 and 1000 to English text (e.g. 47 -> forty-seven) local function numeral_to_english_less_1000(num, use_and, ordinal, plural, zero) num = tonumber(num) if num < 100 then return numeral_to_english_less_100(num, ordinal, plural, zero) elseif num % 100 == 0 then return export.ones_position[num/100] .. ' hundred' .. standard_suffix(ordinal, plural) else return export.ones_position[math.floor(num/100)] .. ' hundred ' .. (use_and and 'and ' or '') .. numeral_to_english_less_100(num % 100, ordinal, plural, zero) end end -- Converts a number expressed as a string in scientific notation to a string in standard decimal notation -- e.g. 1.23E5 -> 123000, 1.23E-5 = .0000123. Conversion is exact, no rounding is performed. local function scientific_notation_to_decimal(num) local exponent, subs = num:gsub("^%-?%d*%.?%d*%-?[Ee]([+%-]?%d+)$", "%1") if subs == 0 then return num end -- Input not in scientific notation, just return unmodified exponent = tonumber(exponent) local negative = num:find("^%-") local _, decimal_pos = num:find("%.") -- Mantissa will consist of all decimal digits with no decimal point local mantissa = num:gsub("^%-?(%d*)%.?(%d*)%-?[Ee][+%-]?%d+$", "%1%2") if negative and decimal_pos then decimal_pos = decimal_pos - 1 end if not decimal_pos then decimal_pos = #mantissa + 1 end -- Remove leading zeros unless decimal point is in first position while decimal_pos > 1 and mantissa:sub(1,1) == '0' do mantissa = mantissa:sub(2) decimal_pos = decimal_pos - 1 end -- Shift decimal point right for exponent > 0 while exponent > 0 do decimal_pos = decimal_pos + 1 exponent = exponent - 1 if decimal_pos > #mantissa + 1 then mantissa = mantissa .. '0' end -- Remove leading zeros unless decimal point is in first position while decimal_pos > 1 and mantissa:sub(1,1) == '0' do mantissa = mantissa:sub(2) decimal_pos = decimal_pos - 1 end end -- Shift decimal point left for exponent < 0 while exponent < 0 do if decimal_pos == 1 then mantissa = '0' .. mantissa else decimal_pos = decimal_pos - 1 end exponent = exponent + 1 end -- Insert decimal point in correct position and return return (negative and '-' or '') .. mantissa:sub(1, decimal_pos - 1) .. '.' .. mantissa:sub(decimal_pos) end -- Rounds a number to the nearest integer (NOT USED) local function round_num(x) if x%1 >= 0.5 then return math.ceil(x) else return math.floor(x) end end -- Rounds a number to the nearest two-word number (round = up, down, or "on" for round to nearest) -- Numbers with two digits before the decimal will be rounded to an integer as specified by round. -- Larger numbers will be rounded to a number with only one nonzero digit in front and all other digits zero. -- Negative sign is preserved and does not count towards word limit. local function round_for_english(num, round) -- If an integer with at most two digits, just return if num:find("^%-?%d?%d%.?$") then return num end local negative = num:find("^%-") if negative then -- We're rounding magnitude so flip it if round == 'up' then round = 'down' elseif round == 'down' then round = 'up' end end -- If at most two digits before decimal, round to integer and return local _, _, small_int, trailing_digits, round_digit = num:find("^%-?(%d?%d?)%.((%d)%d*)$") if small_int then if small_int == '' then small_int = '0' end if (round == 'up' and trailing_digits:find('[1-9]')) or (round == 'on' and tonumber(round_digit) >= 5) then small_int = tostring(tonumber(small_int) + 1) end return (negative and '-' or '') .. small_int end -- When rounding up, any number with > 1 nonzero digit will round up (e.g. 1000000.001 rounds up to 2000000) local nonzero_digits = 0 for digit in num:gmatch("[1-9]") do nonzero_digits = nonzero_digits + 1 end num = num:gsub("%.%d*$", "") -- Remove decimal part -- Second digit used to determine which way to round lead digit local _, _, lead_digit, round_digit, round_digit_2, rest = num:find("^%-?(%d)(%d)(%d)(%d*)$") if tonumber(lead_digit .. round_digit) < 20 and (1 + #rest) % 3 == 0 then -- In English numbers < 20 are one word so put 2 digits in lead and round based on 3rd lead_digit = lead_digit .. round_digit round_digit = round_digit_2 else rest = round_digit_2 .. rest end if (round == 'up' and nonzero_digits > 1) or (round == 'on' and tonumber(round_digit) >= 5) then lead_digit = tostring(tonumber(lead_digit) + 1) end -- All digits but lead digit will turn to zero rest = rest:gsub("%d", "0") return (negative and '-' or '') .. lead_digit .. '0' .. rest end local denominators = { [2] = { 'half', plural = 'halves' }, [3] = { 'third' }, [4] = { 'quarter', us = 'fourth' }, [5] = { 'fifth' }, [6] = { 'sixth' }, [8] = { 'eighth' }, [9] = { 'ninth' }, [10] = { 'tenth' }, [16] = { 'sixteenth' }, } -- Return status, fraction where: -- status is a string: -- "finished" if there is a fraction with no whole number; -- "ok" if fraction is empty or valid; -- "unsupported" if bad fraction; -- fraction is a string giving (numerator / denominator) as English text, or is "". -- Only unsigned fractions with a very limited range of values are supported, -- except that if whole is empty, the numerator can use "-" to indicate negative. -- whole (string or nil): nil or "" if no number before the fraction -- numerator (string or nil): numerator, if any (default = 1 if a denominator is given) -- denominator (string or nil): denominator, if any -- sp_us (boolean): true if sp=us -- negative_word (string): word to use for negative sign, if whole is empty -- use_one (boolean): false: 2+1/2 → "two and a half"; true: "two and one-half" local function fraction_to_english(whole, numerator, denominator, sp_us, negative_word, use_one) if numerator or denominator then local finished = (whole == nil or whole == '') local sign = '' if numerator then if finished and numerator:sub(1, 1) == '-' then numerator = numerator:sub(2) sign = negative_word .. ' ' end else numerator = '1' end if not numerator:match('^%d+$') or not denominator or not denominator:match('^%d+$') then return 'unsupported', '' end numerator = tonumber(numerator) denominator = tonumber(denominator) local dendata = denominators[denominator] if not (dendata and 1 <= numerator and numerator <= 99) then return 'unsupported', '' end local numstr, denstr local sep = '-' if numerator == 1 then denstr = sp_us and dendata.us or dendata[1] if finished or use_one then numstr = 'one' elseif denstr:match('^[aeiou]') then numstr = 'an' sep = ' ' else numstr = 'a' sep = ' ' end else numstr = numeral_to_english_less_100(numerator) denstr = dendata.plural if not denstr then denstr = (sp_us and dendata.us or dendata[1]) .. 's' end end if finished then return 'finished', sign .. numstr .. sep .. denstr end return 'ok', ' and ' .. numstr .. sep .. denstr end return 'ok', '' end -- Takes a decimal number and converts it to English text. -- Return nil if a fraction cannot be converted (only some numbers are supported for fractions). -- num (string or nil): the number to convert. -- Can be an arbitrarily large decimal, such as "-123456789123456789.345", and -- can use scientific notation (e.g. "1.23E5"). -- May fail for very large numbers not listed in "groups" such as "1E4000". -- num is nil if there is no whole number before a fraction. -- numerator (string or nil): numerator of fraction (nil if no fraction) -- denominator (string or nil): denominator of fraction (nil if no fraction) -- capitalize (boolean): whether to capitalize the result (e.g. 'One' instead of 'one') -- use_and (boolean): whether to use the word 'and' between tens/ones place and higher places -- hyphenate (boolean): whether to hyphenate all words in the result, useful for use as an adjective -- ordinal (boolean): whether to produce an ordinal (e.g. 'first' instead of 'one') -- plural (boolean): whether to pluralize the resulting number -- links: nil: do not add any links; 'on': link "billion" and larger to Orders of magnitude article; -- any other text: list of numbers to link (e.g. "billion,quadrillion") -- negative_word: word to use for negative sign (typically 'negative' or 'minus'; nil to use default) -- round: nil or '': no rounding; 'on': round to nearest two-word number; 'up'/'down': round up/down to two-word number -- zero: word to use for value '0' (nil to use default) -- use_one (boolean): false: 2+1/2 → "two and a half"; true: "two and one-half" function export.spell_number(num, numerator, denominator, capitalize, use_and, hyphenate, ordinal, plural, links, negative_word, round, zero, use_one) if type(num) == "number" then num = tostring(num) end if not negative_word then if use_and then -- TODO Should 'minus' be used when do not have sp=us? -- If so, need to update testcases, and need to fix "minus zero". -- negative_word = 'minus' negative_word = 'negative' else negative_word = 'negative' end end local status, fraction_text = fraction_to_english(num, numerator, denominator, not use_and, negative_word, use_one) if status == 'unsupported' then return nil end if status == 'finished' then -- Input is a fraction with no whole number. -- Hack to avoid executing stuff that depends on num being a number. local s = fraction_text if hyphenate then s = s:gsub("%s", "-") end if capitalize then s = s:gsub("^%l", string.upper) end return s end num = scientific_notation_to_decimal(num) if round and round ~= '' then if round ~= 'on' and round ~= 'up' and round ~= 'down' then error("Invalid rounding mode") end num = round_for_english(num, round) end -- Separate into negative sign, num (digits before decimal), decimal_places (digits after decimal) local MINUS = '−' -- Unicode U+2212 MINUS SIGN (may be in values from [[Module:Convert]]) if num:sub(1, #MINUS) == MINUS then num = '-' .. num:sub(#MINUS + 1) -- replace MINUS with '-' elseif num:sub(1, 1) == '+' then num = num:sub(2) -- ignore any '+' end local negative = num:find("^%-") local decimal_places, subs = num:gsub("^%-?%d*%.(%d+)$", "%1") if subs == 0 then decimal_places = nil end num, subs = num:gsub("^%-?(%d*)%.?%d*$", "%1") if num == '' and decimal_places then num = '0' end if subs == 0 or num == '' then error("Invalid decimal numeral") end -- For each group of 3 digits except the last one, print with appropriate group name (e.g. million) local s = '' while #num > 3 do if s ~= '' then s = s .. ' ' end local group_num = math.floor((#num - 1) / 3) local group = export.groups[group_num] local group_digits = #num - group_num*3 s = s .. numeral_to_english_less_1000(num:sub(1, group_digits), false, false, false, zero) .. ' ' if links and (((links == 'on' and group_num >= 3) or links:find(group)) and group_num <= 13) then s = s .. '[[Orders_of_magnitude_(numbers)#10' .. group_num*3 .. '|' .. group .. ']]' else s = s .. group end num = num:sub(1 + group_digits) num = num:gsub("^0*", "") -- Trim leading zeros end -- Handle final three digits of integer part if s ~= '' and num ~= '' then if #num <= 2 and use_and then s = s .. ' and ' else s = s .. ' ' end end if s == '' or num ~= '' then s = s .. numeral_to_english_less_1000(num, use_and, ordinal, plural, zero) elseif ordinal or plural then -- Round numbers like "one million" take standard suffixes for ordinal/plural s = s .. standard_suffix(ordinal, plural) end -- For decimal places (if any) output "point" followed by spelling out digit by digit if decimal_places then s = s .. ' point' for i = 1, #decimal_places do s = s .. ' ' .. export.ones_position[tonumber(decimal_places:sub(i,i))] end end s = s:gsub("^%s*(.-)%s*$", "%1") -- Trim whitespace if ordinal and plural then s = s .. 's' end -- s suffix works for all ordinals if negative and s ~= zero then s = negative_word .. ' ' .. s end s = s:gsub("negative zero", "zero") s = s .. fraction_text if hyphenate then s = s:gsub("%s", "-") end if capitalize then s = s:gsub("^%l", string.upper) end return s end -- Template-callable equivalent of export.spell_number(). function export.numeral_to_english(frame) local args = frame.args local num = args[1] num = num:gsub("^%s*(.-)%s*$", "%1") -- Trim whitespace num = num:gsub(",", "") -- Remove commas num = num:gsub("^<span[^<>]*></span>", "") -- Generated by Template:age if num ~= '' then -- a fraction may have an empty whole number if not num:find("^%-?%d*%.?%d*%-?[Ee]?[+%-]?%d*$") then -- Input not in a valid format, try to pass it through #expr to see -- if that produces a number (e.g. "3 + 5" will become "8"). num = frame:preprocess('{{#expr: ' .. num .. '}}') end end -- Pass args from frame to helper function return export.spell_number( num, args['numerator'], args['denominator'], args['case'] == 'U' or args['case'] == 'u', args['sp'] ~= 'us', args['adj'] == 'on', args['ord'] == 'on', args['pl'] == 'on', args['lk'], args['negative'], args['round'], args['zero'], args['one'] == 'one' -- experiment: using '|one=one' makes fraction 2+1/2 give "two and one-half" instead of "two and a half" ) or '' end ---- recursive function for export.decToHex local function decToHexDigit(dec) local dig = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"} local div = math.floor(dec/16) local mod = dec-(16*div) if div >= 1 then return decToHexDigit(div)..dig[mod+1] else return dig[mod+1] end end -- I think this is supposed to be done with a tail call but first I want something that works at all ---- finds all the decimal numbers in the input text and hexes each of them function export.decToHex(frame) local args=frame.args local parent=frame.getParent(frame) local pargs={} if parent then pargs=parent.args end local text=args[1] or pargs[1] or "" local minlength=args.minlength or pargs.minlength or 1 minlength=tonumber(minlength) local prowl=mw.ustring.gmatch(text,"(.-)(%d+)") local output="" repeat local chaff,dec=prowl() if not(dec) then break end local hex=decToHexDigit(dec) while (mw.ustring.len(hex)<minlength) do hex="0"..hex end output=output..chaff..hex until false local chaff=mw.ustring.match(text,"(%D+)$") or "" return output..chaff end return export 6lwds6uyagcyzxy7g3rno23lq4e6da2 मॉड्यूल:table/listToSet 828 304375 487609 475692 2026-09-01T18:27:35Z SM7 6218 updating... 487609 Scribunto text/plain local fun_is_callable_module = "Module:fun/isCallable" local function is_callable(...) is_callable = require(fun_is_callable_module) return is_callable(...) end --[==[ Convert `list` (a table with a list of values) into a set (a table where those values are keys instead). This is a useful way to create a fast lookup table, since looking up a table key is much, much faster than iterating over the whole list to see if it contains a given value. By default, each item is given the value true. If the optional parameter `value` is a function or functor, then it is called as an iterator, with the list index as the first argument, the item as the second (which will be used as the key), plus any additional arguments passed to {listToSet}; the returned value is used as the value for that list item. If `value` is anything else, then it is used as the fixed value for every item.]==] return function(list, value, ...) local set, i = {}, 1 if value == nil then value = true elseif is_callable(value) then while true do local item = list[i] if item == nil then return set end set[item] = value(i, item, ...) i = i + 1 end end while true do local item = list[i] if item == nil then return set end set[item] = value i = i + 1 end end o2d2ojf8rsrqqaqy0ffn7n4y1a1r9tb मॉड्यूल:translations/multi 828 304387 487556 477721 2026-09-01T15:50:57Z SM7 6218 असमिया 487556 Scribunto text/plain --[=[ This module implements the {{multitrans}} template. Author: Benwing2, based on an idea from Rua. The idea is to reduce the memory usage of large translation tables by computing the whole table at once instead of through several separate calls. The entire text of the translation table should be passed as follows: {{multitrans|data= * Abkhaz: {{tt|ab|аиқәаҵәа}} * Acehnese: {{tt|ace|itam}} * Afrikaans: {{tt+|af|swart}} * Albanian: {{tt+|sq|zi}} * Amharic: {{tt|am|ጥቁር}} * Arabic: {{tt+|ar|أَسْوَد|m}}, {{tt|ar|سَوْدَاء|f}}, {{tt|ar|سُود|p}} *: Moroccan Arabic: {{tt|ary|كحال|tr=kḥāl}} * Armenian: {{tt|hy|սև}} * Aromanian: {{tt|rup|negru}}, {{tt+|rup|laiu}} * Asháninka: {{tt|cni|cheenkari}}, {{tt|cni|kisaari}} * असमिया: {{tt|as|ক‌’লা}}, {{tt|as|কুলা}} {{qualifier|सेंट्रल}} * Asturian: {{tt|ast|ñegru}}, {{tt|ast|negru}}, {{tt|ast|prietu}} * Atikamekw: {{tt|atj|makatewaw}} * Avar: {{tt|av|чӏегӏера}} * Aymara: {{tt|ay|ch’iyara}} * Azerbaijani: {{tt+|az|qara}} [etc.] }} That is, take the original text and add a 't' to the beginning of translation templates: {{t|...}} -> {{tt|...}} {{t+|...}} -> {{tt+|...}} {{t-check|...}} -> {{tt-check|...}} {{t+check|...}} -> {{tt+check|...}} The {{tt*|...}} templates are pass-throughs, so that e.g. {{tt|ary|كحال|tr=kḥāl}} generates the literal text "⦃⦃t¦ary¦كحال¦tr=kḥāl⦄⦄", with braces replaced by brace-like Unicode chars and the pipe symbol replaced by a pipe-symbol-like Unicode char. These special chars are parsed by the Lua code and call the same code that underlyingly implements {{t}} and {{t+}}, but because this all happens inside a single module invocation instead of a lot of separate module invocations, it's much faster and more memory-efficient. ]=] local export = {} local m_languages = require("Module:languages") local m_data local m_indiv = {} local m_links = require("Module:links") -- not currently used -- local m_parameters = require("Module:parameters") local m_translations = require("Module:translations") --[[ local params = { [1] = {required = true, default = "und"}, [2] = {}, [3] = {list = true}, ["alt"] = {}, ["id"] = {}, ["sc"] = {}, ["tr"] = {}, ["ts"] = {}, ["lit"] = {}, } ]] local function process_translation(tname, combined_args, load, no_check_redundant_translit) local args = {} local i = 0 for arg in mw.text.gsplit(combined_args, "¦", true) do -- I think the algorithm used by Mediawiki when parsing arguments is to -- strip whitespace in named arguments but not numbered arguments. -- The following commented-out code implements this for named arguments; -- but I don't think this is actually necessary because the pass-through -- template will already strip whitespace. -- local name, value = arg:match("^%s*(.-)%s*=%s*(.-)%s*$") local name, value = arg:match("^(.-)=(.-)$") if name then if value ~= "" then name = tonumber(name) or name args[name] = value end elseif arg and arg ~= "" then i = i + 1 args[i] = arg end end local function get_orig_template() -- YUCK! If we return a normal template without a linked template name, -- it will get expanded. I tried surrounding with <nowiki>...</nowiki> -- but then those tags display; I tried using {{#tag:nowiki|...}} but -- you get the same thing; I tried &#123; but then that displays -- literally; etc. return '{{[[Template:t' .. tname .. '|t' .. tname .. ']]|' .. combined_args:gsub("¦", "|") .. '}}' end local function get_lang_obj(lang) local langdata if load == "all" then if not m_data then m_data = require("Module:languages/data/all") end langdata = m_data[lang] else local module_name = m_languages.getDataModuleName(lang) if module_name then if not m_indiv[module_name] then m_indiv[module_name] = mw.loadData("Module:" .. module_name) end langdata = m_indiv[module_name][lang] end end if not langdata then m_languages.err(lang, 1, nil, get_orig_template) end return m_languages.makeObject(lang, langdata) end local genders = {} for i=3, 20 do if args[i] then table.insert(genders, args[i]) end end local lang_obj = get_lang_obj(args[1]) -- FIXME, this is duplicated with [[Module:translations]]. We should see if -- we can consolidate. local terminfo = { lang = lang_obj, sc = (args["sc"] and (require("Module:scripts").getByCode(args["sc"]) or error("The script code \"" .. args["sc"] .. "\" is not valid.")) or nil), term = args[2] or (mw.title.getCurrentTitle().nsText == "Template" and "term") or nil, alt = args["alt"], id = args["id"], genders = genders, tr = args["tr"], ts = args["ts"], lit = args["lit"], interwiki = (tname == "t+" or tname == "t+check") and "tpos" or nil, no_check_redundant_translit = no_check_redundant_translit, } local trans = m_translations.show_terminfo(terminfo) if tname == "t-check" or tname == "t+check" then return trans .. "[[Category:Requests for review of " .. lang_obj:getCanonicalName() .. " translations]]" else return trans end end function export.show(frame) local wikicode = frame:getParent().args["data"] local load = frame:getParent().args["load"] local no_check_redundant_translit = frame:getParent().args["no-check-redundant-translit"] if not wikicode then return "" else local index = mw.ustring.find(wikicode, "⦃") if index == nil then error("Please replace Template:t by Template:tt, Template:t+ by Template:tt+") end if no_check_redundant_translit and ( no_check_redundant_translit == "" or no_check_redundant_translit == "0" or no_check_redundant_translit == "no" or no_check_redundant_translit == "false" ) then no_check_redundant_translit = false end local function if_error_then_log_backtrace(fn, msg) -- Can't tell xpcall to supply varargs to the function that is its -- first argument in Lua 5.1. Lua 5.2 would let us do -- xpcall(fn, error_handler, ...) which would internally -- call fn(...) in protected mode. return function(arg1, arg2) local ok, ret = xpcall(function() return fn(arg1, arg2) end, function(err) return msg .. ":\n" .. tostring(err) .. "\n" .. debug.traceback() end) if ok then return ret else mw.log(ret) error(msg .. "; see Lua logs") end end end local function do_process_translation(tname, combined_args) return process_translation(tname, combined_args, load, no_check_redundant_translit) end return (mw.ustring.gsub( wikicode, "⦃⦃(t[+%-]?c?h?e?c?k?)¦([^⦃⦄]+)⦄⦄", if_error_then_log_backtrace(do_process_translation, "Error in process_translation") )) end end return export ahubwwtitfr1kup3ojeencrh75d9xtz मॉड्यूल:languages/data/3/b 828 304573 487673 479542 2026-09-01T21:06:52Z SM7 6218 updating... 487673 Scribunto text/plain local m_langdata = require("Module:languages/data") -- Loaded on demand, as it may not be needed (depending on the data). local function u(...) u = require("Module:string utilities").char return u(...) end local c = m_langdata.chars local p = m_langdata.puaChars local s = m_langdata.shared local m = {} m["baa"] = { "Babatana", 2877785, "poz-ocw", "Latn", } m["bab"] = { "Bainouk-Gunyuño", 35508, "alv-bny", "Latn", } m["bac"] = { "Baduy", 3449885, "poz-msa", "Latn, Sund", ancestors = "osn", translit = { Sund = "Sund-translit" }, } m["bae"] = { "Baré", 3504087, "awd", "Latn", } m["baf"] = { "Nubaca", 36270, "nic-ymb", "Latn", } m["bag"] = { "Tuki", 36621, "nic-mba", "Latn", } m["bah"] = { "Bahamian Creole", 2669229, "crp", "Latn", ancestors = "en", } m["baj"] = { "Barakai", 3502030, "poz-cet", "Latn", } m["bal"] = { "Baluchi", 33049, "ira-nwi", "Arab", } m["ban"] = { "Balinese", 33070, "poz-bss", "Latn, Bali", } m["bao"] = { "Waimaha", 2883738, "sai-tuc", "Latn", } m["bap"] = { "Bantawa", 56500, "sit-kic", "Krai, Deva", } m["bar"] = { "Bavarian", 29540, "gmw-hgm", "Latn", ancestors = "gmh", } m["bas"] = { "Basaa", 33093, "bnt-bsa", "Latn", } m["bau"] = { "Badanchi", 11001650, "nic-jrw", "Latn", } m["bav"] = { "Babungo", 34885, "nic-rnn", "Latn", } m["baw"] = { "Bambili-Bambui", 34880, "nic-nge", "Latn", } m["bax"] = { "Bamum", 35280, "nic-nun", "Latn, Bamu", } m["bay"] = { "Batuley", 8828787, "poz", "Latn", } m["bba"] = { "Baatonum", 34889, "alv-sav", "Latn", } m["bbb"] = { "Barai", 4858206, "ngf-koi", "Latn", } m["bbc"] = { "Toba Batak", 33017, "btk", "Latn, Batk", } m["bbd"] = { "Bau", 4873415, "ngf-gum", "Latn", } m["bbe"] = { "Bangba", 34895, "nic-nke", "Latn", } m["bbf"] = { "Baibai", 56902, "paa-fas", "Latn", } m["bbg"] = { "Barama", 34884, "bnt-sir", "Latn", } m["bbh"] = { "Bugan", 3033554, "mkh-pkn", "Latn", } m["bbi"] = { "Barombi", 34985, "bnt-bsa", "Latn", } m["bbj"] = { "Ghomala'", 35271, "bai", "Latn", } m["bbk"] = { "Babanki", 34790, "nic-rnc", "Latn", } m["bbl"] = { "Bats", 33259, "cau-nkh", "Geor", -- Geor translit in [[Module:scripts/data]] override_translit = true, strip_diacritics = { remove_diacritics = c.tilde .. c.macron .. c.breve, from = {"<sup>ნ</sup>"}, to = {"ნ"} }, } m["bbm"] = { -- name includes prefix "Babango", 34819, "bnt-bta", "Latn", } m["bbn"] = { "Uneapa", 7884126, "poz-ocw", "Latn", } m["bbo"] = { "Konabéré", 35371, "dmn-snb", "Latn", } m["bbp"] = { "West Central Banda", 7984377, "bad", "Latn", } m["bbq"] = { "Bamali", 34901, "nic-nun", "Latn", } m["bbr"] = { "Girawa", 5564185, "ngf-kok", "Latn", } m["bbs"] = { "Bakpinka", 3515061, "nic-ucr", "Latn", } m["bbt"] = { "Mburku", 3441324, "cdc-wst", "Latn", } m["bbu"] = { "Bakulung", 35580, "nic-jrn", "Latn", } m["bbv"] = { "Karnai", 6372803, "poz-ocw", "Latn", } m["bbw"] = { "Baba", 34822, "nic-nun", "Latn", } m["bbx"] = { -- cf bvb "Bubia", 34953, "nic-bds", "Latn", ancestors = "bvb", } m["bby"] = { "Befang", 34960, "nic-bds", "Latn", } m["bca"] = { "Central Bai", 12628803, "sit-bai", "Hani, Latn", sort_key = {Hani = "Hani-sortkey"}, } m["bcb"] = { "Bainouk-Samik", 36390, "alv-bny", "Latn", } m["bcd"] = { "North Babar", 7054041, "poz-tim", "Latn", } m["bce"] = { "Bamenyam", 34968, "nic-nun", "Latn", } m["bcf"] = { "Bamu", 3503788, "paa-kiw", "Latn", } m["bcg"] = { "Baga Pokur", 31172660, "alv-nal", "Latn", } m["bch"] = { "Bariai", 2884502, "poz-ocw", "Latn", } m["bci"] = { "Baoule", 35107, "alv-ctn", "Latn", } m["bcj"] = { "Bardi", 3913852, "aus-nyu", "Latn", } m["bck"] = { "Bunaba", 580923, "aus-bub", "Latn", } m["bcl"] = { "Central Bikol", 33284, "phi", "Latn, Tglg", translit = { Tglg = "bcl-translit", }, override_translit = true, strip_diacritics = { Latn = { remove_diacritics = c.grave .. c.acute .. c.circ, } }, sort_key = { Latn = "tl-sortkey", }, standard_chars = { Latn = "AaBbKkDdEeGgHhIiLlMmNnOoPpRrSsTtUuWwYy" .. c.punc, }, } m["bcm"] = { "Banoni", 2882857, "poz-ocw", "Latn", } m["bcn"] = { "Bibaali", 34892, "alv-mye", "Latn", } m["bco"] = { "Kaluli", 6354586, "ngf-bos", "Latn", } m["bcp"] = { "Bali", 3515074, "bnt-kbi", "Latn", } m["bcq"] = { "Bench", 35108, "omv", "Latn", } m["bcr"] = { "Babine-Witsuwit'en", 27864, "ath-nor", "Latn", } m["bcs"] = { "Kohumono", 35590, "nic-ucn", "Latn", } m["bct"] = { "Bendi", 8836662, "csu-mle", "Latn", } m["bcu"] = { "Biliau", 2874658, "poz-ocw", "Latn", } m["bcv"] = { "Shoo-Minda-Nye", 36548, "nic-jkn", "Latn", } m["bcw"] = { "Bana", 56272, "cdc-cbm", "Latn", } m["bcy"] = { "Bacama", 56274, "cdc-cbm", "Latn", } m["bcz"] = { "Bainouk-Gunyaamolo", 35506, "alv-bny", "Latn", } m["bda"] = { "Bayot", 35019, "alv-jol", "Latn", } m["bdb"] = { "Basap", 3504208, "poz-bnn", "Latn", } m["bdc"] = { "Emberá-Baudó", 11173166, "sai-chc", "Latn", } m["bdd"] = { "Bunama", 4997416, "poz-ocw", "Latn", } m["bde"] = { "Bade", 56239, "cdc-wst", "Latn", } m["bdf"] = { "Biage", 48037487, "ngf-koi", "Latn", } m["bdg"] = { "Bonggi", 2910053, "poz-bnn", "Latn", } m["bdh"] = { "Tara Baka", 2880165, "csu-bbk", "Latn", } m["bdi"] = { "Burun", 35040, "sdv-niw", "Latn", } m["bdj"] = { "Bai (South Sudan)", 34894, "nic-ser", "Latn", } m["bdk"] = { "Budukh", 35397, "cau-ssm", "Cyrl", translit = "cau-nec-translit", override_translit = true, display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, strip_diacritics = {Cyrl = s["cau-Cyrl-stripdiacritics"]}, } m["bdl"] = { "Indonesian Bajau", 2880038, "poz", "Latn", } m["bdm"] = { "Buduma", 56287, "cdc-cbm", "Latn", } m["bdn"] = { "Baldemu", 56280, "cdc-cbm", "Latn", } m["bdo"] = { "Morom", 759770, "csu-bgr", "Latn", } m["bdp"] = { "Bende", 8836490, "bnt", "Latn", } m["bdq"] = { "Bahnar", 32924, "mkh-ban", "Latn", } m["bdr"] = { "West Coast Bajau", 2880037, "poz-sbj", "Latn", } m["bds"] = { "Burunge", 56617, "cus-sou", "Latn", } m["bdt"] = { "Bokoto", 4938812, "gba-wes", "Latn", } m["bdu"] = { "Oroko", 36278, "bnt-saw", "Latn", } m["bdv"] = { "Bodo Parja", 8845881, "inc-eas", "Orya", } m["bdw"] = { "Baham", 3513309, "paa-mbi", "Latn", } m["bdx"] = { "Budong-Budong", 4985158, "poz-ssw", "Latn", } m["bdy"] = { "Bandjalang", 2980386, "aus-pam", "Latn", } m["bdz"] = { "Badeshi", 33028, "iir", "Arab, Latn", } m["bea"] = { "Beaver", 20826, "ath-nor", "Latn", } m["beb"] = { "Bebele", 34976, "bnt-btb", "Latn", } m["bec"] = { "Iceve-Maci", 35449, "nic-tvc", "Latn", } m["bed"] = { "Bedoanas", 4879330, "poz-hce", "Latn", } m["bee"] = { "Byangsi", 56904, "sit-alm", "Deva", } m["bef"] = { "Benabena", 2895638, "ngf-gor", "Latn", } m["beg"] = { "Belait", 2894198, "poz-swa", "Latn", } m["beh"] = { "Biali", 34961, "nic-eov", "Latn", } m["bei"] = { "Bekati'", 3441683, "day", "Latn", } m["bej"] = { "Beja", 33025, "cus", "Arab, Latn", strip_diacritics = { Latn = { remove_diacritics = c.acute, } }, } m["bek"] = { "Bebeli", 4878430, "poz-ocw", "Latn", } m["bem"] = { "Bemba", 33052, "bnt-sbi", "Latn", } m["beo"] = { "Beami", 3504079, "ngf-bos", "Latn", } m["bep"] = { "Besoa", 8840465, "poz-kal", "Latn", } m["beq"] = { "Beembe", 3196320, "bnt-kng", "Latn", } m["bes"] = { "Besme", 289832, "alv-kim", "Latn", } m["bet"] = { "Guiberoua Bété", 11019185, "kro-bet", "Latn", } m["beu"] = { "Blagar", 4923846, "paa-alp", "Latn", } m["bev"] = { "Daloa Bété", 11155819, "kro-bet", "Latn", } m["bew"] = { "Betawi", 33014, "crp", "Latn", ancestors = "ms", } m["bex"] = { "Jur Modo", 56682, "csu-bbk", "Latn", } m["bey"] = { "Beli (New Guinea)", 3504170, "paa-trr", "Latn", } m["bez"] = { "Kibena", 2502949, "bnt-bki", "Latn", } m["bfa"] = { "Bari", 35042, "sdv-bri", "Latn", } m["bfb"] = { "Pauri Bareli", 7155462, "inc-bhi", "Deva", } m["bfc"] = { "Panyi Bai", 12642165, "sit-nba", "Hani, Latn", sort_key = {Hani = "Hani-sortkey"}, } m["bfd"] = { "Bafut", 34888, "nic-nge", "Latn", } m["bfe"] = { "Betaf", 4897329, "paa-bvi", "Latn", } m["bff"] = { "Bofi", 34914, "gba-eas", "Latn", } m["bfg"] = { "Busang Kayan", 9231909, "poz", "Latn", } m["bfh"] = { "Blafe", 12628007, "paa-ton", "Latn", } m["bfi"] = { "British Sign Language", 33000, "sgn", "Latn", -- when documented } m["bfj"] = { "Bafanji", 34890, "nic-nun", "Latn", } m["bfk"] = { "Ban Khor Sign Language", 3441103, "sgn", } m["bfl"] = { "Banda-Ndélé", 34850, "bad-cnt", "Latn", } m["bfm"] = { "Mmen", 36132, "nic-rnc", "Latn", } m["bfn"] = { "Bunak", 35101, "paa-tap", "Latn", } m["bfo"] = { "Malba Birifor", 11150710, "nic-mre", "Latn", } m["bfp"] = { "Beba", 35050, "nic-nge", "Latn", } m["bfq"] = { "Badaga", 33205, "dra-kan", "Taml, Knda, Mlym", translit = { --Taml = "Taml-translit", }, -- Knda translit in [[Module:scripts/data]] -- Mlym translit in [[Module:scripts/data]] } m["bfr"] = { "Bazigar", 8829558, "inc", } m["bfs"] = { "Southern Bai", 12952250, "sit-bai", "Hani, Latn", sort_key = {Hani = "Hani-sortkey"}, } m["bft"] = { "Balti", 33086, "sit-lab", "Aran, Deva, Tibt", override_translit = "Tibt", -- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]] strip_diacritics = { Aran = { from = {"هٔ", "ٱ"}, to = {"ه", "ا"}, remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.kashida .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef, }, }, } m["bfu"] = { "Gahri", 5516952, "sit-whm", "Takr, Tibt", override_translit = true, -- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["bfw"] = { "Bondo", 2567942, "mun", "Orya", } m["bfx"] = { "Bantayanon", 16837866, "phi", "Latn", } m["bfy"] = { "Bagheli", 2356364, "inc-hie", "Deva", translit = "hi-translit", } m["bfz"] = { "Mahasu Pahari", 6733460, "him", "Deva, Takr", translit = "hi-translit", } m["bga"] = { "Gwamhi-Wuri", 6707102, "nic-knn", "Latn", } m["bgb"] = { "Bobongko", 4935896, "poz-slb", "Latn", } m["bgc"] = { "Haryanvi", 33410, "inc-hiw", "Deva, Aran", translit = { Deva = "hi-translit", }, } m["bgd"] = { "Rathwi Bareli", 7295692, "inc-bhi", "Deva", } m["bge"] = { "Bauria", 4873579, "inc-bhi", "Deva", } m["bgf"] = { "Bangandu", 34938, "gba-sou", "Latn", } m["bgg"] = { "Bugun", 3514220, "sit-khb", "Latn", } m["bgi"] = { "Giangan", 4842057, "phi", "Latn", } m["bgj"] = { "Bangolan", 34862, "nic-nun", "Latn", } m["bgk"] = { "Bit", 2904868, "mkh-pal", "Latn", -- also Hani? } m["bgl"] = { "Bo", 8845514, "mkh-vie", } m["bgo"] = { "Baga Koga", 35695, "alv-bag", "Latn", } m["bgq"] = { "Bagri", 2426319, "raj", "Deva", } m["bgr"] = { "Bawm Chin", 56765, "tbq-kuk", "Latn", } m["bgs"] = { "Tagabawa", 7675121, "mno", "Latn", } m["bgt"] = { "Bughotu", 2927723, "poz-sls", "Latn", } m["bgu"] = { "Mbongno", 36141, "nic-mmb", "Latn", } m["bgv"] = { "Warkay-Bipim", 4915439, "paa-yaq", "Latn", } m["bgw"] = { "Bhatri", 8841054, "inc-eas", "Deva", } m["bgx"] = { "Balkan Gagauz Turkish", 2360396, "trk-ogz", "Latn", ancestors = "trk-oat", } m["bgy"] = { "Benggoi", 4887742, "poz-cma", "Latn", } m["bgz"] = { "Banggai", 3441692, "poz-slb", "Latn", } m["bha"] = { "Bharia", 4901287, "inc", "Deva", } m["bhb"] = { "Bhili", 33229, "inc-bhi", "Deva, Gujr", translit = { Deva = "hi-translit", Gujr = "gu-translit", }, } m["bhc"] = { "Biga", 2902375, "poz-hce", "Latn", } m["bhd"] = { "Bhadrawahi", 4900565, "him", "Aran, Deva", translit = {Deva = "hi-translit"}, } m["bhe"] = { "Bhaya", 8841168, "raj", } m["bhf"] = { "Odiai", 56690, "qfa-dis", -- Papuan; no consensus; may be in the Kwomtari family, an isolate and/or distantly related to the -- Torricelli family. "Latn", } m["bhg"] = { "Binandere", 3503802, "ngf-bin", "Latn", } m["bhh"] = { "Bukhari", 56469, "ira-swi", "Cyrl, Hebr, Latn, Arab", ancestors = "tg", -- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["bhi"] = { "Bhilali", 4901729, "inc-bhi", "Deva", } m["bhj"] = { "Bahing", 56442, "sit-kiw", "Deva, Latn", } m["bhl"] = { "Bimin", 4913743, "ngf-mok", "Latn", } m["bhm"] = { "Bathari", 2586893, "sem-sar", "Arab, Latn", } m["bhn"] = { "Bohtan Neo-Aramaic", 33230, "sem-nna", "Syrc", } m["bho"] = { "भोजपुरी", 33268, "inc-bih", "Deva", wikimedia_codes = "bh", translit = { Deva = "bho-translit", }, } m["bhp"] = { "Bima", 2796873, "poz-cet", "Latn", } m["bhq"] = { "South Tukang Besi", 12643975, "poz-mun", "Latn", } m["bhs"] = { "Buwal", 3515065, "cdc-cbm", "Latn", } m["bht"] = { "Bhattiyali", 4901452, "him", "Deva", } m["bhu"] = { "Bhunjia", 8841766, "inc-hal", "Deva, Orya", } m["bhv"] = { "Bahau", 3502039, "poz", "Latn", } m["bhw"] = { "Biak", 1961488, "poz-hce", "Latn", } m["bhx"] = { -- spurious? "Bhalay", 8840773, "inc", } m["bhy"] = { "Bhele", 4901671, "bnt-kbi", "Latn", } m["bhz"] = { "Bada", 4840520, "poz-kal", "Latn", } m["bia"] = { "Badimaya", 3442745, "aus-psw", "Latn", } m["bib"] = { "Bissa", 32934, "dmn-bbu", "Latn", } --- Bikaru [bic] is spurious m["bid"] = { "Bidiyo", 56258, "cdc-est", "Latn", } m["bie"] = { "Bepour", 4890914, "ngf-kum", "Latn", } m["bif"] = { "Biafada", 35099, "alv-ten", "Latn", } m["big"] = { "Biangai", 8842027, "paa-kun", "Latn", } m["bij"] = { "Kwanka", 35598, "nic-tar", "Latn", } m["bil"] = { "Bile", 34987, "nic-jrn", "Latn", } m["bim"] = { "Bimoba", 34971, "nic-grm", "Latn", } m["bin"] = { "Edo", 35375, "alv-eeo", "Latn", strip_diacritics = {remove_diacritics = c.acute .. c.grave .. c.macron .. c.dgrave}, sort_key = { from = {"ẹ", "gb", "gh", "kh", "kp", "mw", "nw", "ny", "ọ", "rh", "rr", "vb"}, to = {"e" .. p[1], "g" .. p[1], "g" .. p[2], "k" .. p[1], "k" .. p[2], "m" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "r" .. p[1], "r" .. p[1], "v" .. p[1]} }, } m["bio"] = { "Nai", 3508074, "paa-kwo", "Latn", } m["bip"] = { "Bila", 2902626, "bnt-kbi", "Latn", } m["biq"] = { "Bipi", 2904312, "poz-aay", "Latn", } m["bir"] = { "Bisorio", 8844749, "ngf-oen", "Latn", } m["bit"] = { "Berinomo", 56447, "paa-sep", "Latn", } m["biu"] = { "Biete", 4904687, "tbq-kuk", "Latn", } m["biv"] = { "Southern Birifor", 32859745, "nic-mre", "Latn", } m["biw"] = { "Kol (Cameroon)", 35582, "bnt-mka", "Latn", } m["bix"] = { "Bijori", 3450686, "mun", "Deva", } m["biy"] = { "Birhor", 3450469, "mun", "Deva", } m["biz"] = { "Baloi", 3450590, "bnt-ngn", "Latn", } m["bja"] = { "Budza", 3046889, "bnt-bun", "Latn", } m["bjb"] = { "Barngarla", 3439071, "aus-pam", "Latn", } m["bjc"] = { "Bariji", 4690919, "ngf-yar", "Latn", } m["bje"] = { "Biao-Jiao Mien", 3503800, "hmx-mie", "Hani, Latn", sort_key = {Hani = "Hani-sortkey"}, } m["bjf"] = { "Barzani Jewish Neo-Aramaic", 33234, "sem-nna", "Hebr", -- maybe others -- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["bjg"] = { "Bidyogo", 35365, "alv-bak", "Latn", } m["bjh"] = { "Bahinemo", 56361, "paa-sep", "Latn", } m["bji"] = { "Burji", 34999, "cus-hec", "Latn, Ethi", } m["bjj"] = { "Kannauji", 2726867, "inc-hiw", "Deva", } m["bjk"] = { "Barok", 2884743, "poz-ocw", "Latn", } m["bjl"] = { "Bulu (New Guinea)", 4997162, "poz-ocw", "Latn", } m["bjm"] = { "Bajelani", 4848866, "ira-zgr", "Latn, Arab", ancestors = "hac", } m["bjn"] = { "Banjarese", 33151, "poz-mly", "Latn, Arab", } m["bjo"] = { "Mid-Southern Banda", 42303990, "bad-cnt", "Latn", } m["bjp"] = { "Fanamaket", 56704263, "poz-oce", "Latn", } m["bjr"] = { "Binumarien", 538364, "ngf-tai", "Latn", } m["bjs"] = { "Bajan", 2524014, "crp", "Latn", ancestors = "en", } m["bjt"] = { "Balanta-Ganja", 19359034, "alv-bak", "Arab, Latn", } m["bju"] = { "Busuu", 35046, "nic-fru", "Latn", } m["bjv"] = { "Bedjond", 8829831, "csu-sar", "Latn", } m["bjw"] = { "Bakwé", 34899, "kro-ekr", "Latn", } m["bjx"] = { "Banao Itneg", 12627559, "phi", "Latn", } m["bjy"] = { "Bayali", 4874263, "aus-pam", "Latn", } m["bjz"] = { "Baruga", 2886189, "ngf-bin", "Latn", } m["bka"] = { "Kyak", 35653, "alv-bwj", "Latn", } m["bkc"] = { "Baka", 34905, "nic-nkb", "Latn", } m["bkd"] = { "Binukid", 4914553, "mno", "Latn", } m["bkf"] = { "Beeke", 3441375, "bnt-kbi", "Latn", } m["bkg"] = { "Buraka", 35066, "nic-nkg", "Latn", } m["bkh"] = { "Bakoko", 34866, "bnt-bsa", "Latn", } m["bki"] = { "Baki", 11024697, "poz-vnc", "Latn", } m["bkj"] = { "Pande", 36263, "bnt-ngn", "Latn", } m["bkk"] = { -- written in Balti script "Brokskat", 2925988, "inc-shn", "Tibt, Aran", -- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]] -- (NOTE: formerly not present, probably an accidental omission) } m["bkl"] = { "Berik", 378743, "paa-tor", "Latn", } m["bkm"] = { "Kom (Cameroon)", 1656595, "nic-rnc", "Latn", } m["bkn"] = { "Bukitan", 3446774, "poz-bnn", "Latn", } m["bko"] = { "Kwa'", 35567, "bai", "Latn", } m["bkp"] = { "Iboko", 35089, "bnt-ngn", "Latn", } m["bkq"] = { "Bakairí", 56846, "sai-pek", "Latn", } m["bkr"] = { "Bakumpai", 3436626, "poz-brw", "Latn", } m["bks"] = { "Masbate Sorsogon", 16113356, "phi", "Latn", } m["bkt"] = { "Boloki", 4144560, "bnt-zbi", "Latn", ancestors = "lse", } m["bku"] = { "Buhid", 1002956, "phi", "Latn, Buhd", translit = { Buhd = "bku-translit", }, override_translit = true, strip_diacritics = { Latn = { remove_diacritics = c.grave .. c.acute .. c.circ, } }, sort_key = { Latn = "tl-sortkey", }, standard_chars = { Latn = "AaBbKkDdEeFfGgHhIiLlMmNnOoPpRrSsTtUuWwYy" .. c.punc, }, } m["bkv"] = { "Bekwarra", 34954, "nic-ben", "Latn", } m["bkw"] = { "Bekwel", 34950, "bnt-bek", "Latn", } m["bkx"] = { "Baikeno", 11200640, "poz-tim", "Latn", } m["bky"] = { "Bokyi", 35087, "nic-ben", "Latn", } m["bkz"] = { "Bungku", 2928207, "poz-btk", "Latn", } m["bla"] = { "Blackfoot", 33060, "alg", "Latn, Cans", } m["blb"] = { "Bilua", 35003, "qfa-dis", -- Papuan; isolate per Glottolog, Central Solomon per Ross (2005) and Pedrós (2015) "Latn", } m["blc"] = { "Bella Coola", 977808, "sal", "Latn", } m["bld"] = { "Bolango", 3450578, "phi", "Latn", } m["ble"] = { "Balanta-Kentohe", 56789, "alv-bak", "Latn", } m["blf"] = { "Buol", 2928278, "phi", "Latn", } m["blg"] = { "Balau", 4850134, "poz-mly", "Latn", } m["blh"] = { "Kuwaa", 35579, "kro", "Latn", } m["bli"] = { "Bolia", 34910, "bnt-mon", "Latn", } m["blj"] = { "Bulungan", 9229310, "poz", "Latn", } m["blk"] = { "Pa'o Karen", 7121294, "kar", "Mymr", } m["bll"] = { "Biloxi", 2903780, "sio-ohv", "Latn", } m["blm"] = { "Beli (South Sudan)", 56821, "csu-bbk", "Latn", } m["bln"] = { "Southern Catanduanes Bikol", 7569754, "phi", "Latn", } m["blo"] = { "Anii", 34838, "alv-ntg", "Latn", } m["blp"] = { "Blablanga", 2905245, "poz-ocw", "Latn", } m["blq"] = { "Baluan-Pam", 2881675, "poz-aay", "Latn", } m["blr"] = { "Blang", 4925096, "mkh-pal", "Latn, Tale, Lana, Thai", sort_key = { -- FIXME: This needs to be converted into the current standardized format. from = {"[%pᪧๆ]", "[᩠ᩳ-᩿]", "ᩔ", "ᩕ", "ᩖ", "ᩘ", "([ᨭ-ᨱ])ᩛ", "([ᨷ-ᨾ])ᩛ", "ᩤ", "[็-๎]", "([เแโใไ])([ก-ฮ])"}, to = {"", "", "ᩈᩈ", "ᩁ", "ᩃ", "ᨦ", "%1ᨮ", "%1ᨻ", "ᩣ", "", "%2%1"} }, } m["bls"] = { "Balaesang", 4849796, "poz", "Latn", } m["blt"] = { "Tai Dam", 56407, "tai-swe", "Tavt, Latn", --translit = "Tavt-translit", sort_key = { Tavt = { from = {"[꪿ꫀ꫁ꫂ]", "([ꪵꪶꪹꪻꪼ])([ꪀ-ꪯ])"}, to = {"", "%2%1"} }, }, } m["blv"] = { "Kibala", 4939959, "bnt-kmb", "Latn", } m["blw"] = { "Balangao", 4850033, "phi", "Latn", } m["blx"] = { "Mag-Indi Ayta", 1931221, "phi", "Latn", } m["bly"] = { "Notre", 11009194, "nic-wov", "Latn", } m["blz"] = { "Balantak", 4850053, "poz-slb", "Latn", } m["bma"] = { "Lame", 3913997, "nic-jrn", "Latn", } m["bmb"] = { "Bembe", 4885023, "bnt-lgb", "Latn", } m["bmc"] = { "Biem", 4904523, "poz-ocw", "Latn", } m["bmd"] = { "Baga Manduri", 35815, "alv-bag", "Latn", } m["bme"] = { "Limassa", 11004666, "nic-nkb", "Latn", } m["bmf"] = { "Bom", 35088, "alv-mel", "Latn", } m["bmg"] = { "Bamwe", 34867, "bnt-bun", "Latn", } m["bmh"] = { "Kein", 6383764, "ngf-kok", "Latn", } m["bmi"] = { "Bagirmi", 34903, "csu-bgr", "Latn", } m["bmj"] = { "Bote-Majhi", 9229570, "inc-bih", "Deva", } m["bmk"] = { "Ghayavi", 5555976, "poz-ocw", "Latn", } m["bml"] = { "Bomboli", 35055, "bnt-ngn", "Latn", } m["bmn"] = { "Bina", 8843664, "poz-ocw", "Latn", } m["bmo"] = { "Bambalang", 34868, "nic-nun", "Latn", } m["bmp"] = { "Bulgebi", 4996380, "ngf-war", "Latn", } m["bmq"] = { "Bomu", 35065, "nic-bwa", "Latn", } m["bmr"] = { "Muinane", 3027894, "sai-bor", "Latn", } m["bmt"] = { "Biao Mon", 8842159, "hmx-mie", } m["bmu"] = { "Somba-Siawari", 5000983, "ngf-kbm", "Latn", } m["bmv"] = { "Bum", 35058, "nic-rnc", "Latn", } m["bmw"] = { "Bomwali", 34984, "bnt-ndb", "Latn", } m["bmx"] = { "Baimak", 3450546, "ngf-han", "Latn", } m["bmz"] = { "Baramu", 4858315, "paa-tir", "Latn", } m["bna"] = { "Bonerate", 4941729, "poz-mun", "Latn", } m["bnb"] = { "Bookan", 4943150, "poz-san", "Latn", } m["bnd"] = { "Banda", 3504147, "poz-cma", "Latn", } m["bne"] = { "Bintauna", 4914533, "phi", "Latn", } m["bnf"] = { "Masiwang", 6783305, "poz-cma", "Latn", } m["bng"] = { "Benga", 34952, "bnt-saw", "Latn", } m["bni"] = { "Bangi", 34936, "bnt-bmo", "Latn", } m["bnj"] = { "Eastern Tawbuid", 18757427, "phi", "Latn", } m["bnk"] = { "Bierebo", 2902029, "poz-vnc", "Latn", } m["bnl"] = { "Boon", 56616, "cus-eas", "Latn", } m["bnm"] = { "Batanga", 34979, "bnt-saw", "Latn", } m["bnn"] = { "Bunun", 56505, "map", "Latn", } m["bno"] = { "Asi", 29490, "phi", "Latn", } m["bnp"] = { "Bola", 4938876, "poz-ocw", "Latn", } m["bnq"] = { "Bantik", 2883521, "poz", "Latn", } m["bnr"] = { "Butmas-Tur", 2928942, "poz-vnn", "Latn", } m["bns"] = { "Bundeli", 56399, "inc-hiw", "Deva", translit = "hi-translit", } m["bnu"] = { "Bentong", 4890644, "poz-ssw", "Latn", } m["bnv"] = { "Beneraf", 4941733, "paa-tor", "Latn", } m["bnw"] = { "Bisis", 56356, "paa-sep", "Latn", } m["bnx"] = { "Bangubangu", 3438330, "bnt-lbn", "Latn", } m["bny"] = { "Bintulu", 3450775, "poz-swa", "Latn", } m["bnz"] = { "Beezen", 35083, "nic-ykb", "Latn", } m["boa"] = { "Bora", 2375468, "sai-bor", "Latn", } m["bob"] = { "Aweer", 56526, "cus-som", "Latn", } m["boe"] = { "Mundabli", 36127, "nic-beb", "Latn", } m["bof"] = { "Bolon", 3913301, "dmn-emn", "Latn", } m["bog"] = { "Bamako Sign Language", 4853284, "sgn", } m["boh"] = { "North Boma", 35080, "bnt-bdz", "Latn", } m["boi"] = { "Barbareño", 56391, "nai-chu", "Latn", } m["boj"] = { "Anjam", 3504136, "ngf-min", "Latn", } m["bok"] = { "Bonjo", 34942, "alv", "Latn", } m["bol"] = { "Bole", 3436680, "cdc-wst", "Latn", } m["bom"] = { "Berom", 35013, "nic-beo", "Latn", } m["bon"] = { "Bine", 4914077, "paa-etf", "Latn", } m["boo"] = { "Tiemacèwè Bozo", 12643582, "dmn-snb", "Latn", -- and others? } m["bop"] = { "Bonkiman", 4942134, "ngf-yup", "Latn", } m["boq"] = { "Bogaya", 7207578, "qfa-dis", -- Papuan; isolate per Glottolog, grouped in Duna-Pogaya family by Voorhoeve (1975), Ross (2005) and Usher (2018) "Latn", } m["bor"] = { "Borôro", 32986, "sai-mje", "Latn", } m["bot"] = { "Bongo", 2910067, "csu-bbk", "Latn", } m["bou"] = { "Bondei", 4941378, "bnt-seu", "Latn", } m["bov"] = { "Tuwuli", 36974, "alv-ktg", "Latn", } m["bow"] = { "Rema", 7311502, "paa-ton", "Latn", } m["box"] = { "Buamu", 35157, "nic-bwa", "Latn", } m["boy"] = { "Bodo (Central Africa)", 4936715, "bnt-leb", "Latn", } m["boz"] = { "Tiéyaxo Bozo", 32860401, "dmn-snb", "Latn", } m["bpa"] = { "Daakaka", 1157729, "poz-vnc", "Latn", } m["bpd"] = { "Banda-Banda", 3450674, "bad-cnt", "Latn", } m["bpe"] = { "Bauni", 105150962, "paa-pio", "Latn", } m["bpg"] = { "Bonggo", 4941860, "poz-ocw", "Latn", } m["bph"] = { "Botlikh", 56560, "cau-and", "Cyrl", translit = "cau-nec-translit", override_translit = true, display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, strip_diacritics = {Cyrl = s["cau-Cyrl-stripdiacritics"]}, } m["bpi"] = { "Bagupi", 3450697, "ngf-han", "Latn", } m["bpj"] = { "Binji", 4914403, "bnt-lbn", "Latn", } m["bpk"] = { "Orowe", 7103905, "poz-cln", "Latn", } m["bpl"] = { "Broome Pearling Lugger Pidgin", 4975277, "crp", "Latn", ancestors = "ms", } m["bpm"] = { "Biyom", 4919327, "ngf-rai", "Latn", } m["bpn"] = { "Dzao Min", 3042189, "hmx-mie", } m["bpo"] = { "Anasi", 11207813, "paa-egb", "Latn", } m["bpp"] = { "Kaure", 20526532, "paa-kko", "Latn", } m["bpq"] = { "Banda Malay", 12473442, "crp", "Latn", ancestors = "ms", } m["bpr"] = { "Koronadal Blaan", 16115430, "phi", "Latn", } m["bps"] = { "Sarangani Blaan", 16117272, "phi", "Latn", } m["bpt"] = { "Barrow Point", 2567916, "aus-pmn", "Latn", } m["bpu"] = { "Bongu", 4941930, "ngf-min", "Latn", } m["bpv"] = { "Bian Marind", 8841889, "paa-mri", "Latn", } -- bpw: Bo (Papua New Guinea): excluded in 2012 and re-evaluated in 2025 with the same conclusion; per Wikipedia: "It is -- essentially undocumented, and its status as a separate language is unconfirmed." m["bpx"] = { "Palya Bareli", 7128872, "inc-bhi", "Deva", translit = "hi-translit", } m["bpy"] = { "Bishnupriya Manipuri", 37059, "inc-bas", "Beng", ancestors = "inc-obn", } m["bpz"] = { "Bilba", 8843362, "poz-tim", "Latn", } m["bqa"] = { "Tchumbuli", 11008162, "alv-ctn", "Latn", ancestors = "ak", } m["bqb"] = { "Bagusa", 4842178, "paa-kwe", "Latn", } m["bqc"] = { "Boko", 34983, "dmn-bbu", "Latn", } m["bqd"] = { "Bung", 3436612, "nic-bdn", "Latn", } m["bqf"] = { "Baga Kaloum", 3502293, "alv-bag", "Latn", } m["bqg"] = { "Bago-Kusuntu", 34878, "nic-gne", } m["bqh"] = { "Baima", 674990, "sit-qia", } m["bqi"] = { "Bakhtiari", 257829, "ira-swi", "Arab", ancestors = "pal", } m["bqj"] = { "Bandial", 34872, "alv-jol", "Latn", } m["bqk"] = { "Banda-Mbrès", 3450724, "bad-cnt", "Latn", } m["bql"] = { "Karian", 4907504, "ngf-num", "Latn", } m["bqm"] = { "Wumboko", 37051, "bnt-kpw", "Latn", } m["bqn"] = { "Bulgarian Sign Language", 3438325, "sgn", } m["bqo"] = { "Balo", 34865, "nic-grs", "Latn", } m["bqp"] = { "Busa", 35185, "dmn-bbu", "Latn", } m["bqq"] = { "Biritai", 56382, "paa-clp", "Latn", } m["bqr"] = { "Burusu", 5001028, "poz-san", "Latn", } m["bqs"] = { "Bosngun", 56838, "paa-baw", "Latn", } m["bqt"] = { "Bamukumbit", 35078, "nic-nge", "Latn", } m["bqu"] = { "Boguru", 3438444, "bnt-boa", "Latn", } m["bqv"] = { "Begbere-Ejar", 7194098, "nic-plc", "Latn", } m["bqw"] = { "Buru (Nigeria)", 1017152, "nic-bds", "Latn", } m["bqx"] = { "Baangi", 3450648, "nic-kam", "Latn", } m["bqy"] = { "Bengkala Sign Language", 3322119, "sgn", } m["bqz"] = { "Bakaka", 34855, "bnt-mne", "Latn", } m["bra"] = { "Braj", 35243, "inc-hiw", "Deva", translit = "hi-translit", } m["brb"] = { "Lave", 4957737, "mkh-ban", } m["brc"] = { "Berbice Creole Dutch", 35215, "crp", "Latn", ancestors = "nl", } m["brd"] = { "Baraamu", 56804, "sit-new", "Deva", } m["brf"] = { "Bera", 2896850, "bnt-kbi", "Latn", } m["brg"] = { "Baure", 2839722, "awd", "Latn", } m["brh"] = { "Brahui", 33202, "dra-nor", "Aran, Latn", translit = {Aran = "ur-translit"}, strip_diacritics = { -- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif from = {"هٔ", "ۂ", "ٱ"}, to = {"ہ", "ہ", "ا"}, remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.superalef }, } m["bri"] = { "Mokpwe", 36428, "bnt-kpw", "Latn", } m["brj"] = { "Bieria", 4904607, "poz-vnc", "Latn", } m["brk"] = { "Birgid", 56823, "nub", "Latn", } m["brl"] = { "Birwa", 3501019, "bnt-sts", "Latn", } m["brm"] = { "Barambu", 34893, "znd", "Latn", } m["brn"] = { "Boruca", 4946773, "cba", "Latn", } m["bro"] = { "Brokkat", 56605, "sit-tib", "Tibt, Latn", override_translit = true, -- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["brp"] = { "Barapasi", 56995, "paa-egb", "Latn", } m["brq"] = { "Breri", 4961835, "paa-tam", "Latn", } m["brr"] = { "Birao", 2904383, "poz-sls", "Latn", } m["brs"] = { "Baras", 8827053, "poz", "Latn", } m["brt"] = { "Bitare", 34946, "nic-tvn", "Latn", } m["bru"] = { "Eastern Bru", 16115463, "mkh-kat", "Latn, Laoo, Thai", sort_key = { Laoo = "Laoo-sortkey", Thai = "Thai-sortkey", }, } m["brv"] = { "Western Bru", 13018531, "mkh-kat", "Latn, Laoo, Thai", sort_key = { Laoo = "Laoo-sortkey", Thai = "Thai-sortkey", }, } m["brw"] = { "Bellari", 4883496, "dra-tlk", "Knda, Mlym", -- Knda translit in [[Module:scripts/data]] -- Mlym translit in [[Module:scripts/data]] } m["brx"] = { "Bodo (India)", 33223, "tbq-bdg", "Deva, Latn", translit = {Deva = "brx-translit"}, } m["bry"] = { "Burui", 5000976, "paa-nnd", "Latn", } m["brz"] = { "Bilbil", 4907473, "poz-ocw", "Latn", } m["bsa"] = { "Abinomn", 56648, "qfa-iso", -- Papuan "Latn", } m["bsb"] = { "Brunei Bisaya", 3450611, "poz-san", "Latn", } m["bsc"] = { "Bassari", 35098, "alv-ten", "Latn", } m["bse"] = { "Wushi", 36973, "nic-rnn", "Latn", } m["bsf"] = { "Bauchi", 34974, "nic-shi", "Latn", } m["bsg"] = { "Bashkardi", 33030, "ira-lur", "Arab, Latn", } m["bsh"] = { "Kamkata-viri", 2605045, "nur-nor", "Latn, Arab", } m["bsi"] = { "Bassossi", 34940, "bnt-mne", "Latn", } m["bsj"] = { "Bangwinji", 3446631, "alv-wjk", "Latn", } m["bsk"] = { "Burushaski", 216286, "qfa-iso", "Aran", strip_diacritics = { -- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif from = {"هٔ", "ۂ", "ٱ"}, to = {"ہ", "ہ", "ا"}, remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.superalef }, } m["bsl"] = { "Basa-Gumna", 4866150, "nic-bas", "Latn", } m["bsm"] = { "Busami", 5001255, "poz-hce", "Latn", } m["bsn"] = { "Barasana", 2883843, "sai-tuc", "Latn", } m["bso"] = { "Buso", 3441370, "cdc-est", "Latn", } m["bsp"] = { "Baga Sitemu", 36466, "alv-bag", "Latn", } m["bsq"] = { "Bassa", 34949, "kro-wkr", "Latn, Bass", } m["bsr"] = { "Bassa-Kontagora", 4866152, "nic-bas", "Latn", } m["bss"] = { "Akoose", 34806, "bnt-mne", "Latn", } m["bst"] = { "Basketo", 56531, "omv-ome", "Ethi", } m["bsu"] = { "Bahonsuai", 2879298, "poz-btk", "Latn", } m["bsv"] = { "Baga Sobané", 3450433, "alv-bag", "Latn", } m["bsw"] = { "Baiso", 56615, "cus-som", "Latn", } m["bsx"] = { "Yangkam", 36922, "nic-tar", "Latn", } m["bsy"] = { "Sabah Bisaya", 12641557, "poz-san", "Latn", } m["bta"] = { "Bata", 56254, "cdc-cbm", "Latn", } m["btc"] = { "Bati (Cameroon)", 34944, "nic-mbw", "Latn", } m["btd"] = { "Dairi Batak", 2891045, "btk", "Latn, Batk", } m["bte"] = { "Gamo-Ningi", 5520366, "nic-jer", "Latn", } m["btf"] = { "Birgit", 56302, "cdc-est", "Latn", } m["btg"] = { "Gagnoa Bété", 5005069, "kro-bet", "Latn", } m["bth"] = { "Biatah Bidayuh", 2900881, "day", "Latn", } m["bti"] = { "Burate", 56900, "paa-egb", "Latn", } m["btj"] = { "Bacanese Malay", 8828608, "poz-mly", "Latn", } m["btm"] = { "Mandailing Batak", 2891049, "btk", "Latn, Batk", } m["btn"] = { "Ratagnon", 13197, "phi", "Latn", } m["bto"] = { "Rinconada Bikol", 12633026, "phi", "Latn", } m["btp"] = { "Budibud", 4985086, "poz-ocw", "Latn", } m["btq"] = { "Batek", 860315, "mkh-asl", "Latn", } m["btr"] = { "Baetora", 2878874, "poz-vnn", "Latn", } m["bts"] = { "Simalungun Batak", 2891054, "btk", "Latn, Batk", } m["btt"] = { "Bete-Bendi", 4887064, "nic-ben", "Latn", } m["btu"] = { "Batu", 34964, "nic-tvn", "Latn", } m["btv"] = { "Bateri", 3812564, "inc-koh", "Deva", } m["btw"] = { "Butuanon", 5003156, "phi", "Latn", } m["btx"] = { "Karo Batak", 33012, "btk", "Latn, Batk", } m["bty"] = { "Bobot", 3446788, "poz-cma", "Latn", } m["btz"] = { "Alas-Kluet Batak", 2891042, "btk", "Latn, Batk", } m["bua"] = { "Buryat", 33120, "xgn-cen", "Cyrl, Mong, Latn", wikimedia_codes = "bxr", ancestors = "cmg", translit = { Cyrl = "bua-translit", -- Mong translit in [[Module:scripts/data]] }, override_translit = true, -- Mong display_text and strip_diacritics in [[Module:scripts/data]] strip_diacritics = { Cyrl = {remove_diacritics = c.grave .. c.acute}, }, sort_key = { Cyrl = { from = {"ё", "ө", "ү", "һ"}, to = {"е" .. p[1], "о" .. p[1], "у" .. p[1], "х" .. p[1]} }, }, } m["bub"] = { "Bua", 32928, "alv-bua", "Latn", } m["bud"] = { "Ntcham", 36266, "nic-grm", "Latn", } m["bue"] = { "Beothuk", 56234, "qfa-unc", -- extinct since 1829, poorly attested; possibly a divergent Algonquian language "Latn", } m["buf"] = { "Bushoong", 3449964, "bnt-bsh", "Latn", } m["bug"] = { "Buginese", 33190, "poz-ssw", "Bugi, Latn", } m["buh"] = { "Younuo Bunu", 56299, "hmn", "Latn", } m["bui"] = { "Bongili", 35084, "bnt-ngn", "Latn", } m["buj"] = { "Basa-Gurmana", 6432515, "nic-bas", "Latn", } m["buk"] = { "Bukawa", 35043, "poz-ocw", "Latn", } m["bum"] = { "Bulu (Cameroon)", 35028, "bnt-btb", "Latn", } m["bun"] = { "Sherbro", 36339, "alv-mel", "Latn", } m["buo"] = { "Terei", 56831, "paa-sbo", "Latn", } m["bup"] = { "Busoa", 5002001, "poz", "Latn", } m["buq"] = { "Brem", 4960502, "ngf-nad", "Latn", } m["bus"] = { "Bokobaru", 9228931, "dmn-bbu", "Latn", } m["but"] = { "Bungain", 3450623, "paa-mar", "Latn", } m["buu"] = { "Budu", 3450207, "bnt-nya", "Latn", } m["buv"] = { "Bun", 56351, "paa-yua", "Latn", } m["buw"] = { "Bubi", 35017, "bnt-tso", "Latn", } m["bux"] = { "Boghom", 3440412, "cdc-wst", "Latn", } m["buy"] = { "Mmani", 35061, "alv-mel", "Latn", } m["bva"] = { "Barein", 56285, "cdc-est", "Latn", } m["bvb"] = { "Bube", 35110, "nic-bds", "Latn", } m["bvc"] = { "Baelelea", 2878833, "poz-sls", "Latn", } m["bvd"] = { "Baeggu", 2878850, "poz-sls", "Latn", } m["bve"] = { "Berau Malay", 3915770, "poz-mly", "Latn", } m["bvf"] = { "Boor", 56250, "cdc-est", "Latn", } m["bvg"] = { "Bonkeng", 34958, "bnt-bbo", "Latn", } m["bvh"] = { "Bure", 56294, "cdc-wst", "Latn", } m["bvi"] = { "Belanda Viri", 35247, "nic-ser", "Latn", } m["bvj"] = { "Baan", 3515067, "nic-ogo", "Latn", } m["bvk"] = { "Bukat", 4986814, "poz-bnn", "Latn", } m["bvl"] = { "Bolivian Sign Language", 1783590, "sgn-asl", "Latn", -- when documented } m["bvm"] = { "Bamunka", 34882, "nic-rnn", "Latn", } m["bvn"] = { "Buna", 3450516, "paa-mar", "Latn", } m["bvo"] = { "Bolgo", 35038, "alv-bua", "Latn", } m["bvp"] = { "Bumang", 4997235, "mkh-pal", } m["bvq"] = { "Birri", 56514, "csu-bkr", "Latn", } m["bvr"] = { "Burarra", 4998124, "aus-arn", "Latn", } m["bvt"] = { "Bati (Indonesia)", 4869253, "poz-cma", "Latn", } m["bvu"] = { "Bukit Malay", 9230148, "poz-mly", "Latn", } m["bvv"] = { "Baniva", 3515198, "awd", "Latn", } m["bvw"] = { "Boga", 56262, "cdc-cbm", "Latn", } m["bvx"] = { "Babole", 35180, "bnt-ngn", "Latn", } m["bvy"] = { "Baybayanon", 16839275, "phi", "Latn", } m["bvz"] = { "Bauzi", 56360, "paa-egb", "Latn", } m["bwa"] = { "Bwatoo", 9232446, "poz-cln", "Latn", } m["bwb"] = { "Namosi-Naitasiri-Serua", 3130290, "poz-pcc", "Latn", } m["bwc"] = { "Bwile", 3447440, "bnt-sbi", "Latn", } m["bwd"] = { "Bwaidoka", 2929111, "poz-ocw", "Latn", } m["bwe"] = { "Bwe Karen", 56994, "kar", "Mymr, Latn", } m["bwf"] = { "Boselewa", 4947229, "poz-ocw", "Latn", } m["bwg"] = { "Barwe", 8826802, "bnt-sna", "Latn", } m["bwh"] = { "Bishuo", 34973, "nic-fru", "Latn", } m["bwi"] = { "Baniwa", 3501735, "awd-nwk", "Latn", } m["bwj"] = { "Láá Láá Bwamu", 11017275, "nic-bwa", "Latn", } m["bwk"] = { "Bauwaki", 4873607, "paa-mal", "Latn", } m["bwl"] = { "Bwela", 5003678, "bnt-bun", "Latn", } m["bwm"] = { "Biwat", 56352, "paa-yua", "Latn", } m["bwn"] = { "Wunai Bunu", 56452, "hmn", } m["bwo"] = { "Shinasha", 56260, "omv-gon", "Latn", } m["bwp"] = { "Lower Mandobo", 12636155, "ngf-dum", "Latn", } m["bwq"] = { "Southern Bobo", 11001714, "dmn-snb", "Latn", } m["bwr"] = { "Bura", 56552, "cdc-cbm", "Latn", } m["bws"] = { "Bomboma", 9229429, "bnt-bun", "Latn", } m["bwt"] = { "Bafaw", 34853, "bnt-bbo", "Latn", } m["bwu"] = { "Buli (Ghana)", 35085, "nic-buk", "Latn", } m["bww"] = { "Bwa", 3515058, "bnt-bta", "Latn", } m["bwx"] = { "Bu-Nao Bunu", 56411, "hmn", "Latn", } m["bwy"] = { "Cwi Bwamu", 11150714, "nic-bwa", "Latn", } m["bwz"] = { "Bwisi", 35067, "bnt-sir", "Latn", } m["bxa"] = { "Bauro", 2892068, "poz-sls", "Latn", } m["bxb"] = { "Belanda Bor", 56678, "sdv-lon", "Latn", } m["bxc"] = { "Molengue", 13345, "bnt-kel", "Latn", } m["bxd"] = { "Pela", 57000, "tbq-brm", } m["bxe"] = { "Ongota", 36344, "qfa-unc", -- moribund, no academic consensus on classification; might be an isolate "Latn", } m["bxf"] = { "Bilur", 2903788, "poz-ocw", "Latn", } m["bxg"] = { "Bangala", 34989, "bnt-bmo", "Latn", } m["bxh"] = { "Buhutu", 4986329, "poz-ocw", "Latn", } m["bxi"] = { "Pirlatapa", 10632195, "aus-kar", "Latn", } m["bxj"] = { "Bayungu", 10427485, "aus-psw", "Latn", } m["bxk"] = { "Bukusu", 32930, "bnt-msl", "Latn", } m["bxl"] = { "Jalkunan", 11009787, "dmn-jje", "Latn", } m["bxn"] = { "Burduna", 4998313, "aus-psw", "Latn", } m["bxo"] = { "Barikanchi", 3450802, "crp", "Latn", ancestors = "ha", } m["bxp"] = { "Bebil", 34941, "bnt-btb", "Latn", } m["bxq"] = { "Beele", 56238, "cdc-wst", "Latn", } m["bxs"] = { "Busam", 35189, "nic-grs", "Latn", } m["bxv"] = { "Berakou", 56796, "csu-bgr", "Latn", } m["bxw"] = { "Banka", 3438402, "dmn-smg", "Latn", } m["bxz"] = { "Binahari", 4913840, "paa-mal", "Latn", } m["bya"] = { "Palawan Batak", 3450443, "phi", "Tagb", } m["byb"] = { "Bikya", 33257, "nic-fru", "Latn", } m["byc"] = { "Ubaghara", 36625, "nic-ucn", "Latn", } m["byd"] = { "Benyadu'", 11173588, "day", "Latn", } m["bye"] = { "Pouye", 7235814, "paa-sep", "Latn", } m["byf"] = { "Bete", 32932, "nic-ykb", "Latn", } m["byg"] = { "Baygo", 56836, "sdv-daj", "Latn", } m["byh"] = { "Bujhyal", 56317, "sit-gma", "Deva", } m["byi"] = { "Buyu", 5003401, "bnt-nyb", "Latn", } m["byj"] = { "Binawa", 4913807, "nic-kau", "Latn", } m["byk"] = { "Biao", 4902547, "qfa-tak", "Latn", -- also Hani? } m["byl"] = { "Bayono", 3503856, "paa-baa", "Latn", } m["bym"] = { "Bidyara", 8842355, "aus-pam", "Latn", } m["byn"] = { "Blin", 56491, "cus-cen", "Ethi, Latn", translit = {Ethi = "Ethi-translit"}, } m["byo"] = { "Biyo", 56848, "tbq-bka", "Latn, Hani", sort_key = {Hani = "Hani-sortkey"}, } m["byp"] = { "Bumaji", 4997234, "nic-ben", "Latn", } m["byq"] = { "Basay", 716647, "map", "Latn", } m["byr"] = { "Baruya", 3450812, "ngf-bsi", "Latn", } m["bys"] = { "Burak", 4998097, "alv-bwj", "Latn", } m["byt"] = { "Berti", 35008, "ssa-sah", "Latn", } m["byv"] = { "Medumba", 36019, "bai", "Latn", } m["byw"] = { "Belhariya", 32961, "sit-kie", "Deva", } m["byx"] = { "Qaqet", 3503009, "paa-bai", "Latn", } m["byz"] = { "Banaro", 56858, "paa-ram", "Latn", } m["bza"] = { "Bandi", 34912, "dmn-msw", "Latn", } m["bzb"] = { "Andio", 4754487, "poz-slb", "Latn", } m["bzd"] = { "Bribri", 28400, "cba", "Latn", } m["bze"] = { "Jenaama Bozo", 10950633, "dmn-snb", "Latn", } m["bzf"] = { "Boikin", 56829, "paa-ndu", "Latn", } m["bzg"] = { "Babuza", 716615, "map", "Latn", } m["bzh"] = { "Mapos Buang", 2927370, "poz-ocw", "Latn", } m["bzi"] = { "Bisu", 56852, "tbq-bis", "Latn, Thai", sort_key = {Thai = "Thai-sortkey"}, } m["bzj"] = { "Belizean Creole", 1363055, "crp", "Latn", ancestors = "en", } m["bzk"] = { "Nicaraguan Creole", 3504097, "crp", "Latn", ancestors = "en", } m["bzl"] = { -- supposedly also called "Bolano", but I can find no evidence of that "Boano (Sulawesi)", 4931258, "poz", "Latn", } m["bzm"] = { "Bolondo", 35071, "bnt-bun", "Latn", } m["bzn"] = { "Boano (Maluku)", 4931255, "poz-cma", "Latn", } m["bzo"] = { "Bozaba", 4952785, "bnt-ngn", "Latn", } m["bzp"] = { "Kemberano", 12634399, "ngf-sbh", "Latn", } m["bzq"] = { "Buli (Indonesia)", 2927952, "poz-hce", "Latn", } m["bzr"] = { "Biri", 4087011, "aus-pam", "Latn", } m["bzs"] = { "Brazilian Sign Language", 3436689, "sgn", "Latn", } m["bzu"] = { "Burmeso", 56746, "qfa-dis", -- isolate in Glottolog, Wurm and Foley; in East Bird's Head-Sentani fmaily by Ross "Latn", } m["bzv"] = { "Bebe", 34977, "nic-bbe", "Latn", } m["bzw"] = { "Basa", 34898, "nic-bas", "Latn", } m["bzx"] = { "Hainyaxo Bozo", 11159536, "dmn-snb", "Latn", } m["bzy"] = { "Obanliku", 36276, "nic-ben", "Latn", } m["bzz"] = { "Evant", 35259, "nic-tvc", "Latn", } return require("Module:languages").finalizeData(m, "language") 5w6xyntknm1rbxwpcmbgibs7le024dj मॉड्यूल:languages/data 828 304574 487604 477424 2026-09-01T18:12:21Z SM7 6218 updating...BIG 487604 Scribunto text/plain local export = {} -- We can't use mw.loadData() on [[Module:languages/chars]] because [[Module:languages/data]] itself is sometimes loaded -- using mw.loadData(), and calling mw.loadData() on [[Module:languages/chars]] will insert metatables into the -- character tables, which the second mw.loadData() will choke on. local m_chars = require("Module:languages/chars") local u = require("Module:string/char") local c = m_chars.chars export.chars = c local p = m_chars.puaChars export.puaChars = p local cs = m_chars.chars_substitutions export.chars_substitutions = cs -- FIXME! Many of the script-specific values below can be moved to [[Module:scripts/data]] to serve as script-wide -- fallback values instead of specifying them for each language using the script. local s = {} -- These values are placed here to make it possible to synchronise a group of languages without the need for a dedicated function module. -- cau do local cau_remove_diacritics = c.grave .. c.acute .. c.macron local cau_from = {"[IlΙІӀᴴ]"} local cau_to = {{ ["l"] = "ӏ", ["Ι"] = "ӏ", ["І"] = "ӏ", ["Ӏ"] = "ӏ", ["ᴴ"] = "ᵸ", }} s["cau-Cyrl-displaytext"] = { from = cau_from, to = cau_to, } s["cau-Cyrl-stripdiacritics"] = { remove_diacritics = cau_remove_diacritics, from = cau_from, to = cau_to, } s["cau-Latn-stripdiacritics"] = {remove_diacritics = cau_remove_diacritics} end s["itc-Latn-displaytext"] = { from = {c.caron}, to = {c.breve}, } s["itc-Latn-stripdiacritics"] = {remove_diacritics = c.macron .. c.breve .. c.diaer .. c.caron .. c.dinvbreve} s["itc-Latn-sortkey"] = { remove_diacritics = c.circ .. c.tilde .. c.macron .. c.breve .. c.diaer .. c.caron .. c.zigzag .. c.dmacron .. c.dtilde .. c.dinvbreve .. c.small_a .. c.small_e .. c.small_i .. c.small_o .. c.small_u, -- Chiefly medieval abbreviations. from = {"ᵃ", "æ", "[đꝱꟈ]", "ᵉ", "ⁱ", "ꝁ", "[ƚꝉꝲ]", "ꝳ", "ꝴ", "[ꝋᵒ]", "œ", "[ꝑꝓꝕ]", "[ꝗꝙ]", "[ꝛꝵꝶꝝ]", "[ꟊˢ]", "[ꝷᵗ]", "ᵘ", "ꝟ", "⁊"}, to = {"a", "ae", "d", "e", "i", "k", "l", "m", "n", "o", "oe", "p", "q", "r", "s", "t", "u", "v", "&"} } s["Jpan-standardchars"] = -- exclude ぢづヂヅ "ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちっつてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろん" .. "ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチッツテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロン" local jpx_displaytext = { from = {"~", "="}, to = {"〜", "゠"} } s["jpx-displaytext"] = { Jpan = jpx_displaytext, Hani = jpx_displaytext, Hrkt = jpx_displaytext, Hira = jpx_displaytext, Kana = jpx_displaytext -- not Latn or Brai } s["jpx-stripdiacritics"] = s["jpx-displaytext"] s["jpx-sortkey"] = { Jpan = "Jpan-sortkey", Hani = "Hani-sortkey", Hrkt = "Hira-sortkey", -- sort general kana by normalizing to Hira Hira = "Hira-sortkey", Kana = "Kana-sortkey", Latn = {remove_diacritics = c.tilde .. c.macron .. c.diaer} } s["jpx-translit"] = { Hrkt = "Hrkt-translit", Hira = "Hrkt-translit", Kana = "Hrkt-translit" } s["roa-oil-sortkey"] = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.ringabove .. c.cedilla .. "'", from = {"æ", "œ", "·"}, to = {"ae", "oe", " "} } s["wen-sortkey"] = { from = {"ch", "[lłßꞩẜ]", "dz[" .. c.caron .. c.acute .. "]", "[bcefmnoprswz][" .. c.caron .. c.acute .. c.dotabove .. "]"}, to = { "h" .. p[1], { ["l"] = "l" .. p[1], ["ł"] = "l", ["ß"] = "s", ["ꞩ"] = "š", ["ẜ"] = "š", }, { ["dz" .. c.caron] = "d" .. p[1], ["dz" .. c.acute] = "d" .. p[2] }, { ["b" .. c.acute] = "b" .. p[1], ["c" .. c.caron] = "c" .. p[1], ["c" .. c.acute] = "c" .. p[2], ["e" .. c.caron] = "e" .. p[1], ["e" .. c.dotabove] = "e" .. p[1], ["f" .. c.acute] = "f" .. p[1], ["m" .. c.acute] = "m" .. p[1], ["n" .. c.acute] = "n" .. p[1], ["o" .. c.acute] = "o" .. p[1], ["p" .. c.acute] = "p" .. p[1], ["r" .. c.caron] = "r" .. p[1], ["r" .. c.acute] = "r" .. p[2], ["s" .. c.caron] = "s" .. p[1], ["s" .. c.acute] = "s" .. p[2], ["w" .. c.acute] = "w" .. p[1], ["z" .. c.caron] = "z" .. p[1], ["z" .. c.acute] = "z" .. p[2], } } } -- Myanmar dotted form : https://www.unicode.org/Public/UNIDATA/StandardizedVariants.txt s["aio-displaytext"] = { from = {"([ကဂငတထပမယလဝဢေၵၸၺႀꩠꩡꩢꩣꩤꩥꩦꩫꩬꩯꩺ])"}, to = {"%1" .. c.VS01} } s["aio-stripdiacritics"] = { remove_diacritics = c.VS01, } s["phk-displaytext"] = s["aio-displaytext"] s["phk-stripdiacritics"] = s["aio-stripdiacritics"] s["kht-displaytext"] = s["aio-displaytext"] s["kht-stripdiacritics"] = s["aio-stripdiacritics"] export.shared = s --[==[ var: Short-term solution to override the standard substitution process, by forcing the module to substitute the entire text in one pass, if "cont" is given. This results in any PUA characters that are used as stand-ins for formatting being handled by the language-specific substitution process, which is usually undesirable. If the value is "none" then the formatting tags do not get turned into PUA characters in the first place. This override is provided for languages which use formatting between strings of text which might need to interact with each other (e.g. Korean 값이 transliterates as "gaps-i", but [[값]] has the formatting '''값'''[[-이]]. The normal process would split the text at the second '''.) ]==] export.substitution = { ["gmy"] = "none", ["ja"] = "cont", ["jje"] = "cont", ["ket"] = "none", ["ko"] = "cont", ["ko-ear"] = "cont", ["ru"] = "cont", ["th-new"] = "cont", ["sa"] = "cont", ["zkt"] = "cont", } --[==[ var: Code aliases. The left side is the alias and the right side is the canonical code. NOTE: These are gradually being deprecated, so should not be added to on a permanent basis. Temporary additions are permitted under reasonable circumstances (e.g. to facilitate changing a language's code). When an alias is no longer used, it should be removed. Aliases in this table are tracked at [[Wiktionary:Tracking/languages/LANG]]; see e.g. [[Special:WhatLinksHere/Wiktionary:Tracking/languages/VL.]] for the `VL.` alias. ]==] export.aliases = { ["EL."] = "la-ecc", ["LL."] = "la-lat", ["ML."] = "la-med", ["NL."] = "la-new", ["VL."] = "la-vul", ["grc-epc"] = "grc-epi", ["nds-DE"] = "nds-de", ["nds-NL"] = "nds-nl", ["roa-oan"] = "roa-ona", ["sa-cls"] = "cls", ["sa-ved"] = "vsn", } --[==[ var: Codes which are tracked. Note that all aliases listed above are also tracked, so should not be duplicated here. Tracking uses the same mechanism described above in the comment above `export.aliases`. ]==] export.track = { -- Codes duplicated between full and etymology-only languages. ["lzh-lit"] = true, ["lzh"] = true, -- Languages actively being converted to families. ["bh"] = true, -- inc-bih ["nan"] = true, -- zhx-nan -- Transcription scheme being changed. ["trk-pro"] = true, } return export sybykcugwy6ckm7y09iyst74xywteqw मॉड्यूल:languages/data/3/m 828 304577 487607 477429 2026-09-01T18:16:46Z SM7 6218 updating... 487607 Scribunto text/plain local m_langdata = require("Module:languages/data") -- Loaded on demand, as it may not be needed (depending on the data). local function u(...) u = require("Module:string utilities").char return u(...) end local c = m_langdata.chars local p = m_langdata.puaChars local s = m_langdata.shared local m = {} m["maa"] = { "San Jerónimo Tecóatl Mazatec", 7692927, "omq-maz", "Latn", } m["mab"] = { "Yutanduchi Mixtec", 12645448, "omq-mxt", "Latn", } m["mad"] = { "Madurese", 36213, "poz-msa", "Latn, Java", } m["mae"] = { "Bo-Rukul", 34967, "nic-ple", "Latn", } m["maf"] = { "Mafa", 35819, "cdc-cbm", "Latn", } m["mag"] = { "Magahi", -- Not to be confused with Magadhi Prakrit (pra-mag) 33728, "inc-bih", "Deva, Kthi", translit = { Deva = "bho-translit", Kthi = "bho-Kthi-translit", }, } m["mai"] = { "Maithili", 36109, "inc-bih", "Deva, Tirh, Kthi, Newa", translit = { Deva = "mai-translit", Tirh = "mai-Tirh-translit", Kthi = "bho-Kthi-translit", }, } m["maj"] = { "Jalapa de Díaz Mazatec", 3915999, "omq-maz", "Latn", } m["mak"] = { "Makasar", 33643, "poz-ssw", "Latn, Bugi, Maka", } m["mam"] = { "Mam", 33467, "myn", "Latn", } m["man"] = { "Mandingo", 35772, "dmn-man", "Latn", } m["maq"] = { "Chiquihuitlán Mazatec", 5101757, "omq-maz", "Latn", } m["mas"] = { "Maasai", 35787, "sdv-lma", "Latn", } m["mat"] = { "Matlatzinca", 12953704, "omq", "Latn", } m["mau"] = { "Huautla Mazatec", 36230, "omq-maz", "Latn", } m["mav"] = { "Sateré-Mawé", 6794475, "tup", "Latn", } m["maw"] = { "Mampruli", 35804, "nic-wov", "Latn", } m["max"] = { "North Moluccan Malay", 7056136, "crp", "Latn", ancestors = "ms", } m["maz"] = { "Central Mazahua", 36228, "oto", "Latn", } m["mba"] = { "Higaonon", 5753411, "mno", "Latn", } m["mbb"] = { "Western Bukidnon Manobo", 7987643, "mno", "Latn", } m["mbc"] = { "Macushi", 56633, "sai-pem", "Latn", } m["mbd"] = { "Dibabawon Manobo", 18755523, "mno", "Latn", } m["mbe"] = { "Molale", 3319444, "nai-plp", "Latn", } m["mbf"] = { "Baba Malay", 18642798, "crp", "Latn", ancestors = "ms", } m["mbh"] = { "Mangseng", 6749147, "poz-ocw", "Latn", } m["mbi"] = { "Ilianen Manobo", 14916911, "mno", "Latn", } m["mbj"] = { "Nadëb", 3335011, "sai-nad", "Latn", } m["mbk"] = { "Malol", 6744477, "poz-ocw", "Latn", } m["mbl"] = { "Maxakalí", 3029682, "sai-mje", "Latn", } m["mbm"] = { "Ombamba", 36407, "bnt-mbt", "Latn", } m["mbn"] = { "Macaguán", 3273980, "sai-guh", "Latn", } m["mbo"] = { -- is, like 'bqz', 'bsi' and 'bss', a dialect of Manenguba "Mbo (Cameroon)", 36011, "bnt-mne", "Latn", } m["mbp"] = { "Wiwa", 3012604, "cba", "Latn", } m["mbq"] = { "Maisin", 3448149, nil, "Latn", } m["mbr"] = { "Nukak Makú", 3346228, "sai-nad", "Latn", } m["mbs"] = { "Sarangani Manobo", 7423093, "mno", "Latn", } m["mbt"] = { "Matigsalug Manobo", 6787447, "mno", "Latn", } m["mbu"] = { "Mbula-Bwazza", 3913324, "nic-jrn", "Latn", } m["mbv"] = { "Mbulungish", 36003, "alv-nal", "Latn", } m["mbw"] = { "Maring", 3293280, "ngf-jim", "Latn", } m["mbx"] = { "Mari (Sepik)", 6760942, "paa-sep", "Latn", } m["mby"] = { "Memoni", 4180871, "inc-snd", "Gujr, Aran", } m["mbz"] = { "Amoltepec Mixtec", 13583504, "omq-mxt", "Latn", } m["mca"] = { "Maca", 3281043, "sai-mtc", "Latn", } m["mcb"] = { "Machiguenga", 3915441, "awd", "Latn", } m["mcc"] = { "Bitur", 4919173, "paa-tir", "Latn", } m["mcd"] = { "Sharanahua", 12953881, "sai-pan", "Latn", } m["mce"] = { "Itundujia Mixtec", 12953727, "omq-mxt", "Latn", } m["mcf"] = { "Matsés", 2981620, "sai-pan", "Latn", } m["mcg"] = { "Mapoyo", 56946, "sai-map", "Latn", } m["mch"] = { "Ye'kwana", 3082027, "sai-car", "Latn", sort_key = { remove_diacritics = "%-%s", from = {"'", "ñ", "ö", "sh", "ü"}, to = {"’", "n" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1]} } } m["mci"] = { "Mese", 6821190, "ngf-san", "Latn", } m["mcj"] = { "Mvanip", 3913281, "nic-mmb", "Latn", } m["mck"] = { "Mbunda", 34170, "bnt-clu", "Latn", } m["mcl"] = { "Macaguaje", 6722435, "sai-tuc", "Latn", } m["mcm"] = { "Kristang", 2669169, "crp", "Latn", ancestors = "pt", } m["mcn"] = { "Masana", 56668, "cdc-mas", } m["mco"] = { "Coatlán Mixe", 25559716, "nai-miz", "Latn", } m["mcp"] = { "Makaa", 35803, "bnt-mka", "Latn", } m["mcq"] = { "Ese", 5397551, "ngf-koi", "Latn", } m["mcr"] = { "Menya", 11732444, "ngf-kme", "Latn", } m["mcs"] = { "Mambai", 6748872, "alv-mbm", "Latn", } m["mcu"] = { "Cameroon Mambila", 19359039, "nic-mmb", "Latn", } -- mcv (Minanibai) merged into ffi (Foia Foia) per Glottolog m["mcw"] = { "Mawa", 3441333, "cdc-est", "Latn", } m["mcx"] = { "Mpiemo", 35908, "bnt-bek", "Latn", } m["mcy"] = { "South Watut", 12953293, "poz-ocw", "Latn", } m["mcz"] = { "Mawan", 11732429, "ngf-han", "Latn", } m["mda"] = { "Mada (Nigeria)", 3915843, "nic-nin", "Latn", } m["mdb"] = { "Morigi", 6912195, "paa-kiw", "Latn", } m["mdc"] = { "Male", 6742927, "ngf-min", "Latn", } m["mdd"] = { "Mbum", 36170, "alv-mbm", "Latn", } m["mde"] = { "Bura Mabang", 35860, "ssa", "Arab, Latn", } m["mdf"] = { "Moksha", 13343, "urj-mdv", "Cyrl", translit = "mdf-translit", strip_diacritics = {remove_diacritics = c.acute}, override_translit = true, sort_key = "mdf-sortkey", } m["mdg"] = { "Massalat", 759984, nil, "Latn", } m["mdh"] = { "Maguindanao", 33717, "phi", "Latn, Arab", } m["mdi"] = { "Mamvu", 3033594, "csu-mle", "Latn", } m["mdj"] = { "Mangbetu", 56327, "csu-maa", "Latn", } m["mdk"] = { "Mangbutu", 6748877, "csu-mle", "Latn", } m["mdl"] = { "Maltese Sign Language", 6744816, "sgn", } m["mdm"] = { "Mayogo", 6797580, "nic-nke", "Latn", } m["mdn"] = { "Mbati", 36165, "bnt-ngn", "Latn", } m["mdp"] = { "Mbala", 6799583, "bnt-pen", "Latn", } m["mdq"] = { "Mbole", 6799727, "bnt-mbe", "Latn", } m["mdr"] = { "Mandar", 35995, "poz-ssw", "Bugi, Latn", } m["mds"] = { "Maria", 3448673, "paa-man", "Latn", } m["mdt"] = { "Mbere", 36062, "bnt-mbt", "Latn", } m["mdu"] = { "Mboko", 36058, "bnt-mbo", "Latn", } m["mdv"] = { "Santa Lucía Monteverde Mixtec", 12953722, "omq-mxt", "Latn", } m["mdw"] = { "Mbosi", 36035, "bnt-mbo", "Latn", } m["mdx"] = { "Dizin", 35313, "omv-diz", "Ethi, Latn", } m["mdy"] = { "Maale", 795327, "omv-ome", "Latn", } m["mdz"] = { "Suruí Do Pará", 10322149, "tup-gua", "Latn", } m["mea"] = { "Menka", 36078, "nic-grs", "Latn", } m["meb"] = { "Ikobi-Mena", 11732241, "paa-tki", "Latn", } m["mec"] = { "Mara", 6772774, } m["med"] = { "Melpa", 36166, "ngf-hag", "Latn", } m["mee"] = { "Mengen", 3305831, "poz-ocw", "Latn", } m["mef"] = { "Megam", 6808589, } m["meh"] = { "Southwestern Tlaxiaco Mixtec", 7070686, "omq-mxt", "Latn", } m["mei"] = { "Midob", 36007, "nub", "Latn", } m["mej"] = { "Meyah", 11732436, "paa-ebh", "Latn", } m["mek"] = { "Mekeo", 3304803, "poz-ocw", "Latn", } m["mel"] = { "Central Melanau", 18638319, "poz-swa", "Latn", } m["mem"] = { "Mangala", 6748664, } m["men"] = { "Mende (Sierra Leone)", 1478672, "dmn-msw", "Latn, Mend", } m["meo"] = { "Kedah Malay", 4925684, "poz-mly", "Latn, Arab, Thai", strip_diacritics = { from = {u(0xF70F)}, to = {"ญ"} }, sort_key = {Thai = "Thai-sortkey"}, } m["mep"] = { "Miriwoong", 3111847, "aus-jar", "Latn", } m["meq"] = { "Merey", 3502314, "cdc-cbm", "Latn", } m["mer"] = { "Meru", 13313, "bnt-kka", "Latn", } m["mes"] = { "Masmaje", 3440448, } m["met"] = { "Mato", 3299190, "poz-ocw", "Latn", } m["meu"] = { "Motu", 33516, "poz-ocw", "Latn", } m["mev"] = { "Mano", 3913286, "dmn-mda", "Latn", } m["mew"] = { "Maaka", 3438764, "cdc-wst", "Latn", } m["mey"] = { "Hassaniya Arabic", 56231, "sem-arb", "Arab", } m["mez"] = { "Menominee", 13363, "alg", "Latn", sort_key = {remove_diacritics = "·"}, } m["mfa"] = { "Pattani Malay", 1199751, "poz-mly", "Latn, Arab, Thai", strip_diacritics = { from = {u(0xF70F)}, to = {"ญ"} }, sort_key = {Thai = "Thai-sortkey"}, } m["mfb"] = { "Bangka", 3258818, "poz-mly", "Latn, Arab", } m["mfc"] = { "Mba", 4286464, "nic-mbc", "Latn", } m["mfd"] = { "Mendankwe-Nkwen", 11129537, "nic-nge", "Latn", } m["mfe"] = { "Mauritian Creole", 33661, "crp", "Latn", ancestors = "fr", sort_key = s["roa-oil-sortkey"], } m["mff"] = { "Naki", 36083, "nic-bbe", "Latn", } m["mfg"] = { "Mixifore", 3914478, "dmn-mok", } m["mfh"] = { "Matal", 3501751, "cdc-cbm", "Latn", } m["mfi"] = { "Wandala", 3441249, "cdc-cbm", "Latn", } m["mfj"] = { "Mefele", 3501871, "cdc-cbm", "Latn", } m["mfk"] = { "North Mofu", 56303, "cdc-cbm", "Latn", } m["mfl"] = { "Putai", 56291, "cdc-cbm", "Latn", } m["mfm"] = { "Marghi South", 56248, } m["mfn"] = { "Cross River Mbembe", 3915395, "nic-uce", "Latn", } m["mfo"] = { "Mbe", 36075, "nic-eko", "Latn", } m["mfp"] = { "Makassar Malay", 12952776, "qfa-mix", "Latn", ancestors = "ms, mak" } m["mfq"] = { "Moba", 19921578, "nic-grm", "Latn", } m["mfr"] = { "Marrithiyel", 6773014, "aus-dal", "Latn", } m["mfs"] = { "Mexican Sign Language", 3915511, "sgn", "Latn", -- when documented } m["mft"] = { "Mokerang", 3319387, "poz-aay", "Latn", } m["mfu"] = { "Mbwela", 11004988, "bnt-clu", ancestors = "lch", } m["mfv"] = { "Mandjak", 35822, "alv-pap", } m["mfw"] = { "Mulaha", 6933720, "paa-kwa", "Latn", } m["mfx"] = { "Melo", 6813268, "omv-nom", } m["mfy"] = { "Mayo", 56729, "azc-trc", "Latn", sort_key = {remove_diacritics = c.acute}, } m["mfz"] = { "Mabaan", 20526385, "sdv", "Latn", } m["mga"] = { "Middle Irish", 36116, "cel-gae", "Latn", ancestors = "sga", strip_diacritics = {remove_diacritics = c.dotabove .. c.diaer .. "·"}, sort_key = "mga-sortkey", } m["mgb"] = { "Mararit", 56359, "sdv-tmn", "Latn", } m["mgc"] = { "Morokodo", 6913216, "csu-bbk", "Latn", } m["mgd"] = { "Moru", 6915014, "csu-mma", "Latn, Arab", } m["mge"] = { "Mango", 713659, "csu-sar", "Latn", } m["mgf"] = { "Maklew", 6739816, "paa-bul", "Latn", } m["mgg"] = { "Mpongmpong", 35924, "bnt-bek", } m["mgh"] = { "Makhuwa-Meetto", 33604, "bnt-mak", "Latn", ancestors = "vmw", } m["mgi"] = { "Jili", 3914497, "nic-pls", } m["mgj"] = { "Abureni", 3441256, "nic-cde", "Latn", } m["mgk"] = { "Mawes", 6794395, "qfa-dis", -- Papuan; isolate in Glottolog, Foley (2018) and Hammarström (2010); in the Tor-Kwerba languages per -- Usher (2020) "Latn", } m["mgl"] = { "Maleu-Kilenge", 3281884, } m["mgm"] = { "Mambae", 35774, "poz-tim", "Latn", } m["mgn"] = { "Mbangi", 11017443, "nic-ngd", "Latn", } m["mgo"] = { "Meta'", 36054, "nic-mom", "Latn", } m["mgp"] = { "Eastern Magar", 12952758, "sit-gma", "Deva, Latn", } m["mgq"] = { "Malila", 6743679, "bnt-mby", "Latn", } m["mgr"] = { "Mambwe-Lungu", 626210, "bnt-mwi", "Latn", } m["mgs"] = { "Manda (Tanzania)", 16939267, "bnt-bki", } m["mgt"] = { "Mwakai", 11260674, "paa-wke", "Latn", } m["mgu"] = { "Mailu", 3278246, "paa-mal", "Latn", } m["mgv"] = { "Matengo", 6786446, "bnt-mbi", "Latn", } m["mgw"] = { "Matumbi", 6791974, "bnt-mbi", "Latn", } m["mgy"] = { "Mbunga", 6799817, "bnt-kil", } m["mgz"] = { "Mbugwe", 3426367, "bnt-mra", } m["mha"] = { "Manda (India)", 56760, "dra-kki", "Orya", translit = "kxv-translit", } m["mhb"] = { "Mahongwe", 35816, "bnt-kel", } m["mhc"] = { "Mocho", 1941682, "myn", } m["mhd"] = { "Mbugu", 36152, "qfa-mix", "Latn", ancestors = "asa", } m["mhe"] = { "Besisi", 2742262, "mkh-asl", "Latn", } m["mhf"] = { "Mamaa", 6745346, "ngf-era", "Latn", } m["mhg"] = { "Marrgu", 6772812, } m["mhi"] = { "Ma'di", 56670, "csu-mma", "Latn", strip_diacritics = {remove_diacritics = c.acute .. c.grave .. c.tilde .. c.dotbelow}, } m["mhj"] = { "Mogholi", 13336, "xgn", "Arab, Latn", translit = "fa-cls-translit", strip_diacritics = { Arab = "ar-stripdiacritics", }, } m["mhk"] = { "Mungaka", 36068, "nic-nun", } m["mhl"] = { "Mauwake", 6794095, "ngf-kum", "Latn", } m["mhm"] = { "Makhuwa-Moniga", 6900145, "bnt-mak", } m["mhn"] = { "Mòcheno", 268130, "gmw-hgm", "Latn", ancestors = "bar", sort_key = {remove_diacritics = c.grave}, } m["mho"] = { "Mashi", 10962737, "bnt-kav", "Latn", } m["mhp"] = { "Balinese Malay", 12473441, "crp", "Latn, Bali, Arab", } m["mhq"] = { "Mandan", 1957120, "sio", "Latn", } m["mhr"] = { "Eastern Mari", 3906614, "chm", "Cyrl", translit = "chm-translit", override_translit = true, strip_diacritics = {remove_diacritics = c.grave .. c.acute}, sort_key = { from = {"ё", "ҥ", "ӧ", "ӱ"}, to = {"е" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1]} } } m["mhs"] = { "Buru (Indonesia)", 2928650, "poz-cma", "Latn", } m["mht"] = { "Mandahuaca", 6747924, "awd-nwk", } m["mhu"] = { "Taraon", 56400, "sit-gsi", "Latn", } m["mhw"] = { "Mbukushu", 2691548, "bnt", "Latn", } m["mhx"] = { "Lhao Vo", 11149315, "tbq-brm", "Latn", } m["mhy"] = { "Ma'anyan", 2328761, "poz-bre", "Latn", } m["mhz"] = { "Mor (Austronesian)", 2122792, "poz-hce", "Latn", } m["mia"] = { "Miami", 56523, "alg", "Latn", } m["mib"] = { "Atatláhuca Mixtec", 32093046, "omq-mxt", "Latn", } m["mic"] = { "Mi'kmaq", 13321, "alg-eas", "Latn", } m["mid"] = { "Mandaic", 6991742, "sem-ase", "Mand", ancestors = "myz", translit = { Mand = "Mand-translit", }, strip_diacritics = { Mand = "Mand-stripdiacritics", } } m["mie"] = { "Ocotepec Mixtec", 25559575, "omq-mxt", "Latn", } m["mif"] = { "Mofu-Gudur", 1365132, "cdc-cbm", "Latn", } m["mig"] = { "San Miguel el Grande Mixtec", 12953719, "omq-mxt", "Latn", } m["mih"] = { "Chayuco Mixtec", 13583510, "omq-mxt", "Latn", } m["mii"] = { "Chigmecatitlán Mixtec", 12953724, "omq-mxt", "Latn", } m["mij"] = { "Mungbam", 34725, "nic-beb", "Latn", } m["mik"] = { "Mikasuki", 13316, "nai-mus", "Latn", } m["mil"] = { "Peñoles Mixtec", 42411307, "omq-mxt", "Latn", } m["mim"] = { "Alacatlatzala Mixtec", 14697894, "omq-mxt", "Latn", } m["min"] = { "Minangkabau", 13324, "poz-mly", "Latn, Arab", } m["mio"] = { "Pinotepa Nacional Mixtec", 7196415, "omq-mxt", "Latn", } m["mip"] = { "Apasco-Apoala Mixtec", 13583505, "omq-mxt", "Latn", } m["miq"] = { "Miskito", 1516803, "nai-min", "Latn", strip_diacritics = {remove_diacritics = c.circ}, } m["mir"] = { "Isthmus Mixe", 6088873, "nai-miz", "Latn", } m["mit"] = { "Southern Puebla Mixtec", 7570345, "omq-mxt", "Latn", } m["miu"] = { "Cacaloxtepec Mixtec", 12953723, "omq-mxt", "Latn", } m["miw"] = { "Akoye", 3327462, "ngf-taa", "Latn", } m["mix"] = { "Mixtepec Mixtec", 6884125, "omq-mxt", "Latn", } m["miy"] = { "Ayutla Mixtec", 13583508, "omq-mxt", "Latn", } m["miz"] = { "Coatzospan Mixtec", 3317290, "omq-mxt", "Latn", } m["mjb"] = { "Makalero", 35729, "paa-alp", "Latn", } m["mjc"] = { "San Juan Colorado Mixtec", 12953718, "omq-mxt", "Latn", } m["mjd"] = { "Northwest Maidu", 3198700, "nai-mdu", "Latn", } m["mje"] = { "Muskum", 3913334, } -- mjg "Monguor" is not recognized as a language, but it is a family code m["mji"] = { "Kim Mun", 1115317, "hmx-mie", "Latn", } m["mjj"] = { "Mawak", 11732427, "ngf-tib", "Latn", } m["mjk"] = { "Matukar", 6791963, "poz-ocw", "Latn", } m["mjl"] = { "Mandeali", 6747931, "him", "Deva, Takr", translit = "hi-translit", } m["mjm"] = { "Medebur", 6805227, "poz-ocw", "Latn", } m["mjn"] = { "Mebu", 6804364, "ngf-yup", "Latn", } m["mjo"] = { "Malankuravan", 14916887, "dra-mal", } m["mjp"] = { "Malapandaram", 10575729, "dra-tam", } m["mjq"] = { "Malaryan", 12952773, "dra-mal", } m["mjr"] = { "Malavedan", 12952775, "dra-mal", "Mlym", -- Mlym translit in [[Module:scripts/data]] } m["mjs"] = { "Miship", 3441264, "cdc-wst", "Latn", } m["mjt"] = { "Sawriya Paharia", 33907, "dra-mlo", "Beng, Deva", } m["mju"] = { "Manna-Dora", 10576453, "dra-tel", } m["mjv"] = { "Mannan", 3286037, "dra-tam", "Mlym, Taml", translit = { Taml = "ta-translit", }, -- Mlym translit in [[Module:scripts/data]] } m["mjw"] = { "Karbi", 56591, "tbq-kuk", "Latn", } m["mjx"] = { "Mahali", 12953686, "mun", } m["mjy"] = { "Mahican", 3182562, "alg-eas", "Latn", } m["mjz"] = { "Majhi", 6737786, "inc-bih", } m["mka"] = { "Mbre", 3450154, "nic", --unclassified within niger-congo tho } m["mkb"] = { "Mal Paharia", 6583595, "inc-eas", "Deva", } m["mkc"] = { "Siliput", 7515090, "paa-mam", "Latn", } m["mke"] = { "Mawchi", 21403317, } m["mkf"] = { "Miya", 43328, "cdc-wst", "Latn", } m["mkg"] = { "Mak (China)", 3280623, "qfa-kms", } m["mki"] = { "Dhatki", 32480, "raj", "Deva, Mahj, Arab", } m["mkj"] = { "Mokilese", 2335528, "poz-mic", "Latn", } m["mkk"] = { "Byep", 35052, "bnt-mka", } m["mkl"] = { "Mokole", 36047, "alv-yor", "Latn", } m["mkm"] = { "Moklen", 3319380, } m["mkn"] = { "Kupang Malay", 18458203, "crp", "Latn", } m["mko"] = { "Mingang Doso", 3915382, "alv-bwj", } m["mkp"] = { "Moikodi", 6894594, "ngf-yar", "Latn", } m["mkq"] = { "Bay Miwok", 3460957, "nai-utn", "Latn", } m["mkr"] = { "Malas", 11732402, "ngf-nad", "Latn", } m["mks"] = { "Silacayoapan Mixtec", 7514027, "omq-mxt", "Latn", } m["mkt"] = { "Vamale", 14916907, "poz-cln", "Latn", } m["mku"] = { "Konyanka Maninka", 11163298, "dmn-mnk", } m["mkv"] = { "Mav̋ea", 3073532, "poz-vnn", "Latn", } m["mkx"] = { "Cinamiguin Manobo", 12953697, "mno", "Latn", } m["mky"] = { "Taba", 3512690, "poz-hce", "Latn", } m["mkz"] = { "Makasae", 35782, "paa-eti", "Latn", } m["mla"] = { "Tamambo", 1153276, "poz-vnn", "Latn", } m["mlb"] = { "Mbule", 35843, "nic-ymb", "Latn", } m["mlc"] = { "Caolan", 3446682, "tai-cho", "Latn, Hani", sort_key = {Hani = "Hani-sortkey"}, } m["mle"] = { "Manambu", 11732406, "paa-nnd", "Latn", } m["mlf"] = { "Mal", 3281057, "mkh-khm", } m["mlh"] = { "Mape", 6753787, "ngf-kma", "Latn", } m["mli"] = { "Malimpung", 12473435, } m["mlj"] = { "Miltu", 3441310, } m["mlk"] = { "Ilwana", 6001357, "bnt-sab", } m["mll"] = { "Malua Bay", 6744946, "poz-vnc", "Latn", } m["mlm"] = { "Mulam", 3092284, "qfa-kms", "Latn", } m["mln"] = { "Malango", 3281522, "poz-sls", "Latn", } m["mlo"] = { "Mlomp", 36009, "alv-bak", } m["mlp"] = { "Bargam", 4860543, "ngf-mad", "Latn", } m["mlq"] = { "Western Maninkakan", 11028033, "dmn-wmn", } m["mlr"] = { "Vame", 3515088, "cdc-cbm", "Latn", } m["mls"] = { "Masalit", 56557, "ssa", } m["mlu"] = { "To'abaita", 36645, "poz-sls", "Latn", } m["mlv"] = { "Mwotlap", 2475538, "poz-vnn", "Latn", } m["mlw"] = { "Moloko", 1965222, "cdc-cbm", "Latn", } m["mlx"] = { "Malfaxal", 2157421, "poz-vnc", "Latn", } m["mlz"] = { "Malaynon", 18755512, "phi", } m["mma"] = { "Mama", 3913963, "nic-jrn", "Latn", } m["mmb"] = { "Momina", 6897297, } m["mmc"] = { "Michoacán Mazahua", 12953705, "oto", "Latn", } m["mmd"] = { "Maonan", 3092293, "qfa-kms", "Latn", } m["mme"] = { "Tirax", 3276286, "poz-vnc", "Latn", } m["mmf"] = { "Mundat", 56263, "cdc-wst", "Latn", } m["mmg"] = { "North Ambrym", 2842468, "poz-vnc", "Latn", } m["mmh"] = { "Mehináku", 3501838, "awd", "Latn", } m["mmi"] = { "Hember Avu", 6940113, "ngf-tib", "Latn", } m["mmj"] = { "Majhwar", 6737795, } m["mmk"] = { "Mukha-Dora", 6933447, } m["mml"] = { "Man Met", 3194984, "mkh-pal", } m["mmm"] = { "Maii", 6735599, "poz-vnc", "Latn", } m["mmn"] = { "Mamanwa", 3206623, "phi", "Latn", } m["mmo"] = { "Mangga Buang", 12952294, "poz-ocw", "Latn", } m["mmp"] = { "Musan", 2605703, "paa-amu", "Latn", } m["mmq"] = { "Aisi", 6940074, "ngf-ais", "Latn", } m["mmr"] = { "Western Xiangxi Miao", 3307901, "hmn", "Latn", } m["mmt"] = { "Malalamai", 3281496, "poz-ocw", "Latn", } m["mmu"] = { "Mmaala", 13123461, "nic-ymb", "Latn", } m["mmv"] = { "Miriti", 6873567, "sai-tuc", "Latn", } m["mmw"] = { "Emae", 3051961, "poz-pnp", "Latn", } m["mmx"] = { "Madak", 3275205, "poz-ocw", "Latn", } m["mmy"] = { "Migaama", 56259, "cdc-est", "Latn", } m["mmz"] = { "Mabaale", 11003249, "bnt-ngn", } m["mna"] = { "Mbula", 3303572, "poz-ocw", "Latn", } m["mnb"] = { "Muna", 6935584, "poz-mun", "Latn", } m["mnc"] = { "Manchu", 33638, "tuw-jrc", "mnc-Mong, Latn", ancestors = "juc", -- mnc-Mong translit in [[Module:scripts/data]] } m["mnd"] = { "Mondé", 6898840, "tup", "Latn", } m["mne"] = { "Naba", 760732, "csu-bgr", } m["mnf"] = { "Mundani", 35839, "nic-mom", "Latn", } m["mng"] = { "Eastern Mnong", 12953747, "mkh-ban", "Latn, Khmr", } m["mnh"] = { "Mono (Congo)", 33501, "bad-cnt", "Latn", } m["mni"] = { "Manipuri", 33868, "sit", "Mtei, Beng", ancestors = "omp", translit = {Mtei = "Mtei-translit"}, } m["mnj"] = { "Munji", 33639, "ira-mny", "Arab", } m["mnk"] = { "Mandinka", 33678, "dmn-wmn", "Latn, Arab, Nkoo", } m["mnl"] = { "Tiale", 6744350, "poz-vnn", "Latn", } m["mnm"] = { "Mapena", 11732415, "ngf-dag", "Latn", } m["mnn"] = { "Southern Mnong", 23857582, "mkh-ban", } m["mnp"] = { "Northern Min", 36457, "zhx-inm", "Hants", generate_forms = "zh-generateforms", translit = "zh-translit", sort_key = "Hani-sortkey", } m["mnq"] = { "Minriq", 2742268, "mkh-asl", "Latn", } m["mnr"] = { "Mono (California)", 33591, "azc-num", "Latn", } m["mnt"] = { "Maykulan", 3915696, "aus-pam", "Latn", } m["mnu"] = { "Mer", 6817854, "paa-mai", "Latn", } m["mnv"] = { "Rennellese", 3397346, "poz-pnp", "Latn", } m["mnw"] = { "Mon", 13349, "mkh-mnc", "Mymr", ancestors = "mkh-mmn", sort_key = { from = {"ျ", "ြ", "ွ", "ှ", "ၞ", "ၟ", "ၠ", "ၚ", "ဿ"}, to = {"္ယ", "္ရ", "္ဝ", "္ဟ", "္န", "္မ", "္လ", "င", "သ္သ"} }, } m["mnx"] = { "Sougb", 3507964, "paa-ebh", "Latn", } m["mny"] = { "Manyawa", 11002622, "bnt-mak", ancestors = "vmw", } m["mnz"] = { "Moni", 6899857, "ngf-pan", "Latn", } m["moa"] = { "Mwan", 3320111, "dmn-nbe", "Latn", } m["moc"] = { "Mocoví", 3027906, "sai-guc", "Latn", } m["mod"] = { "Mobilian", 13333, "crp", "Latn", ancestors = "cho, cic", } m["moe"] = { "Montagnais", 13351, "alg", "Latn", ancestors = "cr", strip_diacritics = {remove_diacritics = c.macron}, } m["mog"] = { "Mongondow", 3058458, "phi", "Latn", } m["moh"] = { "Mohawk", 13339, "iro-nor", "Latn", ancestors = "iro-omo", } m["moi"] = { "Mboi", 3914417, "alv-yun", } m["moj"] = { "Monzombo", 11154772, "nic-nkk", "Latn", } m["mok"] = { "Morori", 6913275, } m["mom"] = { "Mangue", 56542, "omq", "Latn", } m["moo"] = { "Monom", 6901726, "mkh-ban", } m["mop"] = { "Mopan Maya", 36183, "myn", "Latn", } m["moq"] = { "Mor (Papuan)", 11732468, "qfa-dis", -- Papuan; isolate in Glottolog and Palmer (2018); top-level TNG in Ross (2005), in Berau Gulf (under -- TNG) in Usher (2020) } m["mor"] = { "Moro", 36172, "alv-hei", "Latn", } m["mos"] = { "Moore", 36096, "nic-mre", "Latn", } m["mot"] = { "Barí", 2886281, "cba", "Latn", } m["mou"] = { "Mogum", 3440473, "cdc-est", "Latn", } m["mov"] = { "Mojave", 56510, "nai-yuc", "Latn", } m["mow"] = { "Moi (Congo)", 11124792, "bnt-bmo", "Latn", } m["mox"] = { "Molima", 3319495, "poz-ocw", "Latn", } m["moy"] = { "Shekkacho", 56827, "omv-gon", } m["moz"] = { "Mukulu", 3440403, "cdc-est", } m["mpa"] = { "Mpoto", 6928303, "bnt-mbi", "Latn", } m["mpb"] = { "Mullukmulluk", 6741120, } m["mpc"] = { "Mangarayi", 6748829, } m["mpd"] = { "Machinere", 12953681, "awd", "Latn", } m["mpe"] = { "Majang", 56724, "sdv", } m["mpg"] = { "Marba", 56614, "cdc-mas", } m["mph"] = { "Maung", 6792550, "aus-wdj", "Latn", } m["mpi"] = { "Mpade", 3280670, "cdc-cbm", "Latn", } m["mpj"] = { "Martu Wangka", 3295916, "aus-pam", "Latn", } m["mpk"] = { "Mbara (Chad)", 3912770, "cdc-cbm", } m["mpl"] = { "Middle Watut", 15887910, "poz-ocw", "Latn", } m["mpm"] = { "Yosondúa Mixtec", 12953741, "omq-mxt", "Latn", } m["mpn"] = { "Mindiri", 6863842, "poz-ocw", "Latn", } m["mpo"] = { "Miu", 6883668, "poz-ocw", "Latn", } m["mpp"] = { "Migabac", 11732448, "ngf-sop", "Latn", } m["mpq"] = { "Matís", 3299145, "sai-pan", "Latn", } m["mpr"] = { "Vangunu", 3554582, "poz-ocw", "Latn", } m["mps"] = { "Dadibi", 5208077, "paa-teb", "Latn", } m["mpt"] = { "Mian", 12952846, "ngf-msu", "Latn", } m["mpu"] = { "Makuráp", 3281037, "tup", "Latn", } m["mpv"] = { "Mungkip", 11732485, "ngf-boa", "Latn", } m["mpw"] = { "Mapidian", 6753812, "awd", "Latn", } m["mpx"] = { "Misima-Paneati", 6875666, "poz-ocw", "Latn", } m["mpy"] = { "Mapia", 3287224, "poz-mic", "Latn", } m["mpz"] = { "Mpi", 6928276, "tbq-bka", } m["mqa"] = { "Maba", 3273750, } m["mqb"] = { "Mbuko", 3502213, "cdc-cbm", "Latn", } m["mqc"] = { "Mangole", 6749097, "poz-cma", "Latn", } m["mqe"] = { "Matepi", 11732426, "ngf-han", "Latn", } m["mqf"] = { "Momuna", 6897518, } m["mqg"] = { "Kota Bangun Kutai Malay", 12952778, } m["mqh"] = { "Tlazoyaltepec Mixtec", 12953740, "omq-mxt", "Latn", } m["mqi"] = { "Mariri", 6765544, } m["mqj"] = { "Mamasa", 6745452, "poz-ssw", "Latn", } m["mqk"] = { "Rajah Kabunsuwan Manobo", 12953700, "mno", } m["mql"] = { "Mbelime", 4286473, "nic-eov", "Latn", } m["mqm"] = { "South Marquesan", 19694214, "poz-pep", "Latn", } m["mqn"] = { "Moronene", 642581, "poz-btk", "Latn", } m["mqo"] = { "Modole", 11732457, "paa-gto", "Latn", } m["mqp"] = { "Manipa", 6749799, "poz-cma", "Latn", } m["mqq"] = { "Minokok", 18642293, "poz-san", "Latn", } m["mqr"] = { "Mander", 6747979, "paa-tor", "Latn", } m["mqs"] = { "West Makian", 3033575, "paa-nha", "Latn", } m["mqt"] = { "Mok", 13018559, "mkh-pal", } m["mqu"] = { "Mandari", 3285426, "sdv-bri", } m["mqv"] = { "Mosimo", 11732478, "ngf-nwh", "Latn", } m["mqw"] = { "Murupi", 11732486, "ngf-nwh", "Latn", } m["mqx"] = { "Mamuju", 6746004, "poz-ssw", "Latn", } m["mqy"] = { "Manggarai", 3285748, "poz-cet", "Latn", } m["mqz"] = { "Malasanga", 14916889, "poz-ocw", "Latn", } m["mra"] = { "Mlabri", 3073465, "mkh", } m["mrb"] = { "Sungwadia", 3293299, "poz-vnn", "Latn", } m["mrc"] = { "Maricopa", 56386, "nai-yuc", "Latn", } m["mrd"] = { "Western Magar", 22303263, "sit-gma", "Deva", } m["mre"] = { "Martha's Vineyard Sign Language", 33494, "sgn", "Latn, Sgnw", } m["mrf"] = { "Elseng", 3915667, "qfa-unc", -- "Border or language isolate"; unclassifiable due to paucity of data "Latn", } m["mrg"] = { "Mising", 3316328, "sit-tan", "Latn, Beng, Deva", ancestors = "adi", } m["mrh"] = { "Mara Chin", 4175893, "tbq-kuk", "Latn", } m["mrj"] = { "Western Mari", 1776032, "chm", "Cyrl", translit = "chm-translit", sort_key = "mrj-sortkey", } m["mrk"] = { "Hmwaveke", 5873712, "poz-cln", "Latn", } m["mrl"] = { "Mortlockese", 3324598, "poz-mic", "Latn", } m["mrm"] = { "Mwerlap", 3331115, "poz-vnn", "Latn", } m["mrn"] = { "Cheke Holo", 2962165, "poz-ocw", "Latn", } m["mro"] = { "Mru", 1951521, "sit-mru", "Latn, Mroo", } m["mrp"] = { "Morouas", 6913299, "poz-vnn", "Latn", } m["mrq"] = { "North Marquesan", 2603808, "poz-pep", "Latn", } m["mrr"] = { "Hill Maria", 27602, "dra-mdy", "Deva", } m["mrs"] = { "Maragus", 6754640, "poz-vnc", "Latn", } m["mrt"] = { "Margi", 56241, "cdc-cbm", "Latn", } m["mru"] = { "Mono (Cameroon)", 11031964, "alv-mbm", "Latn", } m["mrv"] = { "Mangarevan", 36237, "poz-pep", "Latn", } m["mrw"] = { "Maranao", 33800, "phi", "Latn, Arab", } m["mrx"] = { "Dineor", 5278044, "paa-tor", "Latn", } m["mry"] = { "Karaga Mandaya", 6747925, "phi", } m["mrz"] = { "Marind", 6763970, "paa-mri", "Latn", } m["msb"] = { "Masbatenyo", 33948, "phi", "Latn", } m["msc"] = { "Sankaran Maninka", 11155812, "dmn-mnk", } m["msd"] = { "Yucatec Maya Sign Language", 34281, "sgn", "Latn", -- when documented } m["mse"] = { "Musey", 56328, "cdc-mas", } m["msf"] = { "Mekwei", 4544752, "paa-nim", "Latn", } m["msg"] = { "Moraid", 6909020, "paa-wbh", "Latn", } m["msi"] = { "Sabah Malay", 10867404, "crp", "Latn, Arab", } m["msj"] = { "Ma", 6720909, "nic-mbc", "Latn", } m["msk"] = { "Mansaka", 12952800, "phi", "Latn", } m["msl"] = { "Molof", 4300950, } m["msm"] = { "Agusan Manobo", 12953696, "mno", "Latn", } m["msn"] = { "Vurës", 3563857, "poz-vnn", "Latn", } m["mso"] = { "Mombum", 6897079, "ngf-mom", "Latn", } m["msp"] = { "Maritsauá", 6765915, "tup", "Latn", } m["msq"] = { "Caac", 2932212, "poz-cln", "Latn", } m["msr"] = { "Mongolian Sign Language", 3915499, "sgn", } m["mss"] = { "West Masela", 12952816, "poz-tim", "Latn", } m["msu"] = { "Musom", 6943041, "poz-ocw", "Latn", } m["msv"] = { "Maslam", 3502273, } m["msw"] = { "Mansoanka", 35814, } m["msx"] = { "Moresada", 11732475, "ngf-pom", "Latn", } m["msy"] = { "Aruamu", 3501809, "paa-rub", "Latn", } m["msz"] = { "Momare", 6897030, "ngf-sop", "Latn", } m["mta"] = { "Cotabato Manobo", 12953698, "mno", "Latn", } m["mtb"] = { "Anyin Morofo", 3502338, "alv-ctn", "Latn", ancestors = "any", } m["mtc"] = { "Munit", 11732482, "ngf-kok", "Latn", } m["mtd"] = { "Mualang", 3073458, "poz-mly", "Latn", } m["mte"] = { "Alu", 33503, "poz-ocw", "Latn", } m["mtf"] = { "Murik (New Guinea)", 7050035, "paa-lse", "Latn", } m["mtg"] = { "Una", 5580728, "ngf-mek", "Latn", } m["mth"] = { "Munggui", 6936018, "poz-hce", "Latn", } m["mti"] = { "Maiwa (New Guinea)", 6737223, "ngf-dag", "Latn", } m["mtj"] = { "Moskona", 11288953, "paa-ebh", "Latn", } m["mtk"] = { "Mbe'", 10964025, "nic-nka", "Latn", } m["mtl"] = { "Montol", 3440457, "cdc-wst", "Latn", } m["mtm"] = { "Mator", 20669419, "syd", "Cyrl", } m["mtn"] = { "Matagalpa", 3490756, "nai-min", } m["mto"] = { "Totontepec Mixe", 7828400, "nai-miz", "Latn", } m["mtp"] = { "Wichí Lhamtés Nocten", 5908756, "sai-wic", "Latn", } m["mtq"] = { "Muong", 3236789, "mkh-vie", "Latn", sort_key = "vi-sortkey", } m["mtr"] = { "Mewari", 2992857, "raj", "Deva", translit = "hi-translit", -- for now } m["mts"] = { "Yora", 3572572, "sai-pan", "Latn", } m["mtt"] = { "Mota", 3325052, "poz-vnn", "Latn", } m["mtu"] = { "Tututepec Mixtec", 7857069, "omq-mxt", "Latn", } m["mtv"] = { "Asaro'o", 3503684, "ngf-war", -- ngf-moa if we split out Molet from Asaro'o "Latn", } m["mtw"] = { "Magahat", 6729600, "phi", } m["mtx"] = { "Tidaá Mixtec", 7800805, "omq-mxt", "Latn", } m["mty"] = { "Nabi", 6956858, "paa-wpa", "Latn", } m["mua"] = { "Mundang", 36032, "alv-mbm", } m["mub"] = { "Mubi", 3440518, "cdc-est", "Latn", } m["muc"] = { "Mbu'", 35868, "nic-beb", "Latn", } m["mud"] = { "Mednyj Aleut", 1977419, "qfa-mix", ancestors = "ale, ru" } m["mue"] = { "Media Lengua", 36066, "qfa-mix", "Latn", ancestors = "es, qu", } m["mug"] = { "Musgu", 3123545, "cdc-cbm", "Latn", } m["muh"] = { "Mündü", 35981, "nic-nke", "Latn", } m["mui"] = { "Musi", 615660, "poz-mly", "Latn", } m["muj"] = { "Mabire", 3440437, } m["mul"] = { "Translingual", 7834564, "qfa-not", "All", -- NOTE: The following sort keys are used in process_page() in [[Module:headword/page]], which generates -- the default sort key for the page (corresponding to {{DEFAULTSORT:...}}) by generating a sort key for -- the pagename using `makeSortKey()` called on language object "mul". Currently this just handles -- Japanese sort keys. -- -- FIXME: This should be smarter and use the language of the page if there's only one. sort_key = { Hani = "Hani-sortkey", Jpan = "Jpan-sortkey", Hrkt = "Hira-sortkey", -- Sort all kana as Hira. Hira = "Hira-sortkey", Kana = "Hira-sortkey", }, standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" .. c.punc, } m["mum"] = { "Maiwala", 12952764, "poz-ocw", "Latn", } m["muo"] = { "Nyong", 36373, "alv-lek", } m["mup"] = { "Malvi", 33413, "raj", "Deva", translit = "hi-translit" } m["muq"] = { "Eastern Xiangxi Miao", 27431376, "hmn", } m["mur"] = { "Murle", 56727, "sdv", } m["mus"] = { "Creek", 523014, "nai-mus", "Latn", } m["mut"] = { "Western Muria", 12952886, "dra-mur", } m["muu"] = { "Yaaku", 34222, "cus-eas", } m["muv"] = { "Muthuvan", 3327420, "dra-tam", } m["mux"] = { "Bo-Ung", 15831607, "ngf-hag", "Latn", } m["muy"] = { "Muyang", 3502301, "cdc-cbm", "Latn", } m["muz"] = { "Mursi", 36013, "sdv", } m["mva"] = { "Manam", 6746851, "poz-ocw", "Latn", } m["mvb"] = { "Mattole", 20824, "ath-pco", "Latn", } m["mvd"] = { "Mamboru", 578815, "poz", "Latn", } m["mvg"] = { "Yucuañe Mixtec", 25562736, "omq-mxt", "Latn", } m["mvh"] = { "Mire", 3441359, } m["mvi"] = { "Miyako", 36218, "jpx-sry", "Jpan", translit = s["jpx-translit"], display_text = s["jpx-displaytext"], strip_diacritics = s["jpx-stripdiacritics"], sort_key = s["jpx-sortkey"], } m["mvk"] = { "Mekmek", 6810592, "paa-yua", "Latn", } m["mvl"] = { "Mbara (Australia)", 6799620, "aus-pam", "Latn", } m["mvm"] = { "Muya", 2422759, "sit-qia", } m["mvn"] = { "Minaveha", 6863278, "poz-ocw", "Latn", } m["mvo"] = { "Marovo", 3294683, "poz-ocw", "Latn", } m["mvp"] = { "Duri", 3915414, "poz-ssw", "Latn", } m["mvq"] = { "Moere", 11732458, "ngf-kum", "Latn", } m["mvr"] = { "Marau", 6755069, "poz-hce", "Latn", } m["mvs"] = { "Massep", 3502895, "qfa-dis", -- poorly documented (but in vigorous use); isolate per Ethnologue, Glottolog, and Foley (2018); Greater -- Kwerba per Usher "Latn", } m["mvt"] = { "Mpotovoro", 6928305, "poz-vnc", "Latn", } m["mvu"] = { "Marfa", 713633, } m["mvv"] = { "Tagal Murut", 7675300, "poz-san", "Latn", } m["mvw"] = { "Machinga", 12952754, "bnt-rvm", } m["mvx"] = { "Meoswar", 6817777, "poz-hce", "Latn", } m["mvy"] = { "Indus Kohistani", 33399, "inc-koh", "Aran", } m["mvz"] = { "Mesqan", 6821677, "sem-eth", } m["mwa"] = { "Mwatebu", 14916896, "poz-ocw", "Latn", } m["mwb"] = { "Juwal", 6319103, "paa-mmu", "Latn", } m["mwc"] = { "Are", 29277, "poz-ocw", "Latn", } m["mwe"] = { "Mwera", 6944725, "bnt-rvm", "Latn", } m["mwf"] = { "Murrinh-Patha", 2980398, "aus-dal", "Latn", } m["mwg"] = { "Aiklep", 3399652, "poz-ocw", "Latn", } m["mwh"] = { "Mouk-Aria", 3325498, "poz-ocw", "Latn", } m["mwi"] = { "Labo", 2157452, "poz-vnc", "Latn", } m["mwk"] = { "Kita Maninkakan", 3015523, "dmn-wmn", } m["mwl"] = { "Mirandese", 13330, "roa-asl", "Latn", } m["mwm"] = { "Sar", 56850, "csu-sar", "Latn", } m["mwn"] = { "Nyamwanga", 6944666, "bnt-mwi", "Latn", } m["mwo"] = { "Sungwadaga", 3276435, "poz-vnn", "Latn", } m["mwp"] = { "Kala Lagaw Ya", 2591262, "aus-pam", "Latn", } m["mwq"] = { "Mün Chin", 331340, "tbq-kuk", } m["mwr"] = { "Marwari", 56312, "raj", "Deva, Mahj, Aran", translit = { Deva = "hi-translit", -- for now Mahj = "Mahj-translit", }, } m["mws"] = { "Mwimbi-Muthambi", 15632357, "bnt-kka", "Latn", } m["mwt"] = { "Moken", 18648701, "poz", } m["mwu"] = { "Mittu", 6883573, "csu-bbk", "Latn", } m["mwv"] = { "Mentawai", 13365, "poz-nws", "Latn", } m["mww"] = { "White Hmong", 3138829, "hmn", "Latn, Hmng, Hmnp", } m["mwz"] = { "Moingi", 11011905, } m["mxa"] = { "Northwest Oaxaca Mixtec", 12953739, "omq-mxt", "Latn", } m["mxb"] = { "Tezoatlán Mixtec", 3317286, "omq-mxt", "Latn", } m["mxd"] = { "Modang", 6888037, "poz", "Latn", } m["mxe"] = { "Mele-Fila", 3305008, "poz-pnp", "Latn", } m["mxf"] = { "Malgbe", 3502224, } m["mxg"] = { "Mbangala", 6799612, "bnt-yak", } m["mxh"] = { "Mvuba", 6944591, "csu-mle", "Latn", } m["mxi"] = { "Mozarabic", 317044, "roa-ibe", "Arab, Hebr, Latn", translit = "mxi-translit", strip_diacritics = { Arab = "ar-stripdiacritics", }, -- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["mxj"] = { "Miju", 56332, "sit-mdz", "Latn, Deva", } m["mxk"] = { "Monumbo", 6906792, "paa-mon", "Latn", } m["mxl"] = { "Maxi Gbe", 35770, "alv-gbe", } m["mxm"] = { "Meramera", 6817936, "poz-ocw", "Latn", } m["mxn"] = { "Moi (Indonesia)", 11732459, "paa-wbh", "Latn", } m["mxo"] = { "Mbowe", 10962309, "bnt-kav", } m["mxp"] = { "Tlahuitoltepec Mixe", 7810697, } m["mxq"] = { "Juquila Mixe", 25559721, } m["mxr"] = { "Murik (Malaysia)", 3328150, nil, "Latn", } m["mxs"] = { "Huitepec Mixtec", 12953729, "omq-mxt", "Latn", } m["mxt"] = { "Jamiltepec Mixtec", 12953730, "omq-mxt", "Latn", } m["mxu"] = { "Mada (Cameroon)", 3441206, "cdc-cbm", "Latn", } m["mxv"] = { "Metlatónoc Mixtec", 36363, "omq-mxt", "Latn", } m["mxw"] = { "Namo", 12952923, "paa-nam", "Latn", } m["mxx"] = { "Mahou", 11004334, "dmn-mnk", "Latn, Nkoo", } m["mxy"] = { "Southeastern Nochixtlán Mixtec", 7070684, "omq-mxt", "Latn", } m["mxz"] = { "Central Masela", 42575433, "poz-tim", "Latn", } m["myb"] = { "Mbay", 3033565, "csu-sar", "Latn", } m["myc"] = { "Mayeka", 11129517, "bnt-boa", } m["mye"] = { "Myene", 35832, "bnt-tso", "Latn", } m["myf"] = { "Bambassi", 56540, "omv-mao", "Latn", } m["myg"] = { "Manta", 35799, "nic-mom", "Latn", } m["myh"] = { "Makah", 3280640, "wak", "Latn", } m["myj"] = { "Mangayat", 35988, "nic-ser", } m["myk"] = { "Mamara", 36187, "alv-sma", "Latn", } m["myl"] = { "Moma", 6897018, "poz", "Latn", } m["mym"] = { "Me'en", 3408516, "sdv", } m["myo"] = { "Anfillo", 34928, "omv-gon", } m["myp"] = { "Pirahã", 33825, "sai-mur", "Latn", } m["myr"] = { "Muniche", 3915654, } m["mys"] = { "Mesmes", 3508617, "sem-eth", } m["myu"] = { "Mundurukú", 746723, "tup", "Latn", } m["myv"] = { "Erzya", 29952, "urj-mdv", "Cyrl", translit = "myv-translit", override_translit = true, } m["myw"] = { "Muyuw", 3502878, "poz-ocw", "Latn", } m["myx"] = { "Masaba", 12952814, "bnt-msl", "Latn", } m["myy"] = { "Macuna", 3275059, "sai-tuc", "Latn", } m["myz"] = { "Classical Mandaic", 25559314, "sem-ase", "Mand", translit = { Mand = "Mand-translit", }, strip_diacritics = { Mand = "Mand-stripdiacritics", } } m["mza"] = { "Santa María Zacatepec Mixtec", 8063756, "omq-mxt", "Latn", } m["mzb"] = { "Northern Saharan Berber", 11156769, "ber", "Arab, Latn, Tfng", } m["mzc"] = { "Madagascar Sign Language", 12715020, "sgn", } m["mzd"] = { "Malimba", 35806, "bnt-saw", } m["mze"] = { "Morawa", 6909384, "paa-mal", "Latn", } m["mzg"] = { "Monastic Sign Language", 3217333, "sgn", } m["mzh"] = { "Wichí Lhamtés Güisnay", 7998197, "sai-wic", "Latn", } m["mzi"] = { "Ixcatlán Mazatec", 6101049, "omq-maz", "Latn", } m["mzj"] = { "Manya", 11006832, "dmn-mnk", } m["mzk"] = { "Nigeria Mambila", 11004163, "nic-mmb", "Latn", } m["mzl"] = { "Mazatlán Mixe", 25559728, } m["mzm"] = { "Mumuye", 36021, "alv-mum", "Latn", } m["mzn"] = { "Mazanderani", 13356, "ira-msh", "Arab", } m["mzo"] = { "Matipuhy", 6787588, "sai-kui", "Latn", } m["mzp"] = { "Movima", 1659701, "qfa-iso", "Latn", } m["mzq"] = { "Mori Atas", 3324070, "poz-btk", "Latn", } m["mzr"] = { "Marúbo", 3296011, "sai-pan", "Latn", } m["mzs"] = { "Macanese", 35785, "crp", "Latn", ancestors = "pt", sort_key = {Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.cedilla}}, } m["mzt"] = { "Mintil", 6869641, "mkh-asl", } m["mzu"] = { "Inapang", 6013569, "paa-tam", "Latn", } m["mzv"] = { "Manza", 36038, "gba-eas", } m["mzw"] = { "Deg", 35183, "nic-gnw", "Latn", } m["mzx"] = { "Mawayana", 6794377, "awd", } m["mzy"] = { "Mozambican Sign Language", 6927809, "sgn", } m["mzz"] = { "Maiadomu", 6735234, "poz-ocw", "Latn", } return require("Module:languages").finalizeData(m, "language") jqk4jvcd37wyeb9zrgw9ghrl0uqjodl मॉड्यूल:languages/data/patterns 828 304579 487659 477766 2026-09-01T20:30:06Z SM7 6218 updating...yet to resolve श्रेणी used 487659 Scribunto text/plain -- Capture patterns used by [[Module:languages]] to prevent formatting from being disrupted while text is being processed. -- Certain character sequences are substituted beforehand to make pattern matching more straightforward: -- "\1" = "[[" -- "\2" = "]]" return { "((</?link>))\0", -- Special link formatting added by [[Module:links]] "((<[^<>\1\2]+>))", -- HTML tag "((\1[Ff][Ii][Ll][Ee]:[^\1\2]+\2))\0", -- File "((\1[Ii][Mm][Aa][Gg][Ee]:[^\1\2]+\2))\0", -- Image "((\1[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]:[^\1\2]+\2))\0", -- Category "((\1[Cc][Aa][Tt]:[^\1\2]+\2))\0", -- Category "((\1[श्रेणी]:[^\1\2]+\2))\0", -- श्रेणी "((\1श्रेणी:[^\1\2]+\2))\0", -- श्रेणी दोनों में कौन सी "((\1)[^\1\2|]+(\2))\0", -- Bare internal link "((\1)[^\1\2|]-(|)[^\1\2]-(\2))\0", -- Piped internal link "((%[https?://[^[%] ]+)[^[%]]*(%]))\0", -- External link "((\127'\"`UNIQ%-%-%l+%-%x+%-+QINU`\"'\127))", -- Strip marker "('*(''').-'*('''))", -- Bold "('*('').-'*(''))" -- Italics } bqlmdv96zygkglunmha35gr5xdytp5u मॉड्यूल:parameters/data 828 304600 487655 477485 2026-09-01T20:19:10Z SM7 6218 updating...BIG 487655 Scribunto text/plain local list_to_set = require("Module:table").listToSet local alias_of_2 = {alias_of = 2} local boolean = {type = "boolean"} local empty_list = {} local list = {list = true} local list_allow_holes_separate_no_index = {list = true, allow_holes = true, separate_no_index = true} local required = {required = true} local required_default_ = {required = true, default = ""} local required_lang_default_und = {required = true, type = "language", default = "und"} local type_labels = {type = "labels"} local type_qualifier = {type = "qualifier"} local type_references = {type = "references"} local m = {} -- [[Module:anchors]] m["anchor"] = { [1] = {required = true, list = true, disallow_holes = true}, } m["senseid"] = { [1] = required_lang_default_und, [2] = required_default_, id = alias_of_2, tag = {set = list_to_set{"li", "p"}, default = "li"}, } m["etymid"] = { [1] = required_lang_default_und, [2] = required_default_, id = alias_of_2, } -- [[Module:etymon]] m["etymon"] = { [1] = required_lang_default_und, [2] = {list = true, disallow_holes = true}, id = true, title = true, tree = boolean, text = true, exnihilo = boolean, etydate = true, doublet = {sublist = "comma without whitespace"}, rfe = true, etystub = true, nl = boolean, pos = true, notree = {default = false, type = "boolean"}, nocat = {default = false, type = "boolean"}, nodot = {default = false, type = "boolean"}, dot = true, json = {default = false, type = "boolean"}, } -- [[Module:transclude]] m["transclude"] = { [1] = {required = true, type = "language"}, [2] = {list = true, required = true}, id = true, sort = true, nogloss = {default = false, type = "boolean"}, no_truncate_gloss = boolean, include_place_extra_info = boolean, place_translation_follows = boolean, place_addl = true, lb = true, nolb = true, nocat = boolean, to = boolean, t = list, indent = true, dot = boolean, pagename = true, } -- [[Module:translations]] m["translation"] = { [1] = required_lang_default_und, [2] = true, [3] = list, alt = true, id = true, sc = {type = "script"}, tr = true, ts = true, lit = true, l = type_labels, ll = type_labels, q = type_qualifier, qq = type_qualifier, ref = type_references, } m["t-needed"] = { [1] = required_lang_default_und, [2] = {set = list_to_set{"usex", "quote"}}, nocat = boolean, sort = true, } m["trans-top"] = { [1] = true, id = true, ["column-width"] = true, } m["trans-top-also"] = { [1] = required, [2] = list, id = list_allow_holes_separate_no_index, ["column-width"] = true, } m["checktrans-top"] = { [1] = true, ["column-width"] = true, } m["trans-bottom"] = empty_list m["trans-see"] = { [1] = required, [2] = list, id = list_allow_holes_separate_no_index, } m["translation subpage"] = empty_list m["no equivalent translation"] = { [1] = required_lang_default_und, noend = boolean, } m["no attested translation"] = { [1] = required_lang_default_und, noend = boolean, sort = true, } m["not used"] = { [1] = required_lang_default_und, [2] = true, } return m 51jr4evgp9f3cxhobug46hkqur9gpta मॉड्यूल:languages/data/2 828 304604 487638 477994 2026-09-01T19:20:16Z SM7 6218 updating...some old localization sacrificed 487638 Scribunto text/plain local m_langdata = require("Module:languages/data") -- Loaded on demand, as it may not be needed (depending on the data). local function u(...) u = require("Module:string utilities").char return u(...) end local c = m_langdata.chars local p = m_langdata.puaChars local s = m_langdata.shared -- Ideally, we want to move these into [[Module:languages/data]], but because (a) it's necessary to use require on that module, and (b) they're only used in this data module, it's less memory-efficient to do that at the moment. If it becomes possible to use mw.loadData, then these should be moved there. s["de-Latn-sortkey"] = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove, from = {"æ", "œ", "ß"}, to = {"ae", "oe", "ss"} } s["de-Latn-standardchars"] = "AaÄäBbCcDdEeFfGgHhIiJjKkLlMmNnOoÖöPpQqRrSsẞßTtUuÜüVvWwXxYyZz" s["ka-stripdiacritics"] = {remove_diacritics = c.circ} s["no-sortkey"] = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla, remove_exceptions = {"å"}, from = {"æ", "ø", "å"}, to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]} } s["no-standardchars"] = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÆæØøÅå" .. c.punc s["sa-Deva-stripdiacritics"] = { -- Don't use remove_diacritics for accent marks, as १ and ३ should also be removed if (and only if) they carry any. from = {"ॐ", "[१३]?[" .. c.anudatta .. c.udatta .. c.dsvarita .. c.tsvarita .. "]+"}, to = {"ओँ"}, } s["tg-stripdiacritics"] = {remove_diacritics = c.grave .. c.acute} s["tk-stripdiacritics"] = {remove_diacritics = c.macron} local m = {} m["aa"] = { "Afar", 27811, "cus-eas", "Latn, Ethi", strip_diacritics = { Latn = {remove_diacritics = c.acute}, }, } m["ab"] = { "Abkhaz", 5111, "cau-abz", "Cyrl, Geor, Latn", translit = { Cyrl = "ab-translit", -- Geor translit in [[Module:scripts/data]] }, override_translit = true, display_text = { Cyrl = s["cau-Cyrl-displaytext"] }, strip_diacritics = { Cyrl = { remove_diacritics = c.acute, from = {"^а%-"}, to = {"а"}, }, Latn = s["cau-Latn-stripdiacritics"], }, sort_key = { Cyrl = { from = { "х'ә", -- 3 chars "гь", "гә", "ӷь", "ҕь", "ӷә", "ҕә", "дә", "ё", "жь", "жә", "ҙә", "ӡә", "ӡ'", "кь", "кә", "қь", "қә", "ҟь", "ҟә", "ҫә", "тә", "ҭә", "ф'", "хь", "хә", "х'", "ҳә", "ць", "цә", "ц'", "ҵә", "ҵ'", "шь", "шә", "џь", -- 2 chars "ӷ", "ҕ", "ҙ", "ӡ", "қ", "ҟ", "ԥ", "ҧ", "ҫ", "ҭ", "ҳ", "ҵ", "ҷ", "ҽ", "ҿ", "ҩ", "џ", "ә", -- 1 char "^а", }, to = { "х" .. p[4], "г" .. p[1], "г" .. p[2], "г" .. p[5], "г" .. p[6], "г" .. p[7], "г" .. p[8], "д" .. p[1], "е" .. p[1], "ж" .. p[1], "ж" .. p[2], "з" .. p[2], "з" .. p[4], "з" .. p[5], "к" .. p[1], "к" .. p[2], "к" .. p[4], "к" .. p[5], "к" .. p[7], "к" .. p[8], "с" .. p[2], "т" .. p[1], "т" .. p[3], "ф" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[3], "х" .. p[6], "ц" .. p[1], "ц" .. p[2], "ц" .. p[3], "ц" .. p[5], "ц" .. p[6], "ш" .. p[1], "ш" .. p[2], "ы" .. p[3], "г" .. p[3], "г" .. p[4], "з" .. p[1], "з" .. p[3], "к" .. p[3], "к" .. p[6], "п" .. p[1], "п" .. p[2], "с" .. p[1], "т" .. p[2], "х" .. p[5], "ц" .. p[4], "ч" .. p[1], "ч" .. p[2], "ч" .. p[3], "ы" .. p[1], "ы" .. p[2], "ь" .. p[1], "", } }, }, } m["ae"] = { "Avestan", 29572, "ira-cen", "Avst, Gujr, Deva", translit = { Avst = "Avst-translit" }, } m["af"] = { "Afrikaans", 14196, "gmw-frk", "Latn, Arab", ancestors = "nl", sort_key = { Latn = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.ringabove .. c.cedilla .. "'", from = {"['ʼ]n"}, to = {"n" .. p[1]} } }, } m["ak"] = { "Akan", 28026, "alv-ctn", "Latn", } m["am"] = { "Amharic", 28244, "sem-eth", "Ethi", translit = "Ethi-translit", } m["an"] = { "Aragonese", 8765, "roa-nar", "Latn", } m["ar"] = { "Arabic", 13955, "sem-arb", "Arab, Hebr, Syrc, Brai, Nbat", translit = { Arab = "ar-translit" }, strip_diacritics = { Arab = "ar-stripdiacritics", }, -- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["as"] = { "असमिया", 29401, "inc-bas", "as-Beng", ancestors = "inc-mas", translit = "as-translit", } m["av"] = { "Avar", 29561, "cau-ava", "Cyrl, Latn, Arab", ancestors = "oav", translit = { Cyrl = "cau-nec-translit", Arab = "ar-translit", }, override_translit = true, display_text = { Cyrl = s["cau-Cyrl-displaytext"], }, strip_diacritics = { Cyrl = s["cau-Cyrl-stripdiacritics"], Latn = s["cau-Latn-stripdiacritics"], }, sort_key = { Cyrl = { from = {"гъ", "гь", "гӏ", "ё", "кк", "къ", "кь", "кӏ", "лъ", "лӏ", "тӏ", "хх", "хъ", "хь", "хӏ", "цӏ", "чӏ"}, to = {"г" .. p[1], "г" .. p[2], "г" .. p[3], "е" .. p[1], "к" .. p[1], "к" .. p[2], "к" .. p[3], "к" .. p[4], "л" .. p[1], "л" .. p[2], "т" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[3], "х" .. p[4], "ц" .. p[1], "ч" .. p[1]} }, }, } m["ay"] = { "Aymara", 4627, "sai-aym", "Latn", } m["az"] = { "Azerbaijani", 9292, "trk-ogz", "Latn, Cyrl, Arab", ancestors = "trk-oat", dotted_dotless_i = true, strip_diacritics = { Latn = { from = {"ʼ"}, to = {"'"}, }, Arab = { module = "ar-stripdiacritics", ["from"] = { "ۆ", "ۇ", "وْ", "ڲ", "ؽ", }, ["to"] = { "و", "و", "و", "گ", "ی", }, }, }, display_text = { Latn = { from = {"'"}, to = {"ʼ"} } }, sort_key = { Latn = { from = { "i", -- Ensure "i" comes after "ı". "ç", "ə", "ğ", "x", "ı", "q", "ö", "ş", "ü", "w" }, to = { "i" .. p[1], "c" .. p[1], "e" .. p[1], "g" .. p[1], "h" .. p[1], "i", "k" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1], "z" .. p[1] } }, Cyrl = { from = {"ғ", "ә", "ы", "ј", "ҝ", "ө", "ү", "һ", "ҹ"}, to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "и" .. p[2], "к" .. p[1], "о" .. p[1], "у" .. p[1], "х" .. p[1], "ч" .. p[1]} }, }, } m["ba"] = { "Bashkir", 13389, "trk-kbu", "Cyrl", translit = "ba-translit", override_translit = true, sort_key = { from = {"ғ", "ҙ", "ё", "ҡ", "ң", "ө", "ҫ", "ү", "һ", "ә"}, to = {"г" .. p[1], "д" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "с" .. p[1], "у" .. p[1], "х" .. p[1], "э" .. p[1]} }, } m["be"] = { "Belarusian", 9091, "zle", "Cyrl, Latn", ancestors = "zle-mbe", translit = { Cyrl = "be-translit", }, strip_diacritics = { Cyrl = { remove_diacritics = c.grave .. c.acute, }, Latn = { remove_diacritics = c.grave .. c.acute, remove_exceptions = {"Ć", "ć", "Ń", "ń", "Ś", "ś", "Ź", "ź"}, }, }, sort_key = { Cyrl = { remove_diacritics = c.grave .. c.acute, from = {"ґ", "ё", "і", "ў"}, to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "у" .. p[1]} }, Latn = { remove_diacritics = c.grave .. c.acute, remove_exceptions = {"Ć", "ć", "Ń", "ń", "Ś", "ś", "Ź", "ź"}, from = {"ć", "č", "dz", "dź", "dž", "ch", "ł", "ń", "ś", "š", "ŭ", "ź", "ž"}, to = {"c" .. p[1], "c" .. p[2], "d" .. p[1], "d" .. p[2], "d" .. p[3], "h" .. p[1], "l" .. p[1], "n" .. p[1], "s" .. p[1], "s" .. p[2], "u" .. p[1], "z" .. p[1], "z" .. p[2]} }, }, standard_chars = { Cyrl = "АаБбВвГгДдЕеЁёЖжЗзІіЙйКкЛлМмНнОоПпРрСсТтУуЎўФфХхЦцЧчШшЫыЬьЭэЮюЯя", Latn = "AaBbCcĆćČčDdEeFfGgHhIiJjKkLlŁłMmNnŃńOoPpRrSsŚśŠšTtUuŬŭVvYyZzŹźŽž", (c.punc:gsub("'", "")) -- Exclude apostrophe. }, } m["bg"] = { "Bulgarian", 7918, "zls", "Cyrl", ancestors = "cu-bgm", translit = "bg-translit", strip_diacritics = { remove_diacritics = c.grave .. c.acute, remove_exceptions = {"%f[^%z%s]ѝ%f[%z%s]"}, }, sort_key = { remove_diacritics = c.grave .. c.acute, remove_exceptions = {"%f[^%z%s]ѝ%f[%z%s]"}, }, standard_chars = "АаБбВвГгДдЕеЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЬьЮюЯя" .. c.punc, } m["bh"] = { "बिहारी", 135305, "inc-eas", "Deva", } m["bi"] = { "Bislama", 35452, "crp", "Latn", ancestors = "en", } m["bm"] = { "Bambara", 33243, "dmn-emn", "Latn, Nkoo", sort_key = { Latn = { from = {"ɛ", "ɲ", "ŋ", "ɔ"}, to = {"e" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1]} }, }, } m["bn"] = { "बंगाली", 9610, "inc-bas", "Beng, Newa", ancestors = "inc-mbn", translit = { Beng = "bn-translit" }, } m["bo"] = { "Tibetan", 34271, "sit-tib", "Tibt", -- sometimes Deva? ancestors = "xct", override_translit = true, -- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["br"] = { "Breton", 12107, "cel-brs", "Latn", ancestors = "xbm", sort_key = { from = {"ch", "c['ʼ’]h"}, to = {"c" .. p[1], "c" .. p[2]} }, } m["ca"] = { "Catalan", 7026, "roa-ocr", "Latn", ancestors = "roa-oca", sort_key = {remove_diacritics = c.grave .. c.acute .. c.diaer .. c.cedilla .. "·"}, standard_chars = "AaÀàBbCcÇçDdEeÉéÈèFfGgHhIiÍíÏïJjLlMmNnOoÓóÒòPpQqRrSsTtUuÚúÜüVvXxYyZz·" .. c.punc, } m["ce"] = { "Chechen", 33350, "cau-vay", "Cyrl, Latn, Arab", translit = { Cyrl = "cau-nec-translit", Arab = "ar-translit", }, override_translit = true, display_text = { Cyrl = s["cau-Cyrl-displaytext"] }, strip_diacritics = { Cyrl = s["cau-Cyrl-stripdiacritics"], Latn = s["cau-Latn-stripdiacritics"], }, sort_key = { Cyrl = { from = {"аь", "гӏ", "ё", "кх", "къ", "кӏ", "оь", "пӏ", "тӏ", "уь", "хь", "хӏ", "цӏ", "чӏ", "юь", "яь"}, to = {"а" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "к" .. p[2], "к" .. p[3], "о" .. p[1], "п" .. p[1], "т" .. p[1], "у" .. p[1], "х" .. p[1], "х" .. p[2], "ц" .. p[1], "ч" .. p[1], "ю" .. p[1], "я" .. p[1]} }, }, } m["ch"] = { "Chamorro", 33262, "poz", "Latn", sort_key = { remove_diacritics = "'", from = {"å", "ch", "ñ", "ng"}, to = {"a" .. p[1], "c" .. p[1], "n" .. p[1], "n" .. p[2]} }, } m["co"] = { "Corsican", 33111, "roa-itr", "Latn", sort_key = { from = {"chj", "ghj", "sc", "sg"}, to = {"c" .. p[1], "g" .. p[1], "s" .. p[1], "s" .. p[2]} }, standard_chars = "AaÀàBbCcDdEeÈèFfGgHhIiÌìÏïJjLlMmNnOoÒòPpQqRrSsTtUuÙùÜüVvZz" .. c.punc, } m["cr"] = { "Cree", 33390, "alg", "Latn, Cans", translit = { Cans = "cr-translit" }, } m["cs"] = { "Czech", 9056, "zlw", "Latn", ancestors = "cs-ear", sort_key = { from = {"á", "č", "ď", "é", "ě", "ch", "í", "ň", "ó", "ř", "š", "ť", "ú", "ů", "ý", "ž"}, to = {"a" .. p[1], "c" .. p[1], "d" .. p[1], "e" .. p[1], "e" .. p[2], "h" .. p[1], "i" .. p[1], "n" .. p[1], "o" .. p[1], "r" .. p[1], "s" .. p[1], "t" .. p[1], "u" .. p[1], "u" .. p[2], "y" .. p[1], "z" .. p[1]} }, standard_chars = "AaÁáBbCcČčDdĎďEeÉéĚěFfGgHhIiÍíJjKkLlMmNnŇňOoÓóPpRrŘřSsŠšTtŤťUuÚúŮůVvYyÝýZzŽž" .. c.punc, } m["cu"] = { "Old Church Slavonic", 35499, "zls", "Cyrs, Glag, Zname", translit = { Cyrs = "Cyrs-translit", Glag = "Glag-translit" }, -- Cyrs strip_diacritics, sort_key in [[Module:scripts/data]] } m["cv"] = { "Chuvash", 33348, "trk-ogr", "Cyrl", ancestors = "cv-mid", translit = "cv-translit", override_translit = true, sort_key = { from = {"ӑ", "ё", "ӗ", "ҫ", "ӳ"}, to = {"а" .. p[1], "е" .. p[1], "е" .. p[2], "с" .. p[1], "у" .. p[1]} }, } m["cy"] = { "Welsh", 9309, "cel-brw", "Latn", ancestors = "wlm", sort_key = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. "'", from = {"ch", "dd", "ff", "ng", "ll", "ph", "rh", "th"}, to = {"c" .. p[1], "d" .. p[1], "f" .. p[1], "g" .. p[1], "l" .. p[1], "p" .. p[1], "r" .. p[1], "t" .. p[1]} }, standard_chars = "ÂâAaBbCcDdEeÊêFfGgHhIiÎîLlMmNnOoÔôPpRrSsTtUuÛûWwŴŵYyŶŷ" .. c.punc, } m["da"] = { "Danish", 9035, "gmq-eas", "Latn", ancestors = "gmq-oda", sort_key = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla, remove_exceptions = {"å"}, from = {"æ", "ø", "å"}, to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]} }, standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÆæØøÅå" .. c.punc, } m["de"] = { "German", 188, "gmw-hgm", "Latn, Latf, Brai", ancestors = "de-ear", sort_key = { Latn = s["de-Latn-sortkey"], Latf = s["de-Latn-sortkey"], }, standard_chars = { Latn = s["de-Latn-standardchars"], Latf = s["de-Latn-standardchars"], Brai = c.braille, c.punc } } m["dv"] = { "Dhivehi", 32656, "inc-ins", "Thaa, Diak", translit = { Thaa = "dv-translit", Diak = "Diak-translit", }, ancestors = "dv-old", override_translit = true, } m["dz"] = { "Dzongkha", 33081, "sit-tib", "Tibt", ancestors = "xct", override_translit = true, -- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["ee"] = { "Ewe", 30005, "alv-gbe", "Latn", sort_key = { remove_diacritics = c.tilde, from = {"ɖ", "dz", "ɛ", "ƒ", "gb", "ɣ", "kp", "ny", "ŋ", "ɔ", "ts", "ʋ"}, to = {"d" .. p[1], "d" .. p[2], "e" .. p[1], "f" .. p[1], "g" .. p[1], "g" .. p[2], "k" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "t" .. p[1], "v" .. p[1]} }, } m["el"] = { "Greek", 9129, "grk", "Grek, Polyt, Brai", ancestors = "el-kth", translit = "el-translit", override_translit = true, -- Grek and Polyt display_text, strip_diacritics, sort_key in [[Module:scripts/data]] standard_chars = { Grek = "΅·ͺ΄ΑαΆάΒβΓγΔδΕεέΈΖζΗηΉήΘθΙιΊίΪϊΐΚκΛλΜμΝνΞξΟοΌόΠπΡρΣσςΤτΥυΎύΫϋΰΦφΧχΨψΩωΏώ", Brai = c.braille, c.punc }, } m["en"] = { "English", 1860, "gmw-ang", "Latn, Brai, Shaw, Dsrt", -- entries in Shaw or Dsrt might require prior discussion wikimedia_codes = "en, simple", ancestors = "en-ear", sort_key = { Latn = { -- Many of these are needed for sorting language names. remove_diacritics = "'\"%-%.,%s·ʻʼ" .. c.diacritics, -- These are found in pagenames. from = {"[ɒæ🅱¢©ᴄðđəǝɜɡħʜıɨłŋɲøɔœꝑꝓꝕßʋ]"}, to = {{ ["ɒ"] = "a", ["æ"] = "ae", ["🅱"] = "b", ["¢"] = "c", ["©"] = "c", ["ᴄ"] = "c", ["ð"] = "d", ["đ"] = "d", ["ə"] = "e", ["ǝ"] = "e", ["ɜ"] = "e", ["ɡ"] = "g", ["ħ"] = "h", ["ʜ"] = "h", ["ı"] = "i", ["ɨ"] = "i", ["ł"] = "l", ["ŋ"] = "n", ["ɲ"] = "n", ["ø"] = "o", ["ɔ"] = "o", ["œ"] = "oe", ["ꝑ"] = "p", ["ꝓ"] = "p", ["ꝕ"] = "p", ["ß"] = "ss", ["ʋ"] = "v", }}, }, }, standard_chars = { Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz", Brai = c.braille, c.punc }, } m["eo"] = { "Esperanto", 143, "art", "Latn", sort_key = { remove_diacritics = c.grave .. c.acute, from = {"ĉ", "ĝ", "ĥ", "ĵ", "ŝ", "ŭ"}, to = {"c" .. p[1], "g" .. p[1], "h" .. p[1], "j" .. p[1], "s" .. p[1], "u" .. p[1]} }, standard_chars = "AaBbCcĈĉDdEeFfGgĜĝHhĤĥIiJjĴĵKkLlMmNnOoPpRrSsŜŝTtUuŬŭVvZz" .. c.punc, } m["es"] = { "Spanish", 1321, "roa-cas", "Latn, Brai", ancestors = "es-ear", sort_key = { Latn = { remove_exceptions = {"ñ"}, remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.diaer .. c.cedilla, from = {"ª", "æ", "ñ", "º", "œ"}, to = {"a", "ae", "n" .. p[1], "o", "oe"} }, }, standard_chars = { Latn = "AaÁáBbCcDdEeÉéFfGgHhIiÍíJjLlMmNnÑñOoÓóPpQqRrSsTtUuÚúÜüVvXxYyZz", Brai = c.braille, c.punc }, } m["et"] = { "Estonian", 9072, "urj-fin", "Latn", sort_key = { from = { "š", "ž", "õ", "ä", "ö", "ü", -- 2 chars "z" -- 1 char }, to = { "s" .. p[1], "s" .. p[3], "w" .. p[1], "w" .. p[2], "w" .. p[3], "w" .. p[4], "s" .. p[2] } }, standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvÕõÄäÖöÜü" .. c.punc, } m["eu"] = { "Basque", 8752, "euq", "Latn", sort_key = { from = {"ç", "ñ"}, to = {"c" .. p[1], "n" .. p[1]} }, standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnÑñOoPpRrSsTtUuXxZz" .. c.punc, } m["fa"] = { "Persian", 9168, "ira-swi", "Arab, Hebr", ancestors = "fa-cls", strip_diacritics = { Arab = { -- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif from = {"هٔ", "ٱ"}, -- character "ۂ" code U+06C2 to "ه"; hamzatu l-waṣli to a regular alif to = {"ه", "ا"}, remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef, }, }, -- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["ff"] = { "Fula", 33454, "alv-fwo", "Latn, Adlm", } m["fi"] = { "Finnish", 1412, "urj-fin", "Latn", display_text = { from = {"'"}, to = {"’"} }, strip_diacritics = { -- used to indicate gemination of the next consonant remove_diacritics = "ˣ", from = {"’"}, to = {"'"}, }, sort_key = { -- [[Appendix:Finnish alphabet#Collation]] + "aͤ" and "oͤ" as historical variants of "ä" and "ö". remove_diacritics = "'’:" .. c.diacritics, remove_exceptions = { "a[" .. c.ringabove .. c.diaer .. c.small_e .. "]", -- åäaͤ "o[" .. c.diaer .. c.tilde .. c.dacute .. c.small_e .. "]", -- öõőoͤ "u[" .. c.diaer .. c.dacute .. "]" -- üű }, from = {"æ", "[ðđ]", "ł", "ŋ", "œ", "ß", "þ", "u[" .. c.diaer .. c.dacute .. "]", "å", "aͤ", "o[" .. c.tilde .. c.dacute .. c.small_e .. "]", "ø", "(.)['%-]"}, to = {"ae", "d", "l", "n", "oe", "ss", "th", "y", "z" .. p[1], "ä", "ö", "ö", "%1"} }, standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÄäÖö" .. c.punc, } m["fj"] = { "Fijian", 33295, "poz-pcc", "Latn", } m["fo"] = { "Faroese", 25258, "gmq-ins", "Latn", sort_key = { from = {"á", "ð", "í", "ó", "ú", "ý", "æ", "ø"}, to = {"a" .. p[1], "d" .. p[1], "i" .. p[1], "o" .. p[1], "u" .. p[1], "y" .. p[1], "z" .. p[1], "z" .. p[2]} }, standard_chars = "AaÁáBbDdÐðEeFfGgHhIiÍíJjKkLlMmNnOoÓóPpRrSsTtUuÚúVvYyÝýÆæØø" .. c.punc, } m["fr"] = { "French", 150, "roa-oil", "Latn, Brai", ancestors = "frm", sort_key = { Latn = s["roa-oil-sortkey"] }, standard_chars = { Latn = "AaÀàÂâBbCcÇçDdEeÉéÈèÊêËëFfGgHhIiÎîÏïJjLlMmNnOoÔôŒœPpQqRrSsTtUuÙùÛûÜüVvXxYyZz", Brai = c.braille, c.punc }, } m["fy"] = { "West Frisian", 27175, "gmw-fri", "Latn", sort_key = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer, from = {"y"}, to = {"i"} }, standard_chars = "AaâäàÆæBbCcDdEeéêëèFfGgHhIiïìYyỳJjKkLlMmNnOoôöòPpRrSsTtUuúûüùVvWwZz" .. c.punc, } m["ga"] = { "Irish", 9142, "cel-gae", "Latn, Latg", ancestors = "mga", sort_key = { remove_diacritics = c.acute, from = {"ḃ", "ċ", "ḋ", "ḟ", "ġ", "ṁ", "ṗ", "ṡ", "ṫ"}, to = {"bh", "ch", "dh", "fh", "gh", "mh", "ph", "sh", "th"} }, standard_chars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíLlMmNnOoÓóPpRrSsTtUuÚúVv" .. c.punc, } m["gd"] = { "Scottish Gaelic", 9314, "cel-gae", "Latn, Latg", ancestors = "mga", sort_key = {remove_diacritics = c.grave .. c.acute}, standard_chars = "AaÀàBbCcDdEeÈèFfGgHhIiÌìLlMmNnOoÒòPpRrSsTtUuÙù" .. c.punc, } m["gl"] = { "Galician", 9307, "roa-gap", "Latn", sort_key = { remove_diacritics = c.acute, from = {"ñ"}, to = {"n" .. p[1]} }, standard_chars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíÏïLlMmNnÑñOoÓóPpQqRrSsTtUuÚúÜüVvXxZz" .. c.punc, } m["gu"] = { "Gujarati", 5137, "inc-wes", "Arab, Gujr", ancestors = "inc-mgu", translit = { Gujr = "gu-translit", }, strip_diacritics = { Arab = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.kasra .. c.shadda .. c.sukun}, Gujr = {remove_diacritics = "઼"}, }, } m["gv"] = { "Manx", 12175, "cel-gae", "Latn", ancestors = "mga", sort_key = {remove_diacritics = c.cedilla .. "-"}, standard_chars = "AaBbCcÇçDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwYy" .. c.punc, } m["ha"] = { "Hausa", 56475, "cdc-wst", "Latn, Arab", strip_diacritics = { Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron} }, sort_key = { Latn = { from = {"ɓ", "b'", "ɗ", "d'", "ƙ", "k'", "sh", "ƴ", "'y"}, to = {"b" .. p[1], "b" .. p[2], "d" .. p[1], "d" .. p[2], "k" .. p[1], "k" .. p[2], "s" .. p[1], "y" .. p[1], "y" .. p[2]} }, }, } m["he"] = { "Hebrew", 9288, "sem-can", "Hebr, Phnx, Brai, Samr", ancestors = "he-med", -- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]] -- Samr strip_diacritics, sort_key in [[Module:scripts/data]] -- Phnx translit in [[Module:scripts/data]] (NOTE: not present before, presumably an accidental omission) } m["hi"] = { "हिंदी", 1568, "inc-hnd", "Deva, Kthi, Newa", translit = { Deva = "hi-translit" }, standard_chars = { Deva = "अआइईउऊएऐओऔकखगघङचछजझञटठडढणतथदधनपफबभमयरलवशषसहत्रज्ञक्षक़ख़ग़ज़झ़ड़ढ़फ़काखागाघाङाचाछाजाझाञाटाठाडाढाणाताथादाधानापाफाबाभामायारालावाशाषासाहात्राज्ञाक्षाक़ाख़ाग़ाज़ाझ़ाड़ाढ़ाफ़ाकिखिगिघिङिचिछिजिझिञिटिठिडिढिणितिथिदिधिनिपिफिबिभिमियिरिलिविशिषिसिहित्रिज्ञिक्षिक़िख़िग़िज़िझ़िड़िढ़िफ़िकीखीगीघीङीचीछीजीझीञीटीठीडीढीणीतीथीदीधीनीपीफीबीभीमीयीरीलीवीशीषीसीहीत्रीज्ञीक्षीक़ीख़ीग़ीज़ीझ़ीड़ीढ़ीफ़ीकुखुगुघुङुचुछुजुझुञुटुठुडुढुणुतुथुदुधुनुपुफुबुभुमुयुरुलुवुशुषुसुहुत्रुज्ञुक्षुक़ुख़ुग़ुज़ुझ़ुड़ुढ़ुफ़ुकूखूगूघूङूचूछूजूझूञूटूठूडूढूणूतूथूदूधूनूपूफूबूभूमूयूरूलूवूशूषूसूहूत्रूज्ञूक्षूक़ूख़ूग़ूज़ूझ़ूड़ूढ़ूफ़ूकेखेगेघेङेचेछेजेझेञेटेठेडेढेणेतेथेदेधेनेपेफेबेभेमेयेरेलेवेशेषेसेहेत्रेज्ञेक्षेक़ेख़ेग़ेज़ेझ़ेड़ेढ़ेफ़ेकैखैगैघैङैचैछैजैझैञैटैठैडैढैणैतैथैदैधैनैपैफैबैभैमैयैरैलैवैशैषैसैहैत्रैज्ञैक्षैक़ैख़ैग़ैज़ैझ़ैड़ैढ़ैफ़ैकोखोगोघोङोचोछोजोझोञोटोठोडोढोणोतोथोदोधोनोपोफोबोभोमोयोरोलोवोशोषोसोहोत्रोज्ञोक्षोक़ोख़ोग़ोज़ोझ़ोड़ोढ़ोफ़ोकौखौगौघौङौचौछौजौझौञौटौठौडौढौणौतौथौदौधौनौपौफौबौभौमौयौरौलौवौशौषौसौहौत्रौज्ञौक्षौक़ौख़ौग़ौज़ौझ़ौड़ौढ़ौफ़ौक्ख्ग्घ्ङ्च्छ्ज्झ्ञ्ट्ठ्ड्ढ्ण्त्थ्द्ध्न्प्फ्ब्भ्म्य्र्ल्व्श्ष्स्ह्त्र्ज्ञ्क्ष्क़्ख़्ग़्ज़्झ़्ड़्ढ़्फ़्।॥०१२३४५६७८९॰", c.punc }, } m["ho"] = { "Hiri Motu", 33617, "crp", "Latn", ancestors = "meu", } m["ht"] = { "Haitian Creole", 33491, "crp", "Latn", ancestors = "ht-sdm", sort_key = { from = { "oun", -- 3 chars "an", "ch", "è", "en", "ng", "ò", "on", "ou", "ui" -- 2 chars }, to = { "o" .. p[4], "a" .. p[1], "c" .. p[1], "e" .. p[1], "e" .. p[2], "n" .. p[1], "o" .. p[1], "o" .. p[2], "o" .. p[3], "u" .. p[1] } }, } m["hu"] = { "Hungarian", 9067, "urj-ugr", "Latn, Hung", ancestors = "ohu", sort_key = { Latn = { from = { "dzs", -- 3 chars "á", "cs", "dz", "é", "gy", "í", "ly", "ny", "ó", "ö", "ő", "sz", "ty", "ú", "ü", "ű", "zs", -- 2 chars }, to = { "d" .. p[2], "a" .. p[1], "c" .. p[1], "d" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "l" .. p[1], "n" .. p[1], "o" .. p[1], "o" .. p[2], "o" .. p[3], "s" .. p[1], "t" .. p[1], "u" .. p[1], "u" .. p[2], "u" .. p[3], "z" .. p[1], } }, }, standard_chars = { Latn = "AaÁáBbCcDdEeÉéFfGgHhIiÍíJjKkLlMmNnOoÓóÖöŐőPpQqRrSsTtUuÚúÜüŰűVvWwXxYyZz", c.punc }, } m["hy"] = { "Armenian", 8785, "hyx", "Armn, Brai", ancestors = "axm", -- Armn translit in [[Module:scripts/data]] override_translit = true, strip_diacritics = { Armn = { remove_diacritics = "՛՜՞՟", from = {"եւ", "<sup>յ</sup>", "<sup>ի</sup>", "<sup>է</sup>", "յ̵", "ՙ", "՚"}, to = {"և", "յ", "ի", "է", "ֈ", "ʻ", "’"} }, }, sort_key = { Armn = { from = { "ու", "եւ", -- 2 chars "և" -- 1 char }, to = { "ւ", "եվ", "եվ" } }, }, } m["hz"] = { "Herero", 33315, "bnt-swb", "Latn", } m["ia"] = { "Interlingua", 35934, "art", "Latn", } m["id"] = { "Indonesian", 9240, "poz-mly", "Latn", ancestors = "ms", standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" .. c.punc, } m["ie"] = { "Interlingue", 35850, "art", "Latn", type = "appendix-constructed", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ}, } m["ig"] = { "Igbo", 33578, "alv-igb", "Latn", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.macron}, sort_key = { from = {"gb", "gh", "gw", "ị", "kp", "kw", "ṅ", "nw", "ny", "ọ", "sh", "ụ"}, to = {"g" .. p[1], "g" .. p[2], "g" .. p[3], "i" .. p[1], "k" .. p[1], "k" .. p[2], "n" .. p[1], "n" .. p[2], "n" .. p[3], "o" .. p[1], "s" .. p[1], "u" .. p[1]} }, } m["ii"] = { "Nuosu", 34235, "tbq-nlo", "Yiii", translit = "ii-translit", } m["ik"] = { "Inupiaq", 27183, "esx-inu", "Latn", sort_key = { from = { "ch", "ġ", "dj", "ḷ", "ł̣", "ñ", "ng", "r̂", "sr", "zr", -- 2 chars "ł", "ŋ", "ʼ" -- 1 char }, to = { "c" .. p[1], "g" .. p[1], "h" .. p[1], "l" .. p[1], "l" .. p[3], "n" .. p[1], "n" .. p[2], "r" .. p[1], "s" .. p[1], "z" .. p[1], "l" .. p[2], "n" .. p[2], "z" .. p[2] } }, } m["io"] = { "Ido", 35224, "art", "Latn", } m["is"] = { "Icelandic", 294, "gmq-ins", "Latn", sort_key = { from = {"á", "ð", "é", "í", "ó", "ú", "ý", "þ", "æ", "ö"}, to = {"a" .. p[1], "d" .. p[1], "e" .. p[1], "i" .. p[1], "o" .. p[1], "u" .. p[1], "y" .. p[1], "z" .. p[1], "z" .. p[2], "z" .. p[3]} }, standard_chars = "AaÁáBbDdÐðEeÉéFfGgHhIiÍíJjKkLlMmNnOoÓóPpRrSsTtUuÚúVvXxYyÝýÞþÆæÖö" .. c.punc, } m["it"] = { "Italian", 652, "roa-itr", "Latn", ancestors = "roa-oit", sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove}, standard_chars = "AaÀàBbCcDdEeÈèÉéFfGgHhIiÌìLlMmNnOoÒòPpQqRrSsTtUuÙùVvZz" .. c.punc, } m["iu"] = { "Inuktitut", 29921, "esx-inu", "Cans, Latn", translit = { Cans = "cr-translit" }, override_translit = true, } m["ja"] = { "Japanese", 5287, "jpx", "Jpan, Latn, Brai", ancestors = "ja-ear", translit = s["jpx-translit"], link_tr = true, display_text = s["jpx-displaytext"], strip_diacritics = s["jpx-stripdiacritics"], sort_key = s["jpx-sortkey"], } m["jv"] = { "Javanese", 33549, "poz", "Latn, Java, Arab", ancestors = "kaw", translit = { Java = "jv-translit" }, link_tr = true, strip_diacritics = { Latn = {remove_diacritics = c.circ} -- Modern jv don't use ê }, sort_key = { Latn = { from = {"å", "dh", "é", "è", "ng", "ny", "th"}, to = {"a" .. p[1], "d" .. p[1], "e" .. p[1], "e" .. p[2], "n" .. p[1], "n" .. p[2], "t" .. p[1]} }, }, } m["ka"] = { "Georgian", 8108, "ccs-gzn", "Geor, Geok, Hebr", -- Hebr is used to write Judeo-Georgian ancestors = "ka-mid", -- Geor, Geok translit in [[Module:scripts/data]] override_translit = true, strip_diacritics = { Geor = s["ka-stripdiacritics"], Geok = s["ka-stripdiacritics"], }, -- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["kg"] = { "Kongo", 33702, "bnt-kng", "Latn", } m["ki"] = { "Kikuyu", 33587, "bnt-kka", "Latn", } m["kj"] = { "Kwanyama", 1405077, "bnt-ova", "Latn", } m["kk"] = { "Kazakh", 9252, "trk-kno", "Cyrl, Latn, Arab", translit = "kk-translit", -- override_translit = true, sort_key = { Cyrl = { from = {"ә", "ғ", "ё", "қ", "ң", "ө", "ұ", "ү", "һ", "і"}, to = {"а" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "у" .. p[2], "х" .. p[1], "ы" .. p[1]} }, }, standard_chars = { Cyrl = "АаӘәБбВвГгҒғДдЕеЁёЖжЗзИиЙйКкҚқЛлМмНнҢңОоӨөПпРрСсТтУуҰұҮүФфХхҺһЦцЧчШшЩщЪъЫыІіЬьЭэЮюЯя", c.punc }, } m["kl"] = { "Greenlandic", 25355, "esx-inu", "Latn", sort_key = { from = {"æ", "ø", "å"}, to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]} } } m["km"] = { "Khmer", 9205, "mkh-kmr", "Khmr", ancestors = "xhm", translit = "km-translit", --This might yield unwanted result unless its entry has {{km-IPA}}. } m["kn"] = { "Kannada", 33673, "dra-kan", "Knda, Tutg", ancestors = "dra-mkn", -- Knda translit in [[Module:scripts/data]] } m["ko"] = { "Korean", 9176, "qfa-kor", "Kore, Brai", ancestors = "ko-ear", translit = { Kore = "ko-translit", }, -- Kore strip_diacritics in [[Module:scripts/data]] } m["kr"] = { "Kanuri", 36094, "ssa-sah", "Latn, Arab", -- the sortkey and strip_diacritics are only for standard Kanuri; when dialectal entries get added, someone will have to work out how the dialects should be represented orthographically strip_diacritics = { Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.breve} }, sort_key = { Latn = { from = {"ǝ", "ny", "ɍ", "sh"}, to = {"e" .. p[1], "n" .. p[1], "r" .. p[1], "s" .. p[1]} }, }, } m["ks"] = { "Kashmiri", 33552, "inc-kas", "Aran, Deva, Shrd, Latn", translit = { Aran = "ks-Aran-translit", Deva = "ks-Deva-translit", -- Shrd translit in [[Module:scripts/data]] }, } -- "kv" is treated as "koi", "kpv", see [[WT:LT]] m["kw"] = { "Cornish", 25289, "cel-brs", "Latn", ancestors = "cnx", sort_key = { from = {"ch"}, to = {"c" .. p[1]} }, } m["ky"] = { "Kyrgyz", 9255, "trk-kkp", "Cyrl, Latn, Arab", translit = { Cyrl = "ky-translit" }, override_translit = true, sort_key = { Cyrl = { from = {"ё", "ң", "ө", "ү"}, to = {"е" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1]} }, }, } m["la"] = { "Latin", 397, "itc-laf", "Latn, Ital", ancestors = "itc-ola", -- Ital translit in [[Module:scripts/data]] (NOTE: formerly not present, probably an accidental omission) display_text = { Latn = s["itc-Latn-displaytext"] }, strip_diacritics = { Latn = s["itc-Latn-stripdiacritics"] }, sort_key = { Latn = s["itc-Latn-sortkey"] }, standard_chars = { Latn = "AaBbCcDdEeFfGgHhIiLlMmNnOoPpQqRrSsTtUuVvXx", c.punc }, } m["lb"] = { "Luxembourgish", 9051, "gmw-hgm", "Latn, Brai", ancestors = "gmw-cfr", sort_key = { Latn = { from = {"ä", "ë", "é"}, to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]} }, }, } m["lg"] = { "Luganda", 33368, "bnt-nyg", "Latn", strip_diacritics = {remove_diacritics = c.acute .. c.circ}, sort_key = { from = {"ŋ"}, to = {"n" .. p[1]} }, } m["li"] = { "Limburgish", 102172, "gmw-frk", "Latn", ancestors = "dum", } m["ln"] = { "Lingala", 36217, "bnt-bmo", "Latn", sort_key = { remove_diacritics = c.acute .. c.circ .. c.caron, from = {"ɛ", "gb", "mb", "mp", "nd", "ng", "nk", "ns", "nt", "ny", "nz", "ɔ"}, to = {"e" .. p[1], "g" .. p[1], "m" .. p[1], "m" .. p[2], "n" .. p[1], "n" .. p[2], "n" .. p[3], "n" .. p[4], "n" .. p[5], "n" .. p[6], "n" .. p[7], "o" .. p[1]} }, } m["lo"] = { "Lao", 9211, "tai-swe", "Laoo", -- also Tai Noi/Lao Buhan script translit = "lo-translit", sort_key = "Laoo-sortkey", standard_chars = "0-9ກຂຄງຈຊຍດຕຖທນບປຜຝພຟມຢຣລວສຫອຮຯ-ໝ" .. c.punc, } m["lt"] = { "Lithuanian", 9083, "bat-eas", "Latn", ancestors = "olt", display_text = "lt-common", strip_diacritics = "lt-common", sort_key = "lt-common", standard_chars = "AaĄąBbCcČčDdEeĘęĖėFfGgHhIiĮįYyJjKkLlMmNnOoPpRrSsŠšTtUuŲųŪūVvZzŽž" .. c.punc, } m["lu"] = { "Luba-Katanga", 36157, "bnt-lub", "Latn", } m["lv"] = { "Latvian", 9078, "bat-eas", "Latn", strip_diacritics = { -- This attempts to convert vowels with tone marks to vowels either with or without macrons. Specifically, there should be no macrons if the vowel is part of a diphthong (including resonant diphthongs such pìrksts -> pirksts not #pīrksts). What we do is first convert the vowel + tone mark to a vowel + tilde in a decomposed fashion, then remove the tilde in diphthongs, then convert the remaining vowel + tilde sequences to macroned vowels, then delete any other tilde. We leave already-macroned vowels alone: Both e.g. ar and ār occur before consonants. FIXME: This still might not be sufficient. from = {"([Ee])" .. c.cedilla, "[" .. c.grave .. c.circ .. c.tilde .."]", "([aAeEiIoOuU])" .. c.tilde .."?([lrnmuiLRNMUI])" .. c.tilde .. "?([^aAeEiIoOuU])", "([aAeEiIoOuU])" .. c.tilde .."?([lrnmuiLRNMUI])" .. c.tilde .."?$", "([iI])" .. c.tilde .. "?([eE])" .. c.tilde .. "?", "([aAeEiIuU])" .. c.tilde, c.tilde}, to = {"%1", c.tilde, "%1%2%3", "%1%2", "%1%2", "%1" .. c.macron} }, sort_key = { from = {"ā", "č", "ē", "ģ", "ī", "ķ", "ļ", "ņ", "š", "ū", "ž"}, to = {"a" .. p[1], "c" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "k" .. p[1], "l" .. p[1], "n" .. p[1], "s" .. p[1], "u" .. p[1], "z" .. p[1]} }, standard_chars = "AaĀāBbCcČčDdEeĒēFfGgĢģHhIiĪīJjKkĶķLlĻļMmNnŅņOoPpRrSsŠšTtUuŪūVvZzŽž" .. c.punc, } m["mg"] = { "Malagasy", 7930, "poz-bre", "Latn, Arab", } m["mh"] = { "Marshallese", 36280, "poz-mic", "Latn", sort_key = { from = {"ā", "ļ", "m̧", "ņ", "n̄", "o̧", "ō", "ū"}, to = {"a" .. p[1], "l" .. p[1], "m" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "o" .. p[2], "u" .. p[1]} }, } m["mi"] = { "Māori", 36451, "poz-pep", "Latn", sort_key = { remove_diacritics = c.macron, from = {"ng", "wh"}, to = {"n" .. p[1], "w" .. p[1]} }, } m["mk"] = { "Macedonian", 9296, "zls", "Cyrl, Polyt", ancestors = "cu", translit = { Cyrl = "mk-translit", -- FIXME: formerly no translit specified for Polyt; unclear if the default [[Module:grc-translit]] is -- acceptable, so we disable it for now Polyt = false, }, strip_diacritics = { Cyrl = { remove_diacritics = c.acute, remove_exceptions = {"Ѓ", "ѓ", "Ќ", "ќ"} }, }, sort_key = { Cyrl = { remove_diacritics = c.grave, remove_exceptions = {"ѓ", "ќ"}, from = {"ѓ", "ѕ", "ј", "љ", "њ", "ќ", "џ"}, to = {"д" .. p[1], "з" .. p[1], "и" .. p[1], "л" .. p[1], "н" .. p[1], "т" .. p[1], "ч" .. p[1]} }, }, -- Polyt display_text, strip_diacritics, sort_key in [[Module:scripts/data]] standard_chars = { Cyrl = "АаБбВвГгДдЃѓЕеЖжЗзЅѕИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЌќУуФфХхЦцЧчЏџШш", c.punc }, } m["ml"] = { "Malayalam", 36236, "dra-mal", "Mlym", override_translit = true, -- Mlym translit in [[Module:scripts/data]] } m["mn"] = { "Mongolian", 9246, "xgn-cen", "Cyrl, Mong, Latn, Brai", ancestors = "cmg", translit = { Cyrl = "mn-translit", -- Mong translit in [[Module:scripts/data]] }, override_translit = true, -- Mong display_text and strip_diacritics in [[Module:scripts/data]] strip_diacritics = { Cyrl = {remove_diacritics = c.grave .. c.acute}, }, sort_key = { Cyrl = { remove_diacritics = c.grave, from = {"ё", "ө", "ү"}, to = {"е" .. p[1], "о" .. p[1], "у" .. p[1]} }, }, standard_chars = { Cyrl = "АаБбВвГгДдЕеЁёЖжЗзИиЙйЛлМмНнОоӨөРрСсТтУуҮүХхЦцЧчШшЫыЬьЭэЮюЯя—", Brai = c.braille, c.punc }, } -- "mo" is treated as "ro", see [[WT:LT]] m["mr"] = { "Marathi", 1571, "inc-sou", "Deva, Modi", ancestors = "omr", translit = { Deva = "mr-translit", Modi = "mr-Modi-translit", }, strip_diacritics = { Deva = { from = {"च़", "ज़", "झ़"}, to = {"च", "ज", "झ"} }, }, } m["ms"] = { "Malay", 9237, "poz-mly", "Latn, Arab", ancestors = "ms-cla", standard_chars = { Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz", c.punc }, } m["mt"] = { "Maltese", 9166, "sem-arb", "Latn", display_text = { from = {"'"}, to = {"’"} }, strip_diacritics = { from = {"’"}, to = {"'"}, }, ancestors = "sqr", sort_key = { from = { "ċ", "ġ", "ż", -- Convert into PUA so that decomposed form does not get caught by the next step. "([cgz])", -- Ensure "c" comes after "ċ", "g" comes after "ġ" and "z" comes after "ż". "g" .. p[1] .. "ħ", -- "għ" after initial conversion of "g". p[3], p[4], "ħ", "ie", p[5] -- Convert "ċ", "ġ", "ħ", "ie", "ż" into final output. }, to = { p[3], p[4], p[5], "%1" .. p[1], "g" .. p[2], "c", "g", "h" .. p[1], "i" .. p[1], "z" } }, } m["my"] = { "Burmese", 9228, "tbq-brm", "Mymr", ancestors = "obr", translit = "my-translit", override_translit = true, sort_key = { from = {"ျ", "ြ", "ွ", "ှ", "ဿ"}, to = {"္ယ", "္ရ", "္ဝ", "္ဟ", "သ္သ"} }, } m["na"] = { "Nauruan", 13307, "poz-mic", "Latn", } m["nb"] = { "Norwegian Bokmål", 25167, "gmq", "Latn", wikimedia_codes = "no", ancestors = "gmq-mno, da", -- da as an (but not the) ancestor of nb was agreed on - do not change without discussion sort_key = s["no-sortkey"], standard_chars = s["no-standardchars"], } m["nd"] = { "Northern Ndebele", 35613, "bnt-ngu", "Latn", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, } m["ne"] = { "Nepali", 33823, "inc-pae", "Deva, Newa", translit = { Deva = "ne-translit" }, } m["ng"] = { "Ndonga", 33900, "bnt-ova", "Latn", } m["nl"] = { "Dutch", 7411, "gmw-frk", "Latn, Brai", ancestors = "dum", sort_key = { Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.ringabove .. c.cedilla .. "'"}, }, standard_chars = { Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZzÄäËëÏïÖöÜü", Brai = c.braille, c.punc }, } m["nn"] = { "Norwegian Nynorsk", 25164, "gmq-wes", "Latn", ancestors = "gmq-mno", strip_diacritics = { remove_diacritics = c.grave .. c.acute, }, sort_key = s["no-sortkey"], standard_chars = s["no-standardchars"], } m["no"] = { "Norwegian", 9043, "gmq-wes", "Latn", ancestors = "gmq-mno", sort_key = s["no-sortkey"], standard_chars = s["no-standardchars"], } m["nr"] = { "Southern Ndebele", 36785, "bnt-ngu", "Latn", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, } m["nv"] = { "Navajo", 13310, "apa", "Latn, Brai", sort_key = { remove_diacritics = c.acute .. c.ogonek, from = { "chʼ", "tłʼ", "tsʼ", -- 3 chars "ch", "dl", "dz", "gh", "hw", "kʼ", "kw", "sh", "tł", "ts", "zh", -- 2 chars "ł", "ʼ" -- 1 char }, to = { "c" .. p[2], "t" .. p[2], "t" .. p[4], "c" .. p[1], "d" .. p[1], "d" .. p[2], "g" .. p[1], "h" .. p[1], "k" .. p[1], "k" .. p[2], "s" .. p[1], "t" .. p[1], "t" .. p[3], "z" .. p[1], "l" .. p[1], "z" .. p[2] } }, } m["ny"] = { "Chichewa", 33273, "bnt-nys", "Latn", strip_diacritics = {remove_diacritics = c.acute .. c.circ}, sort_key = { from = {"ng'"}, to = {"ng"} }, } m["oc"] = { "Occitan", 14185, "roa-ocr", "Latn, Hebr", ancestors = "pro", sort_key = { Latn = { remove_diacritics = c.grave .. c.acute .. c.diaer .. c.cedilla, from = {"([lns])·h"}, to = {"%1h"} }, }, -- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["oj"] = { "Ojibwe", 33875, "alg", "Cans, Latn", sort_key = { Latn = { from = {"aa", "ʼ", "ii", "oo", "sh", "zh"}, to = {"a" .. p[1], "h" .. p[1], "i" .. p[1], "o" .. p[1], "s" .. p[1], "z" .. p[1]} }, }, } m["om"] = { "Oromo", 33864, "cus-eas", "Latn, Ethi", } m["or"] = { "Odia", 33810, "inc-eas", "Orya", ancestors = "inc-mor", translit = "or-translit", } m["os"] = { "Ossetian", 33968, "xsc-sar", "Cyrl, Geor, Latn", ancestors = "oos", translit = { Cyrl = "os-translit", -- Geor translit in [[Module:scripts/data]] }, override_translit = true, display_text = { Cyrl = { from = {"æ"}, to = {"ӕ"} }, Latn = { from = {"ӕ"}, to = {"æ"} }, }, strip_diacritics = { Cyrl = { remove_diacritics = c.grave .. c.acute, from = {"æ"}, to = {"ӕ"} }, Latn = { from = {"ӕ"}, to = {"æ"} }, }, sort_key = { Cyrl = { from = {"ӕ", "гъ", "дж", "дз", "ё", "къ", "пъ", "тъ", "хъ", "цъ", "чъ"}, to = {"а" .. p[1], "г" .. p[1], "д" .. p[1], "д" .. p[2], "е" .. p[1], "к" .. p[1], "п" .. p[1], "т" .. p[1], "х" .. p[1], "ц" .. p[1], "ч" .. p[1]} }, }, } m["pa"] = { "Punjabi", 58635, "inc-pan", "Guru, Aran", translit = { Guru = "Guru-translit", Aran = "pa-Aran-translit", }, strip_diacritics = { Aran = { remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna, from = {"ݨ", "ࣇ"}, to = {"ن", "ل"} }, }, } m["pi"] = { "Pali", 36727, "inc-mid", "Latn, Brah, Deva, Beng, Sinh, Mymr, Thai, Lana, Laoo, Khmr, Cakm", --and also Khom ancestors = "sa", translit = { -- Brah translit in [[Module:scripts/data]] Deva = "sa-translit", Beng = "pi-translit", Sinh = "si-translit", Mymr = "pi-translit", Thai = "pi-translit", Lana = "pi-translit", Laoo = "pi-translit", Khmr = "pi-translit", Cakm = "Cakm-translit", }, strip_diacritics = { Thai = { from = {"ึ", u(0xF700), u(0xF70F)}, -- FIXME: Not clear what's going on with the PUA characters here. to = {"ิํ", "ฐ", "ญ"} }, Mymr = { remove_diacritics = c.VS01, }, }, sort_key = { -- FIXME: This needs to be converted into the current standardized format. from = {"ā", "ī", "ū", "ḍ", "ḷ", "m[" .. c.dotabove .. c.dotbelow .. "]", "ṅ", "ñ", "ṇ", "ṭ", "ॐ", "([เโ])([ก-ฮ])", "([ເໂ])([ກ-ຮ])", "ᩔ", "ᩕ", "ᩖ", "ᩘ", "([ᨭ-ᨱ])ᩛ", "([ᨷ-ᨾ])ᩛ", "ᩤ", u(0xFE00), u(0x200D)}, to = {"a~", "i~", "u~", "d~", "l~", "m~", "n~", "n~~", "n~~~", "t~", "ओँ", "%2%1", "%2%1", "ᩈ᩠ᩈ", "᩠ᩁ", "᩠ᩃ", "ᨦ᩠", "%1᩠ᨮ", "%1᩠ᨻ", "ᩣ"} }, } m["pl"] = { "Polish", 809, "zlw-lch", "Latn", ancestors = "zlw-mpl", sort_key = { from = {"ą", "ć", "ę", "ł", "ń", "ó", "ś", "ź", "ż"}, to = {"a" .. p[1], "c" .. p[1], "e" .. p[1], "l" .. p[1], "n" .. p[1], "o" .. p[1], "s" .. p[1], "z" .. p[1], "z" .. p[2]} }, standard_chars = "AaĄąBbCcĆćDdEeĘęFfGgHhIiJjKkLlŁłMmNnŃńOoÓóPpRrSsŚśTtUuWwYyZzŹźŻż" .. c.punc, } m["ps"] = { "Pashto", 58680, "ira-pat", "Arab", strip_diacritics = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.zwarakay .. c.superalef}, } m["pt"] = { "Portuguese", 5146, "roa-gap", "Latn, Brai", sort_key = { Latn = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.diaer .. c.cedilla, from = {"ª", "æ", "º", "œ"}, to = {"a", "ae", "o", "oe"} }, }, standard_chars = { Latn = "AaÁáÂâÃãBbCcÇçDdEeÉéÊêFfGgHhIiÍíJjLlMmNnOoÓóÔôÕõPpQqRrSsTtUuÚúVvXxZz", Brai = c.braille, c.punc }, } m["qu"] = { "Quechua", 5218, "qwe", "Latn", } m["rm"] = { "Romansh", 13199, "roa-rhe", ancestors = "rm-old", "Latn", sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.small_e}, } m["ro"] = { "Romanian", 7913, "roa-eas", "Latn, Cyrl, Cyrs", translit = { Cyrl = "ro-translit" }, sort_key = { Latn = { remove_diacritics = c.grave .. c.acute, from = {"ă", "â", "î", "ș", "ț"}, to = {"a" .. p[1], "a" .. p[2], "i" .. p[1], "s" .. p[1], "t" .. p[1]} }, Cyrl = { from = {"ӂ"}, to = {"ж" .. p[1]} }, }, -- Cyrs strip_diacritics, sort_key in [[Module:scripts/data]]; presumably not present standard_chars = { Latn = "AaĂăÂâBbCcDdEeFfGgHhIiÎîJjLlMmNnOoPpRrSsȘșTtȚțUuVvXxZz", Cyrl = "АаБбВвГгДдЕеЖжӁӂЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЫыЬьЭэЮюЯя", c.punc }, } m["ru"] = { "Russian", 7737, "zle", "Cyrl, Brai", ancestors = "zle-mru", translit = { Cyrl = "ru-translit" }, display_text = { Cyrl = { from = {"'"}, to = {"’"} }, }, strip_diacritics = { Cyrl = { remove_diacritics = c.grave .. c.acute .. c.diaer, remove_exceptions = {"Ё", "ё", "Ѣ̈", "ѣ̈", "Я̈", "я̈"}, from = {"’"}, to = {"'"}, }, }, sort_key = { Cyrl = { remove_diacritics = c.grave .. c.acute .. c.diaer, from = { "і", "ѣ", "ѳ", "ѵ" }, to = { "и" .. p[1], "ь" .. p[1], "я" .. p[2], "я" .. p[3] } }, }, standard_chars = { Cyrl = "АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя—", Brai = c.braille, (c.punc:gsub("'", "")) -- Exclude apostrophe. }, } m["rw"] = { "Rwanda-Rundi", 3217514, "bnt-glb", "Latn", strip_diacritics = {remove_diacritics = c.acute .. c.circ .. c.macron .. c.caron}, } m["sa"] = { "Sanskrit", 11059, "inc", "as-Beng, Bali, Beng, Bhks, Brah, Mymr, xwo-Mong, Deva, Gujr, Guru, Gran, Hani, Java, Kthi, Knda, Kawi, Khar, Khmr, Laoo, Mlym, mnc-Mong, Marc, Modi, Mong, Nand, Newa, Orya, Phag, Ranj, Saur, Shrd, Sidd, Sinh, Soyo, Lana, Takr, Taml, Tang, Telu, Thai, Tibt, Tutg, Tirh, Zanb", --and also Khom; script codes sorted by canonical name rather than code for [[MOD:sa-convert]] translit = { Beng = "sa-Beng-translit", ["as-Beng"] = "sa-Beng-translit", -- Brah translit in [[Module:scripts/data]] Deva = "sa-translit", Gujr = "sa-Gujr-translit", Guru = "sa-Guru-translit", Java = "sa-Java-translit", Kthi = "sa-Kthi-translit", Khmr = "pi-translit", Knda = "sa-Knda-translit", Lana = "pi-translit", Laoo = "pi-translit", Mlym = "sa-Mlym-translit", Modi = "sa-Modi-translit", -- Mong, mnc-Mong, xwo-Mong translit in [[Module:scripts/data]] -- NOTE: Formerly used xal-translit for transliterating xwo-Mong but that only handles Cyrillic; it has -- code to transliterate xwo-Mong but it's broken so I've replaced it with the default xwo-translit. Mymr = "pi-translit", Orya = "sa-Orya-translit", -- Shrd translit in [[Module:scripts/data]] -- Sidd translit in [[Module:scripts/data]] Sinh = "si-translit", Taml = "sa-Taml-translit", Telu = "sa-Telu-translit", Thai = "pi-translit", -- Tibt translit in [[Module:scripts/data]] }, -- Mong display_text and strip_diacritics in [[Module:scripts/data]] -- Tibt display_text, strip_diacritics, sort_key in [[Module:scripts/data]] strip_diacritics = { Deva = s["sa-Deva-stripdiacritics"], Mymr = { remove_diacritics = c.VS01, }, Thai = { from = {"ึ", u(0xF700), u(0xF70F)}, -- FIXME: Not clear what's going on with the PUA characters here. to = {"ิํ", "ฐ", "ญ"} }, }, sort_key = { Deva = s["sa-Deva-stripdiacritics"], -- until we have a proper Sanskrit sorting algorithm. Lana = { -- Tai Tham from = {"ᩔ", "ᩕ", "ᩖ", "ᩘ", "([ᨭ-ᨱ])ᩛ", "([ᨷ-ᨾ])ᩛ", "ᩤ"}, to = {"ᩈ᩠ᩈ", "᩠ᩁ", "᩠ᩃ", "ᨦ᩠", "%1᩠ᨮ", "%1᩠ᨻ", "ᩣ"}, }, Laoo = "Laoo-sortkey", Latn = { from = {"ā", "ī", "ū", "ḍ", "ḷ", "ḹ", "m[" .. c.dotabove .. c.dotbelow .. "]", "ṅ", "ñ", "ṇ", "ṛ", "ṝ", "ś", "ṣ", "ṭ"}, to = {"a~", "i~", "u~", "d~", "l~", "l~~", "m~", "n~", "n~~", "n~~~", "r~", "r~~", "s~", "s~~", "t~"}, }, Mymr = { remove_diacritics = c.VS01, }, Thai = "Thai-sortkey", -- FIXME: The previous sort key which mixed all scripts removed ZWJ; I don't know which script(s) this was -- intended for and there are no other languages which remove it in the sort key AFAIK. If it needs to be -- removed, specify the script(s) it needs to be removed under or add handling for the "all" script that applies -- regardless of script. --all = { -- remove_diacritics = c.ZWJ, --}, }, } m["sc"] = { "Sardinian", 33976, "roa-sou", "Latn", ancestors = "sc-old", } m["sd"] = { "Sindhi", 33997, "inc-snd", "Arab, Deva, Sind, Khoj", translit = { Sind = "Sind-translit", Arab = "sd-Arab-translit" }, strip_diacritics = { Arab = { remove_diacritics = c.kashida .. c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef, from = {"ٱ"}, to = {"ا"} }, }, } m["se"] = { "Northern Sami", 33947, "smi", "Latn", display_text = { from = {"'"}, to = {"ˈ"} }, strip_diacritics = {remove_diacritics = c.macron .. c.dotbelow .. "'ˈ"}, sort_key = { from = {"á", "č", "đ", "ŋ", "š", "ŧ", "ž"}, to = {"a" .. p[1], "c" .. p[1], "d" .. p[1], "n" .. p[1], "s" .. p[1], "t" .. p[1], "z" .. p[1]} }, standard_chars = "AaÁáBbCcČčDdĐđEeFfGgHhIiJjKkLlMmNnŊŋOoPpRrSsŠšTtŦŧUuVvZzŽž" .. c.punc, } m["sg"] = { "Sango", 33954, "crp", "Latn", ancestors = "ngb", } m["sh"] = { "Serbo-Croatian", 9301, "zls", "Latn, Cyrl, Glag, Arab", ietf_subtag = "hbs", -- ISO 639-3 code, since "sh" is deprecated from ISO 639-1 wikimedia_codes = "sh, bs, hr, sr", strip_diacritics = { Latn = { remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve, remove_exceptions = {"Ć", "ć", "Ś", "ś", "Ź", "ź"} }, Cyrl = { remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve, remove_exceptions = {"З́", "з́", "С́", "с́"} }, }, sort_key = { Latn = { remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve, remove_exceptions = {"ć", "ś", "ź"}, from = {"č", "ć", "dž", "đ", "lj", "nj", "š", "ś", "ž", "ź"}, to = {"c" .. p[1], "c" .. p[2], "d" .. p[1], "d" .. p[2], "l" .. p[1], "n" .. p[1], "s" .. p[1], "s" .. p[2], "z" .. p[1], "z" .. p[2]} }, Cyrl = { remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve, remove_exceptions = {"з́", "с́"}, from = {"ђ", "з́", "ј", "љ", "њ", "с́", "ћ", "џ"}, to = {"д" .. p[1], "з" .. p[1], "и" .. p[1], "л" .. p[1], "н" .. p[1], "с" .. p[1], "т" .. p[1], "ч" .. p[1]} }, }, standard_chars = { Latn = "AaBbCcČčĆćDdĐđEeFfGgHhIiJjKkLlMmNnOoPpRrSsŠšTtUuVvZzŽž", Cyrl = "АаБбВвГгДдЂђЕеЖжЗзИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЋћУуФфХхЦцЧчЏџШш", c.punc }, } m["si"] = { "Sinhalese", 13267, "inc-ins", "Sinh", translit = "si-translit", override_translit = true, } m["sk"] = { "Slovak", 9058, "zlw", "Latn", ancestors = "zlw-osk", sort_key = {remove_diacritics = c.acute .. c.circ .. c.diaer .. c.caron}, standard_chars = "AaÁáÄäBbCcČčDdĎďEeÉéFfGgHhIiÍíJjKkLlĹ弾MmNnŇňOoÓóÔôPpRrŔŕSsŠšTtŤťUuÚúVvYyÝýZzŽž" .. c.punc, } m["sl"] = { "Slovene", 9063, "zls", "Latn", strip_diacritics = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.dgrave .. c.invbreve .. c.dotbelow, remove_exceptions = {"Ć", "ć", "Ǵ", "ǵ", "Ś", "ś", "Ź", "ź"}, from = {"Ə", "ə", "Ł", "ł"}, to = {"E", "e", "L", "l"}, }, sort_key = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dotabove .. c.ringabove .. c.dgrave .. c.invbreve .. c.dotbelow .. c.ringbelow .. c.ogonek, remove_exceptions = {"ć", "ǵ", "ś", "ź"}, from = {"ä", "č", "ć", "đ", "ə", "ë", "ǧ", "ǵ", "ï", "ł", "ö", "š", "ś", "ü", "ž", "ź"}, to = {"a" .. p[1], "c" .. p[1], "c" .. p[2], "d" .. p[1], "e", "e" .. p[1], "g" .. p[1], "g" .. p[2], "i" .. p[1], "l", "o" .. p[1], "s" .. p[1], "s" .. p[2], "u" .. p[1], "z" .. p[1], "z" .. p[2]}, }, standard_chars = "AaBbCcČčDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsŠšTtUuVvZzŽž" .. c.punc, } m["sm"] = { "Samoan", 34011, "poz-pnp", "Latn", } m["sn"] = { "Shona", 34004, "bnt-sho", "Latn", strip_diacritics = {remove_diacritics = c.acute}, } m["so"] = { "Somali", 13275, "cus-som", "Latn, Arab, Osma", strip_diacritics = { Latn = {remove_diacritics = c.grave .. c.acute .. c.circ} }, } m["sq"] = { "Albanian", 8748, "sqj", "Latn, Grek, Arab, Elba, Todr, Vith", translit = { Elba = "Elba-translit", Vith = "Vith-translit", }, -- Grek display_text, strip_diacritics, sort_key in [[Module:scripts/data]] strip_diacritics = { Latn = { remove_diacritics = c.acute .. c.circ .. c.macron, from = {'^[ie] (%w)', '^të (%w)'}, to = {'%1', '%1'}, }, }, sort_key = { Latn = { remove_diacritics = c.acute .. c.circ .. c.macron .. c.tilde .. c.breve .. c.caron, from = {'^[ie] (%w)', '^të (%w)', 'ç', 'dh', 'ë', 'gj', 'll', 'nj', 'rr', 'sh', 'th', 'xh', 'zh'}, to = {'%1', '%1', 'c'..p[1], 'd'..p[1], 'e'..p[1], 'g'..p[1], 'l'..p[1], 'n'..p[1], 'r'..p[1], 's'..p[1], 't'..p[1], 'x'..p[1], 'z'..p[1]}, } -- TODO: Grek if the default sort key is unsuitable }, standard_chars = { Latn = "AaBbCcÇçDdEeËëFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvXxYyZz", c.punc }, } m["ss"] = { "Swazi", 34014, "bnt-ngu", "Latn", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, } m["st"] = { "Sotho", 34340, "bnt-sts", "Latn", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, } m["su"] = { "Sundanese", 34002, "poz-msa", "Latn, Sund, Arab", ancestors = "osn", translit = { Sund = "Sund-translit" }, } m["sv"] = { "Swedish", 9027, "gmq-eas", "Latn", ancestors = "gmq-osw-lat", sort_key = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla .. "':", remove_exceptions = {"å"}, from = {"ø", "æ", "œ", "ß", "ꜩ", "å", "aͤ", "oͤ"}, to = {"ö", "ae", "oe", "ss", "tz", "z" .. p[1], "ä", "ö"} }, standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvXxYyÅåÄäÖö" .. c.punc, } m["sw"] = { "Swahili", 7838, "bnt-swh", "Latn, Arab", sort_key = { Latn = { from = {"ng'"}, to = {"ng" .. p[1]} }, }, } m["ta"] = { "Tamil", 5885, "dra-tam", "Taml", ancestors = "ta-mid", translit = "ta-translit", override_translit = true, } m["te"] = { "Telugu", 8097, "dra-tel", "Telu", translit = "te-translit", override_translit = true, } m["tg"] = { "Tajik", 9260, "ira-swi", "Cyrl, Arab, Latn", ancestors = "fa-cls", translit = { Cyrl = "tg-translit" }, override_translit = true, strip_diacritics = { Cyrl = s["tg-stripdiacritics"], Latn = s["tg-stripdiacritics"], }, sort_key = { Cyrl = { from = {"ғ", "ё", "ӣ", "қ", "ӯ", "ҳ", "ҷ"}, to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "к" .. p[1], "у" .. p[1], "х" .. p[1], "ч" .. p[1]} }, }, } m["th"] = { "Thai", 9217, "tai-swe", "Thai, Khomt, Brai", translit = { Thai = "th-translit" }, sort_key = { Thai = "Thai-sortkey" }, } m["ti"] = { "Tigrinya", 34124, "sem-eth", "Ethi", translit = "Ethi-translit", } m["tk"] = { "Turkmen", 9267, "trk-ogz", "Latn, Cyrl, Arab", strip_diacritics = { Latn = s["tk-stripdiacritics"], Cyrl = s["tk-stripdiacritics"], }, sort_key = { Latn = { from = {"ç", "ä", "ž", "ň", "ö", "ş", "ü", "ý"}, to = {"c" .. p[1], "e" .. p[1], "j" .. p[1], "n" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1], "y" .. p[1]} }, Cyrl = { from = {"ё", "җ", "ң", "ө", "ү", "ә"}, to = {"е" .. p[1], "ж" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "э" .. p[1]} }, }, ancestors = "trk-eog", } m["tl"] = { "Tagalog", 34057, "phi", "Latn, Tglg", translit = { Tglg = "tl-translit" }, override_translit = true, strip_diacritics = { Latn = {remove_diacritics = c.grave .. c.acute .. c.circ} }, standard_chars = { Latn = "AaBbKkDdEeGgHhIiLlMmNnOoPpRrSsTtUuWwYy", c.punc }, sort_key = { Latn = "tl-sortkey", }, } m["tn"] = { "Tswana", 34137, "bnt-sts", "Latn", } m["to"] = { "Tongan", 34094, "poz-ton", "Latn", strip_diacritics = {remove_diacritics = c.acute}, sort_key = {remove_diacritics = c.macron}, } m["tr"] = { "Turkish", 256, "trk-ogz", "Latn", ancestors = "ota", dotted_dotless_i = true, sort_key = { from = { -- Ignore circumflex, but account for capital Î wrongly becoming ı + circ due to dotted dotless I logic. "ı" .. c.circ, c.circ, "i", -- Ensure "i" comes after "ı". "ç", "ğ", "ı", "ö", "ş", "ü" }, to = { "i", "", "i" .. p[1], "c" .. p[1], "g" .. p[1], "i", "o" .. p[1], "s" .. p[1], "u" .. p[1] } }, standard_chars = "AaÂâBbCcÇçDdEeFfGgĞğHhIıİiÎîJjKkLlMmNnOoÖöPpRrSsŞşTtUuÛûÜüVvYyZz" .. c.punc, } m["ts"] = { "Tsonga", 34327, "bnt-tsr", "Latn", } m["tt"] = { "Tatar", 25285, "trk-kbu", "Cyrl, Latn, Arab", translit = { Cyrl = "tt-translit", Arab = "tt-translit" }, --override_translit = true, -- enable override until Module code can detect Russian loans such as [[аэропорт]] dotted_dotless_i = true, sort_key = { Cyrl = { from = {"ә", "ў", "ғ", "ё", "җ", "қ", "ң", "ө", "ү", "һ"}, to = {"а" .. p[1], "в" .. p[1], "г" .. p[1], "е" .. p[1], "ж" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "х" .. p[1]} }, Latn = { from = { "i", -- Ensure "i" comes after "ı". "ä", "ə", "ç", "ğ", "ı", "ñ", "ŋ", "ö", "ɵ", "ş", "ü" }, to = { "i" .. p[1], "a" .. p[1], "a" .. p[2], "c" .. p[1], "g" .. p[1], "i", "n" .. p[1], "n" .. p[2], "o" .. p[1], "o" .. p[2], "s" .. p[1], "u" .. p[1] } }, }, } -- "tw" is treated as "ak", see [[WT:LT]] m["ty"] = { "Tahitian", 34128, "poz-pep", "Latn", } m["ug"] = { "Uyghur", 13263, "trk-kar", "Arab, Latn, Cyrl", ancestors = "chg", translit = { Arab = "ug-translit", Cyrl = "ug-translit", }, override_translit = true, } m["uk"] = { "Ukrainian", 8798, "zle", "Cyrl", ancestors = "zle-muk", translit = "uk-translit", strip_diacritics = {remove_diacritics = c.grave .. c.acute}, sort_key = { remove_diacritics = c.grave .. c.acute, from = { "ї", -- 2 chars "ґ", "є", "і" -- 1 char }, to = { "и" .. p[2], "г" .. p[1], "е" .. p[1], "и" .. p[1] } }, standard_chars = "АаБбВвГгДдЕеЄєЖжЗзИиІіЇїЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЬьЮюЯя" .. c.punc:gsub("'", ""), -- Exclude apostrophe. } m["ur"] = { "Urdu", 1617, "inc-hnd", "Aran, Hebr", translit = { Aran = "ur-translit" }, strip_diacritics = { Aran = { -- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif from = {"هٔ", "ۂ", "ٱ"}, to = {"ہ", "ہ", "ا"}, remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.superalef }, }, -- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]] standard_chars = { Aran = "ایببپتثجچحخدذرزژسشصضطظعغفقکگلࣇڷمنݨوؤہھئٹڈڑآے", c.punc, }, } m["uz"] = { "Uzbek", 9264, "trk-kar", "Latn, Cyrl, Arab", ancestors = "chg", translit = { Cyrl = "uz-translit" }, sort_key = { Latn = { from = {"oʻ", "gʻ", "sh", "ch", "ng"}, to = {"z" .. p[1], "z" .. p[2], "z" .. p[3], "z" .. p[4], "z" .. p[5]} }, Cyrl = { from = {"ё", "ў", "қ", "ғ", "ҳ"}, to = {"е" .. p[1], "я" .. p[1], "я" .. p[2], "я" .. p[3], "я" .. p[4]} }, }, strip_diacritics = { Arab = "ar-stripdiacritics", }, } m["ve"] = { "Venda", 32704, "bnt-bso", "Latn", } m["vi"] = { "Vietnamese", 9199, "mkh-vie", "Latn, Hani", ancestors = "mkh-mvi", sort_key = { Latn = "vi-sortkey", Hani = "Hani-sortkey", }, } m["vo"] = { "Volapük", 36986, "art", "Latn", } m["wa"] = { "Walloon", 34219, "roa-oil", "Latn", sort_key = s["roa-oil-sortkey"], } m["wo"] = { "Wolof", 34257, "alv-fwo", "Latn, Arab, Gara", } m["xh"] = { "Xhosa", 13218, "bnt-ngu", "Latn", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, } m["yi"] = { "Yiddish", 8641, "gmw-hgm", "Hebr, Latn", ancestors = "gmh", translit = { Hebr = "yi-translit", }, -- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["yo"] = { "Yoruba", 34311, "alv-yor", "Latn, Arab", strip_diacritics = { Latn = {remove_diacritics = c.grave .. c.acute .. c.macron} }, sort_key = { Latn = { from = {"ẹ", "ɛ", "gb", "ị", "kp", "ọ", "ɔ", "ṣ", "sh", "ụ"}, to = {"e" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "k" .. p[1], "o" .. p[1], "o" .. p[1], "s" .. p[1], "s" .. p[1], "u" .. p[1]} }, }, } m["za"] = { "Zhuang", 13216, "tai", "Latn, Hani", sort_key = { Latn = "za-sortkey", Hani = "Hani-sortkey", }, } m["zh"] = { "Chinese", 7850, "zhx", "Hants, Latn, Bopo, Nshu, Brai", ancestors = "ltc", generate_forms = "zh-generateforms", translit = { Hani = "zh-translit", Bopo = "zh-translit", }, sort_key = { Hani = "Hani-sortkey" }, } m["zu"] = { "Zulu", 10179, "bnt-ngu", "Latn", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, } return require("Module:languages").finalizeData(m, "भाषा") s8julygvetquv3wzt6p28z6zm77pkzi मॉड्यूल:languages/data/3/u 828 304605 487606 477495 2026-09-01T18:15:54Z SM7 6218 updating... 487606 Scribunto text/plain local m_langdata = require("Module:languages/data") -- Loaded on demand, as it may not be needed (depending on the data). local function u(...) u = require("Module:string utilities").char return u(...) end local c = m_langdata.chars local p = m_langdata.puaChars local s = m_langdata.shared local m = {} m["uam"] = { "Uamué", 3441418, } m["uan"] = { "Kuan", 6441085, } m["uar"] = { "Tairuma", 7676386, "paa-eel", "Latn", } m["uba"] = { "Ubang", 3914467, "nic-ben", "Latn", } m["ubi"] = { "Ubi", 56264, "cdc-est", "Latn", } m["ubl"] = { "Buhi'non Bikol", 18664494, "phi", "Latn", } m["ubr"] = { "Ubir", 3547642, "poz-ocw", "Latn", } m["ubu"] = { "Umbu-Ungu", 12953245, "ngf-hag", "Latn", } m["uby"] = { "Ubykh", 36931, "cau-nwc", "Cyrl, Latn", translit = "uby-translit", override_translit = true, display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, strip_diacritics = { Cyrl = s["cau-Cyrl-stripdiacritics"], Latn = s["cau-Latn-stripdiacritics"], }, sort_key = "uby-sortkey", } m["uda"] = { "Uda", 11011951, "nic-lcr", } m["ude"] = { "Udihe", 13235, "tuw-udg", "Cyrl", } m["udg"] = { "Muduga", 16886762, "dra-imd", "Mlym", -- Mlym translit in [[Module:scripts/data]] } m["udi"] = { "Udi", 36867, "cau-esm", "Cyrl, Latn, Armn, Geor", ancestors = "xag", translit = { Cyrl = "udi-translit", -- Geor, Armn translit in [[Module:scripts/data]] }, override_translit = true, display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, strip_diacritics = { Cyrl = s["cau-Cyrl-stripdiacritics"], Latn = s["cau-Latn-stripdiacritics"], }, } m["udj"] = { "Ujir", 14916906, "poz-cet", "Latn", } m["udl"] = { "Uldeme", 3515078, "cdc-cbm", "Latn", } m["udm"] = { "Udmurt", 13238, "urj-prm", "Cyrl", translit = "udm-translit", override_translit = true, sort_key = "udm-sortkey", } m["udu"] = { "Uduk", 3182573, "ssa-kom", } m["ues"] = { "Kioko", 18343036, } m["ufi"] = { "Ufim", 7877531, "ngf-gmo", "Latn", } m["uga"] = { "Ugaritic", 36928, "sem-nwe", "Ugar", translit = { Ugar = "uga-translit", } } m["ugb"] = { "Kuku-Ugbanh", 10549854, } m["uge"] = { "Ughele", 966303, "poz-ocw", } m["ugn"] = { "Ugandan Sign Language", 7877677, "sgn-asl", } m["ugo"] = { "Gong", 3448919, "tbq-lob", "Thai", sort_key = "Thai-sortkey", } m["ugy"] = { "Uruguayan Sign Language", 7901470, "sgn", } m["uha"] = { "Uhami", 3913328, "alv-nwd", "Latn", } m["uhn"] = { "Damal", 4748974, "qfa-dis", -- ngf? or uncertain "Latn", } m["uis"] = { "Uisai", 7878123, "paa-sbo", "Latn", } m["uiv"] = { "Iyive", 11128658, "nic-tvc", "Latn", } m["uji"] = { "Tanjijili", 3914939, "nic-pls", "Latn", } m["uka"] = { "Kaburi", 6344482, "ngf-sbh", "Latn", } m["ukg"] = { "Ukuriguma", 7878623, "ngf-num", "Latn", } m["ukh"] = { "Ukhwejo", 36623, "bnt-bek", "Latn", } m["ukk"] = { "Muak Sa-aak", 23807993, "mkh-pal", "Latn", } m["ukl"] = { "Ukrainian Sign Language", 10322106, "sgn", } m["ukp"] = { "Ukpe-Bayobiri", 3914470, "nic-ben", "Latn", } m["ukq"] = { "Ukwa", 7878635, "nic-ief", "Latn", } m["uks"] = { "Kaapor Sign Language", 3322101, "sgn", } m["uku"] = { "Ukue", 3913387, "alv-nwd", "Latn", } m["ukw"] = { "Ukwuani-Aboh-Ndoni", 36636, "alv", "Latn", } m["uky"] = { "Kuuk Yak", 6448719, "aus-psw", "Latn", } m["ula"] = { "Fungwa", 5509187, "nic-shi", "Latn", } m["ulb"] = { "Olukumi", 36722, "alv-yor", "Latn", strip_diacritics = {Latn = {remove_diacritics = c.grave .. c.acute .. c.macron}}, sort_key = { from = {"ch", "ẹ", "gb", "gh", "gw", "kp", "kw", "ọ", "ṣ"}, to = {"c" .. p[1], "e" .. p[1], "g" .. p[1], "g" .. p[2], "g" .. p[3], "k" .. p[1], "k" .. p[2], "o" .. p[1], "s" .. p[1]} }, } m["ulc"] = { "Ulch", 13239, "tuw-nan", "Cyrl, Latn", strip_diacritics = { from = {"['’]"}, to = {"ʼ"} }, sort_key = "ulc-sortkey", } m["ule"] = { "Lule", 12635889, nil, "Latn", } m["ulf"] = { "Afra", 4477735, "qfa-dis", -- Papuan; extinct and poorly documented; per Wurm (1975), an independent branch of TNG; per Ross (2005), -- unclassifiable; per Usher (2020), West Pauwasi, though divergent; per Foley (2018), isolate. "Latn", } m["uli"] = { "Ulithian", 36842, "poz-mic", "Latn", } m["ulk"] = { "Meriam", 788174, "paa-etf", "Latn", } m["ull"] = { "Ullatan", 8761579, "dra-mal", } m["ulm"] = { "Ulumanda'", 3501892, "poz-ssw", "Latn", } m["uln"] = { "Unserdeutsch", 13244, "crp", "Latn", ancestors = "de", } m["ulu"] = { "Uma' Lung", 3548186, "poz-swa", } m["ulw"] = { "Ulwa (Nicaragua)", 2405552, "nai-min", "Latn", } m["uma"] = { "Umatilla", 12953952, "nai-shp", "Latn", ancestors = "nai-spt", } m["umb"] = { "Umbundu", 36983, "bnt", "Latn", } m["umc"] = { "Marrucinian", 36110, "itc-sbl", "Ital, Latn", -- Ital translit in [[Module:scripts/data]] display_text = { Latn = s["itc-Latn-displaytext"] }, strip_diacritics = { Latn = s["itc-Latn-stripdiacritics"] }, sort_key = { Latn = s["itc-Latn-sortkey"] }, } m["umd"] = { "Umbindhamu", 7881346, "aus-pmn", "Latn", } m["umg"] = { "Umbuygamu", 3915677, "aus-pmn", "Latn", } m["umi"] = { "Ukit", 7878321, nil, "Latn", } m["umm"] = { "Umon", 3915448, "nic-ucn", "Latn", } m["umn"] = { "Makyan Naga", 6740516, "sit-kch", } m["umo"] = { "Umotína", 7881740, "sai-mje", } m["ump"] = { "Umpila", 12953954, "aus-pmn", "Latn", } m["umr"] = { "Umbugarla", 2980392, } m["ums"] = { "Pendau", 7162371, "poz-tot", "Latn", } m["umu"] = { "Munsee", 56547, "del", "Latn", strip_diacritics = {remove_diacritics = c.acute .. c.breve}, } m["una"] = { "North Watut", 15887898, "poz-ocw", "Latn", } m["und"] = { "Undetermined", 22282914, "qfa-not", "All", } m["une"] = { "Uneme", 3913357, "alv-yek", "Latn", } m["ung"] = { "Ngarinyin", 1284885, "aus-wor", "Latn", } m["uni"] = { "Uni", 65043886, "paa-pio", "Latn", } m["unk"] = { "Enawené-Nawé", 3307184, "awd", "Latn", } m["unm"] = { "Unami", 3549180, "del", "Latn", --[===[Don't strip diacritics from display text, per [[WT:Grease pit/2020/May]]. strip_diacritics = {remove_diacritics = c.grave .. c.diaer},]===] } m["unn"] = { "Kurnai", 61676882, "aus-pam", "Latn", } m["unr"] = { "Mundari", 3327828, "mun", "Nagm, Deva, Onao", -- Onao is used by Bhumij, which may be a separate language; remove if it gets split out translit = "hi-translit", -- for now } m["unu"] = { "Unubahe", 7897776, } m["unx"] = { "Munda", 36264959, "mun", "Latn", } m["unz"] = { "Unde Kaili", 12953596, "poz-kal", "Latn", } m["uok"] = { "Uokha", 3441216, "alv-edo", "Latn", } m["uon"] = { "Kulon", 11182000, "map", "Latn", } m["upi"] = { "Umeda", 7881465, "paa-war", "Latn", } m["upv"] = { "Northeast Malakula", 13249, "poz-vnc", "Latn", } m["ura"] = { "Urarina", 1579560, } m["urb"] = { "Urubú-Kaapor", 13893353, "tup-gua", "Latn", } m["urc"] = { "Urningangg", 10710522, } m["ure"] = { "Uru", 2992892, } m["urf"] = { "Uradhi", 3915680, "aus-pam", "Latn", } m["urg"] = { "Urigina", 7900603, "ngf-pek", "Latn", } m["urh"] = { "Urhobo", 36663, "alv-swd", "Latn", } m["uri"] = { "Urim", 7900609, "paa-trr", "Latn", } m["urk"] = { "Urak Lawoi'", 7899573, "poz-mly", "Thai", sort_key = "Thai-sortkey", } m["url"] = { "Urali", 7899602, "dra-kod", "Knda", -- Knda translit in [[Module:scripts/data]] (NOTE: not present before, presumably an accidental omission) } m["urm"] = { "Urapmin", 7899769, "ngf-mok", "Latn", } m["urn"] = { "Uruangnirin", 7901389, "poz-cet", "Latn", } m["uro"] = { "Ura (New Guinea)", 3121049, "paa-bai", "Latn", } m["urp"] = { "Uru-Pa-In", 7901376, "tup-gua", "Latn", } m["urr"] = { "Löyöp", 3272124, "poz-vnn", "Latn", } m["urt"] = { "Urat", 3502084, "paa-trr", "Latn", } m["uru"] = { "Urumi", 7901530, "tup", "Latn", } m["urv"] = { "Uruava", 36875, "poz-ocw", "Latn", } m["urw"] = { "Sop", 7562808, "ngf-pek", "Latn", } m["urx"] = { "Urimo", 7900611, "paa-mar", "Latn", } m["ury"] = { "Orya", 7105295, "paa-too", "Latn", } m["urz"] = { "Uru-Eu-Wau-Wau", 10266012, "tup-gua", "Latn", } m["usa"] = { "Usarufa", 7901714, "ngf-gau", "Latn", } m["ush"] = { "Ushojo", 3540446, "inc-shn", "Aran", } m["usi"] = { "Usui", 12644231, } m["usk"] = { "Usaghade", 3914048, "nic-lcr", "Latn", } m["usp"] = { "Uspanteco", 36728, "myn", "Latn", } m["uss"] = { "Saare", 63313662, "nic-knn", "Latn", } m["usu"] = { "Uya", 7904082, "ngf-nur", "Latn", } m["uta"] = { "Otank", 3913990, "nic-tvc", "Latn", } m["ute"] = { "Ute", 13260, "azc-num", "Latn", } m["uth"] = { "Hun", 63313668, "nic-knn", "Latn", } m["utp"] = { "Aba", 2841465, "poz-tem", "Latn", } m["utr"] = { "Etulo", 35262, "alv-ido", "Latn", } m["utu"] = { "Utu", 7903469, "ngf-usi", "Latn", } m["uum"] = { "Urum", 13257, "trk-kcu", "Cyrl", translit = "uum-translit", } m["uur"] = { "Ura (Vanuatu)", 7899531, "poz-vns", "Latn", } m["uuu"] = { "U", 953082, "mkh-pal", } m["uve"] = { "West Uvean", 36837, "poz-pnp", "Latn", } m["uvh"] = { "Uri", 7900540, "ngf-era", "Latn", } m["uvl"] = { "Lote", 3259972, "poz-ocw", "Latn", } m["uwa"] = { "Kuku-Uwanh", 3915687, "aus-pmn", "Latn", } m["uya"] = { "Doko-Uyanga", 7904095, "nic-ucr", "Latn", } return require("Module:languages").finalizeData(m, "language") 8xj4ngias73rovpdc4g8tqswp67hy6j मॉड्यूल:languages/canonical names 828 304627 487547 478576 2026-09-01T15:11:29Z SM7 6218 असमिया 487547 Scribunto text/plain return { ["'Are'are"] = "alu", ["A'ou"] = "aou", ["A-Hmao"] = "hmd", ["A-Pucikwar"] = "apq", ["Aari"] = "aiw", ["Aasax"] = "aas", ["Aba"] = "utp", ["Abaga"] = "abg", ["Abai"] = "poz-abi", ["Abai Sungai"] = "abf", ["Abanyom"] = "abm", ["Abau"] = "aau", ["Abaza"] = "abq", ["Abenaki"] = "abe", ["Abenlen Ayta"] = "abp", ["Abidji"] = "abi", ["Abinomn"] = "bsa", ["Abipon"] = "axb", ["Abishira"] = "ash", ["Abkhaz"] = "ab", ["Abom"] = "aob", ["Abon"] = "abo", ["Abron"] = "abr", ["Abu"] = "ado", ["Abu' Arapesh"] = "aah", ["Abua"] = "abn", ["Abui"] = "abz", ["Abun"] = "kgr", ["Abung"] = "abl", ["Abure"] = "abu", ["Abureni"] = "mgj", ["Abé"] = "aba", ["Acatepec Me'phaa"] = "tpx", ["Acehnese"] = "ace", ["Achagua"] = "aca", ["Achang"] = "acn", ["Ache"] = "yif", ["Acheron"] = "acz", ["Achi"] = "acr", ["Acholi"] = "ach", ["Achuar"] = "acu", ["Achumawi"] = "acv", ["Aché"] = "guq", ["Acroá"] = "acs", ["Adabe"] = "adb", ["Adai"] = "xad", ["Adamorobe Sign Language"] = "ads", ["Adang"] = "adn", ["Adangbe"] = "adq", ["Adangme"] = "ada", ["Adap"] = "adp", ["Adasen"] = "tiu", ["Adele"] = "ade", ["Adhola"] = "adh", ["Adi"] = "adi", ["Adioukrou"] = "adj", ["Adithinngithigh"] = "dth", ["Adivasi Oriya"] = "ort", ["Adiwasi Garasia"] = "gas", ["Adja"] = "ajg", ["Adnyamathanha"] = "adt", ["Adonara"] = "adr", ["Aduge"] = "adu", ["Adyghe"] = "ady", ["Adzera"] = "adz", ["Aeka"] = "aez", ["Aekyom"] = "awi", ["Aequian"] = "xae", ["Aer"] = "aeq", ["Afade"] = "aal", ["Afar"] = "aa", ["Afghan Sign Language"] = "afg", ["Afitti"] = "aft", ["Afra"] = "ulf", ["Afrihili"] = "afh", ["Afrikaans"] = "af", ["Afro-Seminole Creole"] = "afs", ["Agarabi"] = "agd", ["Agariya"] = "agi", ["Agatu"] = "agc", ["Agavotaguerra"] = "avo", ["Agawam"] = "alg-aga", ["Aghem"] = "agq", ["Aghu"] = "ahh", ["Aghu Tharrnggala"] = "gtu", ["Aghul"] = "agx", ["Aghwan"] = "xag", ["Agi"] = "aif", ["Agob"] = "kit", ["Agoi"] = "ibm", ["Aguacateca"] = "agu", ["Aguano"] = "aga", ["Aguaruna"] = "agr", ["Aguna"] = "aug", ["Agusan Manobo"] = "msm", ["Agutaynen"] = "agn", ["Agwagwune"] = "yay", ["Ahanta"] = "aha", ["Ahirani"] = "ahr", ["Ahom"] = "aho", ["Ahtna"] = "aht", ["Ahwai"] = "nfd", ["Ai-Cham"] = "aih", ["Aighon"] = "aix", ["Aikanã"] = "tba", ["Aiklep"] = "mwg", ["Aimele"] = "ail", ["Aimol"] = "aim", ["Ainbai"] = "aic", ["Ainu"] = "ain", ["Aiome"] = "aki", ["Airoran"] = "air", ["Aisi"] = "mmq", ["Aiton"] = "aio", ["Aiwoo"] = "nfl", ["Aja"] = "aja", ["Ajagua"] = "sai-ajg", ["Ajawa"] = "ajw", ["Ajië"] = "aji", ["Ajyíninka Apurucayali"] = "cpc", ["Ak"] = "akq", ["Aka (Central Africa)"] = "axk", ["Aka (Sudan)"] = "soh", ["Aka-Bea"] = "abj", ["Aka-Bo"] = "akm", ["Aka-Cari"] = "aci", ["Aka-Kede"] = "akx", ["Aka-Kol"] = "aky", ["Aka-Kora"] = "ack", ["Akan"] = "ak", ["Akar-Bale"] = "acl", ["Akaselem"] = "aks", ["Akatek"] = "knj", ["Akawaio"] = "ake", ["Ake"] = "aik", ["Akebu"] = "keu", ["Akei"] = "tsr", ["Akeu"] = "aeu", ["Akha"] = "ahk", ["Akhvakh"] = "akv", ["Akkadian"] = "akk", ["Akkala Sami"] = "sia", ["Aklanon"] = "akl", ["Akolet"] = "akt", ["Akoose"] = "bss", ["Akoye"] = "miw", ["Akpa"] = "akf", ["Akpes"] = "ibe", ["Akrukay"] = "afi", ["Akuku"] = "ayk", ["Akum"] = "aku", ["Akuntsu"] = "aqz", ["Akurio"] = "ako", ["Akuwagel"] = "bey", ["Akwa"] = "akw", ["Akyaung Ari"] = "nqy", ["Al-Sayyid Bedouin Sign Language"] = "syy", ["Alaba"] = "alw", ["Alabama"] = "akz", ["Alabat Island Agta"] = "dul", ["Alacatlatzala Mixtec"] = "mim", ["Alago"] = "ala", ["Alagwa"] = "wbj", ["Alak"] = "alk", ["Alamblak"] = "amp", ["Alangan"] = "alj", ["Alapmunte"] = "apv", ["Alas-Kluet Batak"] = "btz", ["Alawa"] = "alh", ["Alazapa"] = "nai-ala", ["Albanian"] = "sq", ["Albanian Sign Language"] = "sqk", ["Alcozauca Mixtec"] = "xta", ["Alege"] = "alf", ["Alekano"] = "gah", ["Alemannic German"] = "gsw", ["Aleut"] = "ale", ["Algerian Arabic"] = "arq", ["Algerian Sign Language"] = "asp", ["Algonquin"] = "alq", ["Ali"] = "aiy", ["Alladian"] = "ald", ["Allar"] = "all", ["Allentiac"] = "sai-all", ["Alngith"] = "aid", ["Alo Phola"] = "ypo", ["Alor"] = "aol", ["Aloápam Zapotec"] = "zaq", ["Alsea"] = "aes", ["Alu"] = "mte", ["Alu Kurumba"] = "xua", ["Alugu"] = "aub", ["Alumu-Tesu"] = "aab", ["Alune"] = "alp", ["Alungul"] = "aus-alu", ["Aluo"] = "yna", ["Alur"] = "alz", ["Alutiiq"] = "ems", ["Alutor"] = "alr", ["Alviri-Vidari"] = "avd", ["Alyawarr"] = "aly", ["Ama"] = "amm", ["Amahai"] = "amq", ["Amahuaca"] = "amc", ["Amaimon"] = "ali", ["Amal"] = "aad", ["Amanab"] = "amn", ["Amanayé"] = "ama", ["Amara"] = "aie", ["Amarakaeri"] = "amr", ["Amarasi"] = "aaz", ["Amarizana"] = "awd-ama", ["Amasi"] = "alv-ama", ["Amatlán Zapotec"] = "zpo", ["Amba"] = "rwm", ["Ambai"] = "amk", ["Ambakich"] = "aew", ["Ambala Ayta"] = "abc", ["Ambelau"] = "amv", ["Ambele"] = "ael", ["Amblong"] = "alm", ["Ambo"] = "amb", ["Ambonese Malay"] = "abs", ["Ambrak"] = "aag", ["Ambul"] = "apo", ["Ambulas"] = "abt", ["Amdang"] = "amj", ["Amele"] = "aey", ["American Sign Language"] = "ase", ["Amganad Ifugao"] = "ifa", ["Amharic"] = "am", ["Ami"] = "amy", ["Amis"] = "ami", ["Ammonite"] = "sem-amm", ["Amo"] = "amo", ["Amol"] = "alx", ["Amoltepec Mixtec"] = "mbz", ["Amondawa"] = "adw", ["Amorite"] = "sem-amo", ["Ampanang"] = "apg", ["Ampari Dogon"] = "aqd", ["Amri Karbi"] = "ajz", ["Amto"] = "amt", ["Amurdag"] = "amg", ["Ana Tinga Dogon"] = "dti", ["Anaang"] = "anw", ["Anakalangu"] = "akg", ["Anal"] = "anm", ["Anam"] = "pda", ["Anambé"] = "aan", ["Anamgura"] = "imi", ["Anasi"] = "bpo", ["Anauyá"] = "awd-ana", ["Ancient Greek"] = "grc", ["Ancient Ligurian"] = "xlg", ["Ancient Macedonian"] = "xmk", ["Ancient North Arabian"] = "xna", ["Ancient Zapotec"] = "xzp", ["Andai"] = "afd", ["Andajin"] = "ajn", ["Andalusian Arabic"] = "xaa", ["Andaman Creole Hindi"] = "hca", ["Andaqui"] = "ana", ["Andarum"] = "aod", ["Andegerebinha"] = "adg", ["Andh"] = "anr", ["Andi"] = "ani", ["Andio"] = "bzb", ["Andjingith"] = "aus-and", ["Andoa"] = "anb", ["Andoque"] = "ano", ["Andoquero"] = "sai-and", ["Andra-Hus"] = "anx", ["Aneityum"] = "aty", ["Anem"] = "anz", ["Aneme Wake"] = "aby", ["Anfillo"] = "myo", ["Angaataha"] = "agm", ["Angaité"] = "aqt", ["Angal"] = "age", ["Angal Enen"] = "aoe", ["Angal Heneng"] = "akh", ["Angami"] = "njm", ["Angevin"] = "roa-ang", ["Angguruk Yali"] = "yli", ["Angika"] = "anp", ["Angkamuthi"] = "avm", ["Angkola Batak"] = "akb", ["Angkula"] = "aus-ang", ["Angloromani"] = "rme", ["Angolar"] = "aoa", ["Angor"] = "agg", ["Angoram"] = "aog", ["Angosturas Tunebo"] = "tnd", ["Anguthimri"] = "awg", ["Ani Phowa"] = "ypn", ["Anii"] = "blo", ["Animere"] = "anf", ["Anindilyakwa"] = "aoi", ["Anjam"] = "boj", ["Ankave"] = "aak", ["Anmatyerre"] = "amx", ["Annobonese"] = "fab", ["Anong"] = "nun", ["Anor"] = "anj", ["Anserma"] = "ans", ["Ansus"] = "and", ["Antakarinya"] = "ant", ["Antigua and Barbuda Creole English"] = "aig", ["Antillean Creole"] = "gcf", ["Anu"] = "anl", ["Anuak"] = "anu", ["Anufo"] = "cko", ["Anuki"] = "aui", ["Anus"] = "auq", ["Anuta"] = "aud", ["Anyi"] = "any", ["Anyin Morofo"] = "mtb", ["Ao"] = "njo", ["Aoheng"] = "pni", ["Aore"] = "aor", ["Ap Ma"] = "kbx", ["Apalachee"] = "xap", ["Apalaí"] = "apy", ["Apali"] = "ena", ["Apasco-Apoala Mixtec"] = "mip", ["Apatani"] = "apt", ["Apiaká"] = "api", ["Apinayé"] = "apn", ["Apma"] = "app", ["Apolista"] = "awd-apo", ["Aproumu Aizi"] = "ahp", ["Apurinã"] = "apu", ["Aputai"] = "apx", ["Aquitanian"] = "xaq", ["Arabana"] = "ard", ["Arabela"] = "arl", ["Arabic"] = "ar", ["Aragonese"] = "an", ["Araki"] = "akr", ["Arakwal"] = "rkw", ["Aralle-Tabulahan"] = "atq", ["Aramaic"] = "arc", ["Arammba"] = "stk", ["Aranadan"] = "aaf", ["Aranama-Tamique"] = "xrt", ["Arandai"] = "jbj", ["Araona"] = "aro", ["Arapaho"] = "arp", ["Arapaso"] = "arj", ["Arara-Karo"] = "arr", ["Ararandewára"] = "xaj", ["Arawak"] = "arw", ["Araweté"] = "awt", ["Arawum"] = "awm", ["Arbore"] = "arv", ["Archi"] = "aqc", ["Ardhamagadhi Prakrit"] = "pka", ["Are"] = "mwc", ["Areba"] = "aea", ["Arem"] = "aem", ["Argentine Sign Language"] = "aed", ["Argobba"] = "agj", ["Arguni"] = "agf", ["Arhuaco"] = "arh", ["Arhâ"] = "aqr", ["Arhö"] = "aok", ["Ari"] = "aac", ["Aribwatsa"] = "laz", ["Aribwaung"] = "ylu", ["Arifama-Miniafia"] = "aai", ["Arigidi"] = "aqg", ["Arikapú"] = "ark", ["Arikara"] = "ari", ["Arikem"] = "ait", ["Arin"] = "xrn", ["Aringa"] = "luc", ["Armazic"] = "xrm", ["Armenian"] = "hy", ["Armenian Sign Language"] = "aen", ["Aromanian"] = "rup", ["Arop-Lokep"] = "apr", ["Arop-Sissano"] = "aps", ["Arosi"] = "aia", ["Arritinngithigh"] = "rrt", ["Arta"] = "atz", ["Arua"] = "aru", ["Aruamu"] = "msy", ["Aruek"] = "aur", ["Aruop"] = "lsr", ["Arutani"] = "atx", ["Aruá"] = "arx", ["As"] = "asz", ["Asaro'o"] = "mtv", ["Ashe"] = "ahs", ["Ashkun"] = "ask", ["Asho Chin"] = "csh", ["Ashokan Prakrit"] = "inc-ash", ["Ashraaf"] = "cus-ash", ["Asháninka"] = "cni", ["Ashéninka Pajonal"] = "cjo", ["Ashéninka Perené"] = "prq", ["Asi"] = "bno", ["Asilulu"] = "asl", ["Askopan"] = "eiv", ["Asoa"] = "asv", ["असमिया"] = "as", ["Assan"] = "xss", ["Assangori"] = "sjg", ["Assiniboine"] = "asb", ["Assyrian Neo-Aramaic"] = "aii", ["Asturian"] = "ast", ["Asu"] = "aum", ["Asue Awyu"] = "psa", ["Asumboa"] = "aua", ["Asunción Mixtepec Zapotec"] = "zoo", ["Asuri"] = "asr", ["Ata"] = "atm", ["Ata Manobo"] = "atd", ["Atakapa"] = "aqp", ["Atampaya"] = "amz", ["Atanques"] = "cba-ata", ["Atatláhuca Mixtec"] = "mib", ["Atayal"] = "tay", ["Atemble"] = "ate", ["Ateso"] = "teo", ["Athpare"] = "aph", ["Ati"] = "atk", ["Atikamekw"] = "atj", ["Atohwaim"] = "aqm", ["Atong (Cameroon)"] = "ato", ["Atong (India)"] = "aot", ["Atorada"] = "aox", ["Atsahuaca"] = "atc", ["Atsam"] = "cch", ["Atsugewi"] = "atw", ["Attapady Kurumba"] = "pkr", ["Attié"] = "ati", ["Au"] = "avt", ["Auhelawa"] = "kud", ["Aukan"] = "djk", ["Aulua"] = "aul", ["Aurá"] = "aux", ["Aushi"] = "auh", ["Aushiri"] = "avs", ["Auslan"] = "asf", ["Austral"] = "aut", ["Australian Aboriginal Sign Language"] = "asw", ["Austrian Sign Language"] = "asq", ["Austronesian Mari"] = "hob", ["Auwe"] = "smf", ["Auyana"] = "auy", ["Auye"] = "auu", ["Auyokawa"] = "auo", ["Avar"] = "av", ["Avatime"] = "avn", ["Avau"] = "avb", ["Avava"] = "tmb", ["Avestan"] = "ae", ["Avikam"] = "avi", ["Avokaya"] = "avu", ["Avá-Canoeiro"] = "avv", ["Awa (China)"] = "vwa", ["Awa (New Guinea)"] = "awb", ["Awa-Cuaiquer"] = "kwi", ["Awabakal"] = "awk", ["Awadhi"] = "awa", ["Awak"] = "awo", ["Awar"] = "aya", ["Awara"] = "awx", ["Awbono"] = "awh", ["Aweer"] = "bob", ["Awera"] = "awr", ["Awetí"] = "awe", ["Awing"] = "azo", ["Awjila"] = "auj", ["Awngi"] = "awn", ["Awngthim"] = "gwm", ["Awtuw"] = "kmn", ["Awu"] = "yiu", ["Awun"] = "aww", ["Awutu"] = "afu", ["Awyi"] = "auw", ["Axamb"] = "ahb", ["Axi Yi"] = "yix", ["Ayabadhu"] = "ayd", ["Ayautla Mazatec"] = "vmy", ["Ayere"] = "aye", ["Ayerrerenge"] = "axe", ["Ayi"] = "ayq", ["Ayizi"] = "yyz", ["Ayizo"] = "ayb", ["Aymara"] = "ay", ["Aynu"] = "aib", ["Ayomán"] = "sai-ayo", ["Ayoquesco Zapotec"] = "zaf", ["Ayoreo"] = "ayo", ["Ayu"] = "ayu", ["Ayutla Mixtec"] = "miy", ["Azerbaijani"] = "az", ["Azha"] = "aza", ["Azhe"] = "yiz", ["Azoyú Me'phaa"] = "tpc", ["Baa"] = "kwb", ["Baagandji"] = "drl", ["Baan"] = "bvj", ["Baangi"] = "bqx", ["Baatonum"] = "bba", ["Baba"] = "bbw", ["Baba Malay"] = "mbf", ["Babango"] = "bbm", ["Babanki"] = "bbk", ["Babatana"] = "baa", ["Babine-Witsuwit'en"] = "bcr", ["Babole"] = "bvx", ["Babungo"] = "bav", ["Babuza"] = "bzg", ["Bacama"] = "bcy", ["Bacanese Malay"] = "btj", ["Bactrian"] = "xbc", ["Bada"] = "bhz", ["Badaga"] = "bfq", ["Badanchi"] = "bau", ["Bade"] = "bde", ["Badeshi"] = "bdz", ["Badimaya"] = "bia", ["Badui"] = "bac", ["Badyara"] = "pbp", ["Baeggu"] = "bvd", ["Baekje"] = "pkc", ["Baelelea"] = "bvc", ["Baenan"] = "sai-bae", ["Baetora"] = "btr", ["Bafanji"] = "bfj", ["Bafaw"] = "bwt", ["Bafia"] = "ksf", ["Bafut"] = "bfd", ["Baga Kaloum"] = "bqf", ["Baga Koga"] = "bgo", ["Baga Manduri"] = "bmd", ["Baga Pokur"] = "bcg", ["Baga Sitemu"] = "bsp", ["Baga Sobané"] = "bsv", ["Bagheli"] = "bfy", ["Bagirmi"] = "bmi", ["Bago-Kusuntu"] = "bqg", ["Bagri"] = "bgq", ["Bagua"] = "sai-bag", ["Bagupi"] = "bpi", ["Bagusa"] = "bqb", ["Bagvalal"] = "kva", ["Baha"] = "yha", ["Baham"] = "bdw", ["Bahamian Creole"] = "bah", ["Baharna Arabic"] = "abv", ["Bahau"] = "bhv", ["Bahinemo"] = "bjh", ["Bahing"] = "bhj", ["Bahnar"] = "bdq", ["Bahonsuai"] = "bsu", ["Bai"] = "bdj", ["Baibai"] = "bbf", ["Baikeno"] = "bkx", ["Baima"] = "bqh", ["Baimak"] = "bmx", ["Bainouk-Gunyaamolo"] = "bcz", ["Bainouk-Gunyuño"] = "bab", ["Bainouk-Samik"] = "bcb", ["Baiso"] = "bsw", ["Baissa Fali"] = "fah", ["Bajan"] = "bjs", ["Bajelani"] = "bjm", ["Baka"] = "bkc", ["Bakairí"] = "bkq", ["Bakaka"] = "bqz", ["Bakhtiari"] = "bqi", ["Baki"] = "bki", ["Bakoko"] = "bkh", ["Bakole"] = "kme", ["Bakpinka"] = "bbs", ["Bakulung"] = "bbu", ["Bakumpai"] = "bkr", ["Bakung"] = "xkl", ["Bakwé"] = "bjw", ["Balaesang"] = "bls", ["Balangao"] = "blw", ["Balangingi"] = "sse", ["Balanta-Ganja"] = "bjt", ["Balanta-Kentohe"] = "ble", ["Balantak"] = "blz", ["Balau"] = "blg", ["Baldemu"] = "bdn", ["Bali"] = "bcp", ["Baliledo"] = "poz-bal", ["Balinese"] = "ban", ["Balinese Malay"] = "mhp", ["Balkan Gagauz Turkish"] = "bgx", ["Balkan Romani"] = "rmn", ["Balo"] = "bqo", ["Baloi"] = "biz", ["Balong"] = "bnt-bal", ["Balti"] = "bft", ["Baltic Romani"] = "rml", ["Baluan-Pam"] = "blq", ["Baluchi"] = "bal", ["Bamako Sign Language"] = "bog", ["Bamali"] = "bbq", ["Bambalang"] = "bmo", ["Bambam"] = "ptu", ["Bambara"] = "bm", ["Bambassi"] = "myf", ["Bambili-Bambui"] = "baw", ["Bamenyam"] = "bce", ["Bamu"] = "bcf", ["Bamukumbit"] = "bqt", ["Bamum"] = "bax", ["Bamunka"] = "bvm", ["Bamwe"] = "bmg", ["Ban Khor Sign Language"] = "bfk", ["Bana"] = "bcw", ["Banam Bay"] = "vrt", ["Banao Itneg"] = "bjx", ["Banaro"] = "byz", ["Banda"] = "bnd", ["Banda Malay"] = "bpq", ["Banda-Bambari"] = "liy", ["Banda-Banda"] = "bpd", ["Banda-Mbrès"] = "bqk", ["Banda-Ndélé"] = "bfl", ["Banda-Yangere"] = "yaj", ["Bandi"] = "bza", ["Bandial"] = "bqj", ["Bandjalang"] = "bdy", ["Bangala"] = "bxg", ["Bangandu"] = "bgf", ["Bangba"] = "bbe", ["Banggai"] = "bgz", ["Bangi"] = "bni", ["Bangime"] = "dba", ["Bangka"] = "mfb", ["Bangolan"] = "bgj", ["Bangubangu"] = "bnx", ["Bangwinji"] = "bsj", ["Baniva"] = "bvv", ["Baniwa"] = "bwi", ["Banjarese"] = "bjn", ["Banka"] = "bxw", ["Bankan Tey Dogon"] = "dbw", ["Bankon"] = "abb", ["Banoni"] = "bcm", ["Bantawa"] = "bap", ["Bantayanon"] = "bfx", ["Bantik"] = "bnq", ["Banyumasan"] = "map-bms", ["Baoule"] = "bci", ["Baraamu"] = "brd", ["Barai"] = "bbb", ["Barakai"] = "baj", ["Baram Kayan"] = "kys", ["Barama"] = "bbg", ["Barambu"] = "brm", ["Baramu"] = "bmz", ["Barapasi"] = "brp", ["Baras"] = "brs", ["Barasana"] = "bsn", ["Barbareño"] = "boi", ["Barclayville Grebo"] = "gry", ["Bardi"] = "bcj", ["Barein"] = "bva", ["Bargam"] = "mlp", ["Bari"] = "bfa", ["Bariai"] = "bch", ["Bariji"] = "bjc", ["Barikanchi"] = "bxo", ["Barikewa"] = "jbk", ["Barngarla"] = "bjb", ["Barok"] = "bjk", ["Barombi"] = "bbi", ["Barranbinya"] = "aus-bra", ["Barro Negro Tunebo"] = "tbn", ["Barrow Point"] = "bpt", ["Baruga"] = "bjz", ["Barunggam"] = "aus-brm", ["Baruya"] = "byr", ["Barwe"] = "bwg", ["Barzani Jewish Neo-Aramaic"] = "bjf", ["Baré"] = "bae", ["Barí"] = "mot", ["Basa"] = "bzw", ["Basa-Gumna"] = "bsl", ["Basa-Gurmana"] = "buj", ["Basaa"] = "bas", ["Basap"] = "bdb", ["Basay"] = "byq", ["Bashkardi"] = "bsg", ["Bashkir"] = "ba", ["Basketo"] = "bst", ["Basque"] = "eu", ["Bassa"] = "bsq", ["Bassa-Kontagora"] = "bsr", ["Bassari"] = "bsc", ["Bassossi"] = "bsi", ["Bata"] = "bta", ["Bataan Ayta"] = "ayt", ["Batad Ifugao"] = "ifb", ["Batanga"] = "bnm", ["Batek"] = "btq", ["Bateri"] = "btv", ["Bathari"] = "bhm", ["Bati (Cameroon)"] = "btc", ["Bati (Indonesia)"] = "bvt", ["Bats"] = "bbl", ["Batu"] = "btu", ["Batui"] = "zbt", ["Batuley"] = "bay", ["Bau"] = "bbd", ["Bau Bidayuh"] = "sne", ["Bauchi"] = "bsf", ["Baure"] = "brg", ["Bauria"] = "bge", ["Bauro"] = "bxa", ["Bauwaki"] = "bwk", ["Bauzi"] = "bvz", ["Bavarian"] = "bar", ["Bawm Chin"] = "bgr", ["Bay Miwok"] = "mkq", ["Bayali"] = "bjy", ["Baybayanon"] = "bvy", ["Baygo"] = "byg", ["Bayogoula"] = "nai-bay", ["Bayono"] = "byl", ["Bayot"] = "bda", ["Bayungu"] = "bxj", ["Bazigar"] = "bfr", ["Baïnounk Gubëeher"] = "alv-bgu", ["Beami"] = "beo", ["Beaver"] = "bea", ["Beba"] = "bfp", ["Bebe"] = "bzv", ["Bebele"] = "beb", ["Bebeli"] = "bek", ["Bebil"] = "bxp", ["Bedik"] = "tnr", ["Bedjond"] = "bjv", ["Bedoanas"] = "bed", ["Beeke"] = "bkf", ["Beele"] = "bxq", ["Beembe"] = "beq", ["Beezen"] = "bnz", ["Befang"] = "bby", ["Begbere-Ejar"] = "bqv", ["Beja"] = "bej", ["Bekati'"] = "bei", ["Bekwarra"] = "bkv", ["Bekwel"] = "bkw", ["Belait"] = "beg", ["Belanda Bor"] = "bxb", ["Belanda Viri"] = "bvi", ["Belarusian"] = "be", ["Belhariya"] = "byw", ["Beli"] = "blm", ["Belizean Creole"] = "bzj", ["Bella Coola"] = "blc", ["Bellari"] = "brw", ["Bemba"] = "bem", ["Bembe"] = "bmb", ["Ben Tey"] = "dbt", ["Bena"] = "yun", ["Benabena"] = "bef", ["Bench"] = "bcq", ["Bende"] = "bdp", ["Bendi"] = "bct", ["Beneraf"] = "bnv", ["Beng"] = "nhb", ["Benga"] = "bng", ["बंगाली"] = "bn", ["Benggoi"] = "bgy", ["Bengkala Sign Language"] = "bqy", ["Bentong"] = "bnu", ["Benyadu'"] = "byd", ["Beothuk"] = "bue", ["Bepour"] = "bie", ["Bera"] = "brf", ["Berakou"] = "bxv", ["Berau Malay"] = "bve", ["Berawan"] = "lod", ["Berbice Creole Dutch"] = "brc", ["Bergish"] = "gmw-bgh", ["Berik"] = "bkl", ["Berinomo"] = "bit", ["Berom"] = "bom", ["Berta"] = "wti", ["Berti"] = "byt", ["Besisi"] = "mhe", ["Besme"] = "bes", ["Besoa"] = "bep", ["Betaf"] = "bfe", ["Betawi"] = "bew", ["Bete"] = "byf", ["Bete-Bendi"] = "btt", ["Betoi"] = "sai-bet", ["Betta Kurumba"] = "xub", ["Bezhta"] = "kap", ["Bhadrawahi"] = "bhd", ["Bhalay"] = "bhx", ["Bharia"] = "bha", ["Bhatri"] = "bgw", ["Bhattiyali"] = "bht", ["Bhaya"] = "bhe", ["Bhele"] = "bhy", ["Bhilali"] = "bhi", ["Bhili"] = "bhb", ["भोजपुरी"] = "bho", ["Bhoti Kinnauri"] = "nes", ["Bhunjia"] = "bhu", ["Biafada"] = "bif", ["Biage"] = "bdf", ["Biak"] = "bhw", ["Biali"] = "beh", ["Bian Marind"] = "bpv", ["Biangai"] = "big", ["Biao"] = "byk", ["Biao Mon"] = "bmt", ["Biao-Jiao Mien"] = "bje", ["Biatah Bidayuh"] = "bth", ["Bibaali"] = "bcn", ["Bibbulman"] = "xbp", ["Bidiyo"] = "bid", ["Bidyara"] = "bym", ["Bidyogo"] = "bjg", ["Biem"] = "bmc", ["Bierebo"] = "bnk", ["Bieria"] = "brj", ["Biete"] = "biu", ["Big Nambas"] = "nmb", ["Biga"] = "bhc", ["Bigambal"] = "xbe", ["Bih"] = "ibh", ["Bihari"] = "bh", ["Bijori"] = "bix", ["Bikaru"] = "bic", ["Bikol Central"] = "bcl", ["Bikya"] = "byb", ["Bila"] = "bip", ["Bilakura"] = "bql", ["Bilaspuri"] = "kfs", ["Bilba"] = "bpz", ["Bilbil"] = "brz", ["Bile"] = "bil", ["Biliau"] = "bcu", ["Biloxi"] = "bll", ["Bilua"] = "blb", ["Bilur"] = "bxf", ["Bima"] = "bhp", ["Bimin"] = "bhl", ["Bimoba"] = "bim", ["Bina"] = "bmn", ["Binahari"] = "bxz", ["Binandere"] = "bhg", ["Binawa"] = "byj", ["Bindal"] = "xbd", ["Bine"] = "bon", ["Binji"] = "bpj", ["Binongan Itneg"] = "itb", ["Bintauna"] = "bne", ["Bintulu"] = "bny", ["Binukid"] = "bkd", ["Binumarien"] = "bjr", ["Bipi"] = "biq", ["Birao"] = "brr", ["Birgid"] = "brk", ["Birgit"] = "btf", ["Birhor"] = "biy", ["Biri"] = "bzr", ["Biritai"] = "bqq", ["Birri"] = "bvq", ["Birrpayi"] = "xbj", ["Birwa"] = "brl", ["Biseni"] = "ije", ["Bishnupriya Manipuri"] = "bpy", ["Bishuo"] = "bwh", ["Bisis"] = "bnw", ["Bislama"] = "bi", ["Bisorio"] = "bir", ["Bissa"] = "bib", ["Bisu"] = "bzi", ["Bit"] = "bgk", ["Bitare"] = "brt", ["Bitur"] = "mcc", ["Biwat"] = "bwm", ["Biyo"] = "byo", ["Biyom"] = "bpm", ["Blablanga"] = "blp", ["Black Speech"] = "art-bsp", ["Blackfoot"] = "bla", ["Blafe"] = "bfh", ["Blagar"] = "beu", ["Blang"] = "blr", ["Blin"] = "byn", ["Bo"] = "bgl", ["Bo-Rukul"] = "mae", ["Bo-Ung"] = "mux", ["Boano (Maluku)"] = "bzn", ["Boano (Sulawesi)"] = "bzl", ["Bobongko"] = "bgb", ["Bobot"] = "bty", ["Bodo (Central Africa)"] = "boy", ["Bodo (India)"] = "brx", ["Bodo Gadaba"] = "gbj", ["Bodo Parja"] = "bdv", ["Bofi"] = "bff", ["Boga"] = "bvw", ["Bogaya"] = "boq", ["Boghom"] = "bux", ["Boguru"] = "bqu", ["Bohtan Neo-Aramaic"] = "bhn", ["Boikin"] = "bzf", ["Bokar"] = "sit-bok", ["Bokha"] = "ybk", ["Boko"] = "bqc", ["Bokobaru"] = "bus", ["Bokoto"] = "bdt", ["Bokyi"] = "bky", ["Bola"] = "bnp", ["Bolak"] = "art-blk", ["Bolango"] = "bld", ["Bole"] = "bol", ["Bolgo"] = "bvo", ["Bolia"] = "bli", ["Bolinao"] = "smk", ["Bolivian Sign Language"] = "bvl", ["Boloki"] = "bkt", ["Bolon"] = "bof", ["Bolondo"] = "bzm", ["Bolongan"] = "blj", ["Bolyu"] = "ply", ["Bom"] = "bmf", ["Boma Nkuu"] = "bnt-bon", ["Boma Yumu"] = "bnt-boy", ["Bomboli"] = "bml", ["Bomboma"] = "bws", ["Bomitaba"] = "zmx", ["Bomu"] = "bmq", ["Bomwali"] = "bmw", ["Bon Gula"] = "glc", ["Bonan"] = "peh", ["Bondei"] = "bou", ["Bondo"] = "bfw", ["Bondoukou Kulango"] = "kzc", ["Bondum Dom Dogon"] = "dbu", ["Bonerate"] = "bna", ["Bonggi"] = "bdg", ["Bonggo"] = "bpg", ["Bongili"] = "bui", ["Bongo"] = "bot", ["Bongu"] = "bpu", ["Bonjo"] = "bok", ["Bonkeng"] = "bvg", ["Bonkiman"] = "bop", ["Bookan"] = "bnb", ["Boon"] = "bnl", ["Boor"] = "bvf", ["Bora"] = "boa", ["Border Kuna"] = "kvn", ["Borei"] = "gai", ["Boro"] = "xxb", ["Borong"] = "ksr", ["Boruca"] = "brn", ["Borôro"] = "bor", ["Boselewa"] = "bwf", ["Bosngun"] = "bqs", ["Bote-Majhi"] = "bmj", ["Botlikh"] = "bph", ["Botolan Sambal"] = "sbl", ["Bouna Kulango"] = "nku", ["Bourbonnais-Berrichon"] = "roa-bbn", ["Bourguignon"] = "roa-brg", ["Bouyei"] = "pcc", ["Bozaba"] = "bzo", ["Bragat"] = "aof", ["Brahui"] = "brh", ["Braj"] = "bra", ["Brazilian Sign Language"] = "bzs", ["Brek Karen"] = "kvl", ["Brem"] = "buq", ["Breri"] = "brq", ["Breton"] = "br", ["Bribri"] = "bzd", ["British Sign Language"] = "bfi", ["Brokkat"] = "bro", ["Brokpake"] = "sgt", ["Brokskat"] = "bkk", ["Brooke's Point Palawano"] = "plw", ["Broome Pearling Lugger Pidgin"] = "bpl", ["Brunei Bisaya"] = "bsb", ["Brunei Malay"] = "kxd", ["Bruny Island"] = "xpz", ["Bu"] = "jid", ["Bu-Nao Bunu"] = "bwx", ["Bua"] = "bub", ["Bualkhaw Chin"] = "cbl", ["Buamu"] = "box", ["Bube"] = "bvb", ["Bubi"] = "buw", ["Bubia"] = "bbx", ["Budeh Stieng"] = "stt", ["Budibud"] = "btp", ["Budong-Budong"] = "bdx", ["Budu"] = "buu", ["Budukh"] = "bdk", ["Buduma"] = "bdm", ["Budza"] = "bja", ["Buena Vista Yokuts"] = "nai-bvy", ["Bugan"] = "bbh", ["Bughotu"] = "bgt", ["Buginese"] = "bug", ["Buglere"] = "sab", ["Bugun"] = "bgg", ["Buhi'non Bikol"] = "ubl", ["Buhid"] = "bku", ["Buhutu"] = "bxh", ["Bujhyal"] = "byh", ["Bukar-Sadung Bidayuh"] = "sdo", ["Bukat"] = "bvk", ["Bukawa"] = "buk", ["Bukhari"] = "bhh", ["Bukit Malay"] = "bvu", ["Bukitan"] = "bkn", ["Bukiyip"] = "ape", ["Buksa"] = "tkb", ["Bukusu"] = "bxk", ["Bulgar"] = "xbo", ["Bulgarian"] = "bg", ["Bulgarian Sign Language"] = "bqn", ["Bulgebi"] = "bmp", ["Buli (Ghana)"] = "bwu", ["Buli (Indonesia)"] = "bzq", ["Bulo Stieng"] = "sti", ["Bulu (Cameroon)"] = "bum", ["Bulu (New Guinea)"] = "bjl", ["Bum"] = "bmv", ["Bumaji"] = "byp", ["Bumang"] = "bvp", ["Bumbita Arapesh"] = "aon", ["Bumthangkha"] = "kjz", ["Bun"] = "buv", ["Buna"] = "bvn", ["Bunaba"] = "bck", ["Bunak"] = "bfn", ["Bunama"] = "bdd", ["Bundeli"] = "bns", ["Bung"] = "bqd", ["Bungain"] = "but", ["Bunganditj"] = "xbg", ["Bungku"] = "bkz", ["Bungu"] = "wun", ["Bunoge"] = "dgb", ["Bunun"] = "bnn", ["Buol"] = "blf", ["Bura"] = "bwr", ["Bura Mabang"] = "mde", ["Burak"] = "bys", ["Buraka"] = "bkg", ["Burarra"] = "bvr", ["Burate"] = "bti", ["Burduna"] = "bxn", ["Bure"] = "bvh", ["Burgundian"] = "gem-bur", ["Burji"] = "bji", ["Burmese"] = "my", ["Burmeso"] = "bzu", ["Buru (Indonesia)"] = "mhs", ["Buru (Nigeria)"] = "bqw", ["Burui"] = "bry", ["Burumakok"] = "aip", ["Burun"] = "bdi", ["Burunge"] = "bds", ["Burushaski"] = "bsk", ["Burusu"] = "bqr", ["Buruwai"] = "asi", ["Buryat"] = "bua", ["Busa"] = "bqp", ["Busam"] = "bxs", ["Busami"] = "bsm", ["Busang Kayan"] = "bfg", ["Bushoong"] = "buf", ["Buso"] = "bso", ["Busoa"] = "bup", ["Bussa"] = "dox", ["Busuu"] = "bju", ["Butbut Kalinga"] = "kyb", ["Butchulla"] = "xby", ["Butmas-Tur"] = "bnr", ["Butuanon"] = "btw", ["Buwal"] = "bhs", ["Buyeo"] = "xpy", ["Buyu"] = "byi", ["Buyuan Jinuo"] = "jiy", ["Bwa"] = "bww", ["Bwaidoka"] = "bwd", ["Bwala"] = "bnt-bwa", ["Bwanabwana"] = "tte", ["Bwatoo"] = "bwa", ["Bwe Karen"] = "bwe", ["Bwela"] = "bwl", ["Bwile"] = "bwc", ["Bwisi"] = "bwz", ["Byangsi"] = "bee", ["Byep"] = "mkk", ["Bädi Kanum"] = "khd", ["Caac"] = "msq", ["Cabiyarí"] = "cbb", ["Cabécar"] = "cjp", ["Cacaloxtepec Mixtec"] = "miu", ["Cacaopera"] = "ccr", ["Cacgia Roglai"] = "roc", ["Cacua"] = "cbv", ["Cacán"] = "sai-cac", ["Caddo"] = "cad", ["Cafundó"] = "ccd", ["Cahuarano"] = "cah", ["Cahuilla"] = "chl", ["Cajonos Zapotec"] = "zad", ["Caka"] = "ckx", ["Cakchiquel-Quiché Mixed Language"] = "ckz", ["Cakfem-Mushere"] = "cky", ["Calabrian Greek"] = "grk-cal", ["Calamian Tagbanwa"] = "tbk", ["Callawalla"] = "caw", ["Calusa"] = "nai-cal", ["Caluyanun"] = "clu", ["Caló"] = "rmq", ["Camarines Norte Agta"] = "abd", ["Cameroon Mambila"] = "mcu", ["Cameroon Pidgin"] = "wes", ["Campalagian"] = "cml", ["Camsá"] = "kbh", ["Camtho"] = "cmt", ["Camunic"] = "xcc", ["Candoshi-Shapra"] = "cbu", ["Canela"] = "ram", ["Canichana"] = "caz", ["Cantonese"] = "yue", ["Cao Miao"] = "cov", ["Caolan"] = "mlc", ["Capanahua"] = "kaq", ["Capiznon"] = "cps", ["Cappadocian Greek"] = "cpg", ["Caquinte"] = "cot", ["Car Nicobarese"] = "caq", ["Cara"] = "cfd", ["Carabayo"] = "cby", ["Caramanta"] = "crf", ["Caranqui"] = "sai-caq", ["Carapana"] = "cbc", ["Carian"] = "xcr", ["Cariay"] = "awd-kar", ["Caribbean Hindustani"] = "hns", ["Caribbean Javanese"] = "jvn", ["Carijona"] = "cbd", ["Carolina Algonquian"] = "crr", ["Carolinian"] = "cal", ["Carpathian Romani"] = "rmc", ["Carrier"] = "crx", ["Cashibo-Cacataibo"] = "cbr", ["Cashinahua"] = "cbs", ["Casiguran Dumagat Agta"] = "dgc", ["Casuarina Coast Asmat"] = "asc", ["Catacao"] = "sai-cat", ["Catalan"] = "ca", ["Catalan Sign Language"] = "csc", ["Catawba"] = "chc", ["Catuquinaru"] = "sai-ctq", ["Catío Chibcha"] = "cba-cat", ["Cauca"] = "cca", ["Cavere"] = "awd-cav", ["Cavineña"] = "cav", ["Cayubaba"] = "cyb", ["Cayuga"] = "cay", ["Cayuse"] = "xcy", ["Cazcan"] = "azc-caz", ["Cañari"] = "sai-cnr", ["Cebaara Senoufo"] = "sef", ["Cebuano"] = "ceb", ["Celtiberian"] = "xce", ["Cemuhî"] = "cam", ["Cen"] = "cen", ["Central Asmat"] = "cns", ["Central Atlas Tamazight"] = "tzm", ["Central Awyu"] = "awu", ["Central Bai"] = "bca", ["Central Bontoc"] = "lbk", ["Central Cagayan Agta"] = "agt", ["Central Dusun"] = "dtp", ["Central Franconian"] = "gmw-cfr", ["Central Grebo"] = "grv", ["Central Huasteca Nahuatl"] = "nch", ["Central Huishui Hmong"] = "hmc", ["Central Kurdish"] = "ckb", ["Central Maewo"] = "mwo", ["Central Mahuatlán Zapoteco"] = "zam", ["Central Malay"] = "pse", ["Central Masela"] = "mxz", ["Central Mashan Hmong"] = "hmm", ["Central Mazahua"] = "maz", ["Central Melanau"] = "mel", ["Central Mnong"] = "cmo", ["Central Nahuatl"] = "nhn", ["Central Nicobarese"] = "ncb", ["Central Ojibwa"] = "ojc", ["Central Palawano"] = "plc", ["Central Pame"] = "pbs", ["Central Pomo"] = "poo", ["Central Puebla Nahuatl"] = "ncx", ["Central Sama"] = "sml", ["Central Siberian Yupik"] = "ess", ["Central Sierra Miwok"] = "csm", ["Central Subanen"] = "syb", ["Central Tagbanwa"] = "tgt", ["Central Tarahumara"] = "tar", ["Central Teke"] = "nzu", ["Central Tunebo"] = "tuf", ["Centúúm"] = "cet", ["Cerma"] = "cme", ["Ch'olti'"] = "myn-chl", ["Ch'orti'"] = "caa", ["Chaap Wuurong"] = "tjw", ["Chachi"] = "cbi", ["Chadian Arabic"] = "shu", ["Chadian Sign Language"] = "cds", ["Chadong"] = "cdy", ["Chagatai"] = "chg", ["Chaha"] = "sem-cha", ["Chaima"] = "ciy", ["Chairel"] = "sit-cha", ["Chak"] = "ckh", ["Chakali"] = "cli", ["Chakma"] = "ccp", ["Chala"] = "cll", ["Chaldean Neo-Aramaic"] = "cld", ["Chali"] = "tgf", ["Chamacoco"] = "ceg", ["Chamalal"] = "cji", ["Chamba Daka"] = "ccg", ["Chamba Leko"] = "ndi", ["Chambeali"] = "cdh", ["Chambri"] = "can", ["Chamicuro"] = "ccc", ["Chamling"] = "rab", ["Chamorro"] = "ch", ["Champenois"] = "roa-cha", ["Chang"] = "nbc", ["Changriwa"] = "cga", ["Changthang"] = "cna", ["Chantyal"] = "chx", ["Chaná"] = "sai-chn", ["Chané"] = "caj", ["Chapacura"] = "sai-chp", ["Chara"] = "cra", ["Charrua"] = "sai-chr", ["Chaudangsi"] = "cdn", ["Chaura"] = "crv", ["Chavacano"] = "cbk", ["Chayahuita"] = "cbt", ["Chayuco Mixtec"] = "mih", ["Chazumba Mixtec"] = "xtb", ["Che"] = "ruk", ["Chechen"] = "ce", ["Cheke Holo"] = "mrn", ["Chemakum"] = "xch", ["Chenapian"] = "cjn", ["Chenchu"] = "cde", ["Chenoua"] = "cnu", ["Chepang"] = "cdm", ["Chepya"] = "ycp", ["Cherepon"] = "cpn", ["Cherokee"] = "chr", ["Chesu"] = "ych", ["Chetco-Tolowa"] = "ctc", ["Chewong"] = "cwg", ["Cheyenne"] = "chy", ["Chhattisgarhi"] = "hne", ["Chhintange"] = "ctn", ["Chhulung"] = "cur", ["Chiangmai Sign Language"] = "csd", ["Chiapanec"] = "cip", ["Chibcha"] = "chb", ["Chicahuaxtla Triqui"] = "trs", ["Chichewa"] = "ny", ["Chichicapan Zapotec"] = "zpv", ["Chichimeca-Jonaz"] = "pei", ["Chichonyi-Chidzihana-Chikauma"] = "coh", ["Chickasaw"] = "cic", ["Chicomuceltec"] = "cob", ["Chiduruma"] = "dug", ["Chigmecatitlán Mixtec"] = "mii", ["Chilcotin"] = "clc", ["Chilean Sign Language"] = "csg", ["Chilisso"] = "clh", ["Chiltepec Chinantec"] = "csa", ["Chimalapa Zoque"] = "zoh", ["Chimariko"] = "cid", ["Chimila"] = "cbg", ["Chimwiini"] = "bnt-cmw", ["Chinali"] = "cih", ["Chinbon Chin"] = "cnb", ["Chinese"] = "zh", ["Chinese Pidgin English"] = "cpi", ["Chinese Sign Language"] = "csl", ["Chinook"] = "chh", ["Chinook Jargon"] = "chn", ["Chipaya"] = "cap", ["Chipewyan"] = "chp", ["Chiquihuitlán Mazatec"] = "maq", ["Chiquimulilla"] = "nai-chi", ["Chiquitano"] = "cax", ["Chiricahua"] = "apm", ["Chirino"] = "sai-chi", ["Chiripá"] = "nhd", ["Chiru"] = "cdf", ["Chitimacha"] = "ctm", ["Chitkuli Kinnauri"] = "cik", ["Chittagonian"] = "ctg", ["Chitwania Tharu"] = "the", ["Chiwere"] = "iow", ["Choapan Zapotec"] = "zpc", ["Chocangaca"] = "cgk", ["Chochotec"] = "coz", ["Choctaw"] = "cho", ["Chodri"] = "cdi", ["Chokri Naga"] = "nri", ["Chokwe"] = "cjk", ["Chol"] = "ctu", ["Cholón"] = "cht", ["Chong"] = "cog", ["Choni"] = "cda", ["Chono"] = "sai-cno", ["Chopi"] = "cce", ["Chothe Naga"] = "nct", ["Chrau"] = "crw", ["Chru"] = "cje", ["Chuabo"] = "chw", ["Chuanqiandian Cluster Miao"] = "cqd", ["Chuave"] = "cjv", ["Chug"] = "cvg", ["Chuj"] = "cac", ["Chuka"] = "cuh", ["Chukchi"] = "ckt", ["Chukwa"] = "cuw", ["Chulym"] = "clw", ["Chumburung"] = "ncu", ["Churahi"] = "cdj", ["Churuya"] = "sai-chu", ["Chut"] = "scb", ["Chuukese"] = "chk", ["Chuvan"] = "xcv", ["Chuvash"] = "cv", ["Chácobo"] = "cao", ["Ci Gbe"] = "cib", ["Cia-Cia"] = "cia", ["Cibak"] = "ckl", ["Cicipu"] = "awc", ["Ciguayo"] = "nai-cig", ["Cimbrian"] = "cim", ["Cinamiguin Manobo"] = "mkx", ["Cinda-Regi-Tiyal"] = "cdr", ["Cineni"] = "cie", ["Cinta Larga"] = "cin", ["Cishingini"] = "asg", ["Citak"] = "txt", ["Ciwogai"] = "tgd", ["Classical Guaraní"] = "gn-cls", ["Classical Mandaic"] = "myz", ["Classical Mongolian"] = "cmg", ["Classical Nahuatl"] = "nci", ["Classical Newar"] = "nwc", ["Classical Quechua"] = "qwc", ["Classical Syriac"] = "syc", ["Classical Tibetan"] = "xct", ["Coahuilteco"] = "xcw", ["Coast Miwok"] = "csi", ["Coastal Kadazan"] = "kzj", ["Coastal Konjo"] = "kjc", ["Coatecas Altas Zapotec"] = "zca", ["Coatepec Nahuatl"] = "naz", ["Coatlán Mixe"] = "mco", ["Coatlán Zapotec"] = "zps", ["Coatzospan Mixtec"] = "miz", ["Cocama"] = "cod", ["Cochimi"] = "coj", ["Cocopa"] = "coc", ["Cocos Islands Malay"] = "coa", ["Coeruna"] = "sai-coe", ["Coeur d'Alene"] = "crd", ["Cofán"] = "con", ["Cogui"] = "kog", ["Col"] = "liw", ["Colombian Sign Language"] = "csn", ["Colonia Tovar German"] = "gct", ["Columbia-Wenatchi"] = "col", ["Colán"] = "sai-col", ["Comaltepec Chinantec"] = "cco", ["Comanche"] = "com", ["Comechingon"] = "sai-cmg", ["Comecrudo"] = "xcm", ["Communicationssprache"] = "art-com", ["Como Karim"] = "cfg", ["Comox"] = "coo", ["Con"] = "cno", ["Coos"] = "csz", ["Copainalá Zoque"] = "zoc", ["Copala Triqui"] = "trc", ["Copallén"] = "sai-cop", ["Coptic"] = "cop", ["Coquille"] = "coq", ["Cora"] = "crn", ["Cori"] = "cry", ["Cornish"] = "kw", ["Coroado Puri"] = "sai-crd", ["Corsican"] = "co", ["Cosoleacaque Nahuatl"] = "nhk", ["Costa Rican Sign Language"] = "csr", ["Cotabato Manobo"] = "mta", ["Cotoname"] = "xcn", ["Cowlitz"] = "cow", ["Coyaima"] = "coy", ["Coyotepec Popoloca"] = "pbf", ["Coyutla Totonac"] = "toc", ["Cree"] = "cr", ["Creek"] = "mus", ["Crimean Gothic"] = "gme-cgo", ["Crimean Tatar"] = "crh", ["Croatian Sign Language"] = "csq", ["Cross River Mbembe"] = "mfn", ["Crow"] = "cro", ["Cruzeño"] = "crz", ["Cua"] = "cua", ["Cuban Sign Language"] = "csf", ["Cubeo"] = "cub", ["Cueva"] = "sai-cva", ["Cuiba"] = "cui", ["Cuitlatec"] = "cuy", ["Culina"] = "cul", ["Culli"] = "sai-cul", ["Cumanagoto"] = "cuo", ["Cumbric"] = "xcb", ["Cun"] = "cuq", ["Cung"] = "cug", ["Cupeño"] = "cup", ["Curonian"] = "xcu", ["Curripaco"] = "kpc", ["Cutchi-Swahili"] = "ccl", ["Cuvok"] = "cuv", ["Cuyamecalco Mixtec"] = "xtu", ["Cuyunon"] = "cyo", ["Cwi Bwamu"] = "bwy", ["Cypriot Arabic"] = "acy", ["Czech"] = "cs", ["Czech Sign Language"] = "cse", ["Côông"] = "cnc", ["Da'a Kaili"] = "kzf", ["Daai Chin"] = "dao", ["Daantanai'"] = "lni", ["Daasanach"] = "dsh", ["Daba"] = "dbq", ["Dabarre"] = "dbr", ["Dabe"] = "dbe", ["Dacian"] = "xdc", ["Dadanitic"] = "sem-dad", ["Dadi Dadi"] = "dda", ["Dadibi"] = "mps", ["Dadiya"] = "dbd", ["Daga"] = "dgz", ["Dagaari Dioula"] = "dgd", ["Dagba"] = "dgk", ["Dagbani"] = "dag", ["Dagik"] = "dec", ["Dagoman"] = "dgn", ["Dahalik"] = "dlk", ["Dahalo"] = "dal", ["Daho-Doo"] = "das", ["Dai"] = "dij", ["Dair"] = "drb", ["Dairi Batak"] = "btd", ["Dakaka"] = "bpa", ["Dakka"] = "dkk", ["Dakota"] = "dak", ["Dakpa"] = "dka", ["Dalmatian"] = "dlm", ["Daloa Bété"] = "bev", ["Dama (Nigeria)"] = "dmm", ["Dama (Sierra Leone)"] = "dmn-dam", ["Damakawa"] = "dam", ["Damal"] = "uhn", ["Dambi"] = "dac", ["Dameli"] = "dml", ["Dampelas"] = "dms", ["Dan"] = "dnj", ["Danaru"] = "dnr", ["Danau"] = "dnu", ["Dandami Maria"] = "daq", ["Dangaléat"] = "daa", ["Dangaura Tharu"] = "thl", ["Danish"] = "da", ["Danish Sign Language"] = "dsl", ["Dano"] = "aso", ["Danu"] = "dnv", ["Danuwar"] = "dhw", ["Dao"] = "daz", ["Daonda"] = "dnd", ["Dar Daju Daju"] = "djc", ["Dar Fur Daju"] = "daj", ["Dar Sila Daju"] = "dau", ["Darai"] = "dry", ["Dargwa"] = "dar", ["Darkinjung"] = "xda", ["Darlong"] = "dln", ["Darmiya"] = "drd", ["Daro-Matu Melanau"] = "dro", ["Darumbal"] = "xgm", ["Dass"] = "dot", ["Datooga"] = "tcc", ["Daungwurrung"] = "dgw", ["Daur"] = "dta", ["Davawenyo"] = "daw", ["Dawawa"] = "dww", ["Dawera-Daweloor"] = "ddw", ["Dawro"] = "dwr", ["Day"] = "dai", ["Dayi"] = "dax", ["Dazaga"] = "dzg", ["Deccani"] = "dcc", ["Dedua"] = "ded", ["Defaka"] = "afn", ["Defi Gbe"] = "gbh", ["Deg"] = "mzw", ["Deg Xinag"] = "ing", ["Degema"] = "deg", ["Degenan"] = "dge", ["Dehwari"] = "deh", ["Dek"] = "dek", ["Dela-Oenale"] = "row", ["Delo"] = "ntr", ["Delta Yokuts"] = "nai-dly", ["Dem"] = "dem", ["Dema"] = "dmx", ["Demisa"] = "dei", ["Demotic"] = "egx-dem", ["Demta"] = "dmy", ["Dena'ina"] = "tfn", ["Dendi"] = "ddn", ["Dengese"] = "dez", ["Dengka"] = "dnk", ["Deno"] = "dbb", ["Denya"] = "anv", ["Dení"] = "dny", ["Deori"] = "der", ["Desano"] = "des", ["Desiya"] = "dso", ["Dewas Rai"] = "dwz", ["Dewoin"] = "dee", ["Dezfuli"] = "def", ["Dghwede"] = "dgh", ["Dhaiso"] = "dhs", ["Dhalandji"] = "dhl", ["Dhangu"] = "dhg", ["Dhanki"] = "dhn", ["Dhao"] = "nfa", ["Dharug"] = "xdk", ["Dhatki"] = "mki", ["Dhimal"] = "dhi", ["Dhivehi"] = "dv", ["Dhodia"] = "dho", ["Dhofari Arabic"] = "adf", ["Dhudhuroa"] = "ddr", ["Dhungaloo"] = "dhx", ["Dhurga"] = "dhu", ["Dhuwal"] = "dwu", ["Dhuwaya"] = "dwy", ["Dia"] = "dia", ["Dibabawon Manobo"] = "mbd", ["Dibiyaso"] = "dby", ["Dibo"] = "dio", ["Dicamay Agta"] = "duy", ["Didinga"] = "did", ["Dieri"] = "dif", ["Digo"] = "dig", ["Dii"] = "dur", ["Dijim-Bwilim"] = "cfa", ["Dilling"] = "dil", ["Dima"] = "jma", ["Dimasa"] = "dis", ["Dimbong"] = "dii", ["Dime"] = "dim", ["Dinapigue Agta"] = "phi-din", ["Dineor"] = "mrx", ["Ding"] = "diz", ["Dinka"] = "din", ["Diodio"] = "ddi", ["Dirasha"] = "gdl", ["Diri"] = "dwa", ["Dirim"] = "dir", ["Disa"] = "dsi", ["Ditammari"] = "tbz", ["Ditidaht"] = "dtd", ["Diuwe"] = "diy", ["Diuxi-Tilantongo Mixtec"] = "xtd", ["Dixon Reef"] = "dix", ["Dizin"] = "mdx", ["Djadjawurrung"] = "dja", ["Djambarrpuyngu"] = "djr", ["Djangun"] = "djf", ["Djauan"] = "djn", ["Djawi"] = "djw", ["Djimini"] = "dyi", ["Djinang"] = "dji", ["Djinba"] = "djb", ["Djiwarli"] = "djl", ["Dobel"] = "kvo", ["Dobu"] = "dob", ["Doe"] = "doe", ["Doga"] = "dgg", ["Doghoro"] = "dgx", ["Dogoso"] = "dgs", ["Dogosé"] = "dos", ["Dogri"] = "doi", ["Dogrib"] = "dgr", ["Dogul Dom"] = "dbg", ["Doka"] = "dbi", ["Doko-Uyanga"] = "uya", ["Dolgan"] = "dlg", ["Dom"] = "doa", ["Domaaki"] = "dmk", ["Domari"] = "rmt", ["Dominican Sign Language"] = "doq", ["Dompo"] = "doy", ["Domu"] = "dof", ["Domung"] = "dev", ["Dondo"] = "dok", ["Dong"] = "doh", ["Dongo"] = "doo", ["Dongolawi"] = "kzh", ["Dongotono"] = "ddd", ["Dongshanba Lalo"] = "yik", ["Dongxiang"] = "sce", ["Donno So Dogon"] = "dds", ["Doondo"] = "dde", ["Dorasque"] = "cba-dor", ["Dori'o"] = "dor", ["Dorig"] = "wwo", ["Doromu-Koki"] = "kqc", ["Dorze"] = "doz", ["Doso"] = "dol", ["Doteli"] = "dty", ["Dothraki"] = "art-dtk", ["Doura"] = "don", ["Doutai"] = "tds", ["Doyayo"] = "dow", ["Drehu"] = "dhv", ["Drung"] = "duu", ["Duala"] = "dua", ["Duano"] = "dup", ["Duau"] = "dva", ["Dubli"] = "dub", ["Dubu"] = "dmu", ["Dugun"] = "ndu", ["Duguri"] = "dbm", ["Dugwor"] = "dme", ["Duhwa"] = "kbz", ["Duit"] = "cba-dui", ["Duke"] = "nke", ["Dukhan"] = "trk-dkh", ["Dulbu"] = "dbo", ["Duli"] = "duz", ["Duma"] = "dma", ["Dumaitic"] = "sem-dum", ["Dumbea"] = "duf", ["Dumi"] = "dus", ["Dumpas"] = "dmv", ["Dumun"] = "dui", ["Duna"] = "duc", ["Dungan"] = "dng", ["Dungmali"] = "raa", ["Dungra Bhil"] = "duh", ["Dungu"] = "dbv", ["Dupaningan Agta"] = "duo", ["Dura"] = "drq", ["Duri"] = "mvp", ["Duriankere"] = "dbn", ["Duruwa"] = "pci", ["Dusner"] = "dsn", ["Dusun Deyah"] = "dun", ["Dusun Malang"] = "duq", ["Dusun Witu"] = "duw", ["Dutch"] = "nl", ["Dutch Low Saxon"] = "nds-nl", ["Dutch Sign Language"] = "dse", ["Duun"] = "dux", ["Duupa"] = "dae", ["Duvle"] = "duv", ["Duwai"] = "dbp", ["Duwet"] = "gve", ["Dwang"] = "nnu", ["Dyaabugay"] = "dyy", ["Dyaberdyaber"] = "dyb", ["Dyan"] = "dya", ["Dyangadi"] = "dyn", ["Dyirbal"] = "dbl", ["Dyugun"] = "dyd", ["Dyula"] = "dyu", ["Dza"] = "jen", ["Dzala"] = "dzl", ["Dzando"] = "dzn", ["Dzao Min"] = "bpn", ["Dzodinka"] = "add", ["Dzongkha"] = "dz", ["Dzuun"] = "dnn", ["Dâw"] = "kwa", ["E"] = "eee", ["E'ma Buyang"] = "yzg", ["Early Assamese"] = "inc-oas", ["Early Modern Korean"] = "ko-ear", ["Early Tripuri"] = "xtr", ["East Central German"] = "gmw-ecg", ["East Damar"] = "dmr", ["East Franconian"] = "vmf", ["East Futuna"] = "fud", ["East Kewa"] = "kjs", ["East Limba"] = "lma", ["East Makian"] = "mky", ["East Masela"] = "vme", ["East Nyala"] = "nle", ["East Tarangan"] = "tre", ["East Yugur"] = "yuy", ["Eastern Acipa"] = "acp", ["Eastern Arrernte"] = "aer", ["Eastern Bolivian Guaraní"] = "gui", ["Eastern Bontoc"] = "ebk", ["Eastern Bru"] = "bru", ["Eastern Canadian Inuktitut"] = "ike", ["Eastern Cham"] = "cjm", ["Eastern Durango Nahuatl"] = "azd", ["Eastern Gorkha Tamang"] = "tge", ["Eastern Gurung"] = "ggn", ["Eastern Highland Chatino"] = "cly", ["Eastern Highland Otomi"] = "otm", ["Eastern Huasteca Nahuatl"] = "nhe", ["Eastern Huishui Hmong"] = "hme", ["Eastern Karaboro"] = "xrb", ["Eastern Katu"] = "ktv", ["Eastern Kayah"] = "eky", ["Eastern Keres"] = "kee", ["Eastern Krahn"] = "kqo", ["Eastern Lalu"] = "yit", ["Eastern Lawa"] = "lwl", ["Eastern Magar"] = "mgp", ["Eastern Maninkakan"] = "emk", ["Eastern Mari"] = "mhr", ["Eastern Meohang"] = "emg", ["Eastern Mnong"] = "mng", ["Eastern Muria"] = "emu", ["Eastern Ngad'a"] = "nea", ["Eastern Nisu"] = "nos", ["Eastern Ojibwa"] = "ojg", ["Eastern Parbate Kham"] = "kif", ["Eastern Penan"] = "pez", ["Eastern Pomo"] = "peb", ["Eastern Pwo"] = "kjp", ["Eastern Qiandong Miao"] = "hmq", ["Eastern Tamang"] = "taj", ["Eastern Tawbuid"] = "bnj", ["Eastern Xiangxi Miao"] = "muq", ["Eastern Xwla Gbe"] = "gbx", ["Ebira"] = "igb", ["Eblaite"] = "xeb", ["Ebrié"] = "ebr", ["Ebughu"] = "ebg", ["Ecuadorian Sign Language"] = "ecs", ["Ede Cabe"] = "cbj", ["Ede Ica"] = "ica", ["Ede Idaca"] = "idd", ["Ede Ije"] = "ijj", ["Ede Nago"] = "nqg", ["Edera Awyu"] = "awy", ["Edo"] = "bin", ["Edolo"] = "etr", ["Edomite"] = "xdm", ["Edopi"] = "dbf", ["Efai"] = "efa", ["Efe"] = "efe", ["Efik"] = "efi", ["Efutop"] = "ofu", ["Ega"] = "ega", ["Eggon"] = "ego", ["Egyptian"] = "egy", ["Egyptian Arabic"] = "arz", ["Egyptian Sign Language"] = "esl", ["Ehueun"] = "ehu", ["Eipomek"] = "eip", ["Eitiep"] = "eit", ["Ejagham"] = "etu", ["Ejamat"] = "eja", ["Ekajuk"] = "eka", ["Ekari"] = "ekg", ["Ekele"] = "khy", ["Eki"] = "eki", ["Ekit"] = "eke", ["Ekpeye"] = "ekp", ["El Alto Zapotec"] = "zpp", ["El Hugeirat"] = "elh", ["El Molo"] = "elo", ["Elamite"] = "elx", ["Eleme"] = "elm", ["Elepi"] = "ele", ["Elfdalian"] = "ovd", ["Elip"] = "ekm", ["Elkei"] = "elk", ["Eloi"] = "art-elo", ["Elotepec Zapotec"] = "zte", ["Eloyi"] = "afo", ["Elseng"] = "mrf", ["Elu"] = "elu", ["Elymian"] = "xly", ["Emae"] = "mmw", ["Emai"] = "ema", ["Eman"] = "emn", ["Embaloh"] = "emb", ["Emberá-Baudó"] = "bdc", ["Emberá-Catío"] = "cto", ["Emberá-Chamí"] = "cmi", ["Emberá-Tadó"] = "tdc", ["Embu"] = "ebu", ["Emem"] = "enr", ["Emerillon"] = "eme", ["Emilian"] = "egl", ["Emplawas"] = "emw", ["En"] = "enc", ["Enawené-Nawé"] = "unk", ["Ende"] = "end", ["Enga"] = "enq", ["Engenni"] = "enn", ["Enggano"] = "eno", ["अंग्रेज़ी"] = "en", ["Enlhet"] = "enl", ["Enrekang"] = "ptt", ["Enu"] = "enu", ["Enwan"] = "env", ["Enwang"] = "enw", ["Enxet"] = "enx", ["Enya"] = "gey", ["Eotile"] = "eot", ["Epena"] = "sja", ["Epi-Olmec"] = "xep", ["Epie"] = "epi", ["Epigraphic Mayan"] = "emy", ["Eravallan"] = "era", ["Erave"] = "kjy", ["Ere"] = "twp", ["Erie"] = "iro-ere", ["Eritai"] = "ert", ["Erokwanas"] = "erw", ["Erre"] = "err", ["Erromintxela"] = "emx", ["Ersu"] = "ers", ["Eruwa"] = "erh", ["Erzya"] = "myv", ["Esan"] = "ish", ["Ese"] = "mcq", ["Ese Ejja"] = "ese", ["Eshtehardi"] = "esh", ["Esimbi"] = "ags", ["Eskayan"] = "esy", ["Esmeralda"] = "sai-esm", ["Esperanto"] = "eo", ["Esselen"] = "esq", ["Estado de México Otomi"] = "ots", ["Estonian"] = "et", ["Estonian Sign Language"] = "eso", ["Esuma"] = "esm", ["Etchemin"] = "etc", ["Etebi"] = "etb", ["Eten"] = "etx", ["Eteocretan"] = "ecr", ["Eteocypriot"] = "ecy", ["Ethiopian Sign Language"] = "eth", ["Etkywan"] = "ich", ["Eton (Cameroon)"] = "eto", ["Eton (Vanuatu)"] = "etn", ["Etruscan"] = "ett", ["Etulo"] = "utr", ["Evant"] = "bzz", ["Even"] = "eve", ["Evenki"] = "evn", ["Ewage-Notu"] = "nou", ["Ewarhuyana"] = "sai-ewa", ["Ewe"] = "ee", ["Ewondo"] = "ewo", ["Extremaduran"] = "ext", ["Eyak"] = "eya", ["Ezaa"] = "eza", ["Fagani"] = "faf", ["Faire Atta"] = "azt", ["Faita"] = "faj", ["Faiwol"] = "fai", ["Fakkanci"] = "gel", ["Fala"] = "fax", ["Falam Chin"] = "cfm", ["Fali"] = "fli", ["Faliscan"] = "xfa", ["Fam"] = "fam", ["Fanagalo"] = "fng", ["Fanamaket"] = "bjp", ["Fang (Bantu)"] = "fan", ["Fang (Beboid)"] = "fak", ["Fania"] = "fni", ["Far Western Muria"] = "fmu", ["Farefare"] = "gur", ["Faroese"] = "fo", ["Fas"] = "fqs", ["Fasu"] = "faa", ["Fataleka"] = "far", ["Fataluku"] = "ddg", ["Fayu"] = "fau", ["Fe'fe'"] = "fmp", ["Fedan"] = "pdn", ["Fembe"] = "agl", ["Fer"] = "kah", ["Feroge"] = "fer", ["Fiji Hindi"] = "hif", ["Fijian"] = "fj", ["Filomena Mata-Coahuitlán Totonac"] = "tlp", ["Finisterre Yau"] = "yuw", ["Finnish"] = "fi", ["Finnish Sign Language"] = "fse", ["Finnish-Swedish Sign Language"] = "fss", ["Finongan"] = "fag", ["Fipa"] = "fip", ["Firan"] = "fir", ["Fiwaga"] = "fiw", ["Flemish Sign Language"] = "vgt", ["Flinders Island"] = "fln", ["Foau"] = "flh", ["Fogaha"] = "ber-fog", ["Foi"] = "foi", ["Foia Foia"] = "ffi", ["Folopa"] = "ppo", ["Foma"] = "fom", ["Fon"] = "fon", ["Fongoro"] = "fgr", ["Foodo"] = "fod", ["Forak"] = "frq", ["Fordata"] = "frd", ["Fore"] = "for", ["Forest Enets"] = "enf", ["Forest Nenets"] = "syd-fne", ["Fortsenal"] = "frt", ["Fox"] = "sac", ["Franc-Comtois"] = "roa-fcm", ["Francisco León Zoque"] = "zos", ["Franco-Provençal"] = "frp", ["फ़्रांसीसी"] = "fr", ["French Belgian Sign Language"] = "sfb", ["French Sign Language"] = "fsl", ["Friulian"] = "fur", ["Fula"] = "ff", ["Fuliiru"] = "flr", ["Fulniô"] = "fun", ["Fum"] = "fum", ["Fungwa"] = "ula", ["Fur"] = "fvr", ["Furu"] = "fuu", ["Futuna-Aniwa"] = "fut", ["Fuyug"] = "fuy", ["Fwe"] = "fwe", ["Fwâi"] = "fwa", ["Fyam"] = "pym", ["Fyer"] = "fie", ["Ga"] = "gaa", ["Ga'anda"] = "gqa", ["Ga'dang"] = "gdg", ["Gaa"] = "ttb", ["Gaam"] = "tbi", ["Gabadi"] = "kbt", ["Gabi"] = "gbw", ["Gabri"] = "gab", ["Gabrielino-Fernandeño"] = "xgf", ["Gadang"] = "gdk", ["Gaddang"] = "gad", ["Gaddi"] = "gbk", ["Gade"] = "ged", ["Gadjerawang"] = "gdh", ["Gadsup"] = "gaj", ["Gafat"] = "gft", ["Gagadu"] = "gbu", ["Gagauz"] = "gag", ["Gagnoa Bété"] = "btg", ["Gahri"] = "bfu", ["Gaikundi"] = "gbf", ["Gaina"] = "gcn", ["Gal"] = "gap", ["Galambu"] = "glo", ["Galatian"] = "xga", ["Galela"] = "gbi", ["Galeya"] = "gar", ["Galibi Carib"] = "car", ["Galice"] = "gce", ["Galician"] = "gl", ["Galindan"] = "xgl", ["Gallaecian"] = "cel-gal", ["Gallo"] = "roa-gal", ["Gallurese"] = "sdn", ["Galo"] = "adl", ["Galoli"] = "gal", ["Gamale Kham"] = "kgj", ["Gambera"] = "gma", ["Gamela"] = "sai-gam", ["Gamilaraay"] = "kld", ["Gamit"] = "gbl", ["Gamkonora"] = "gak", ["Gamo"] = "gmv", ["Gamo-Ningi"] = "bte", ["Gan"] = "gan", ["Gana"] = "gnq", ["Ganang"] = "gne", ["Gandhari"] = "pgd", ["Gane"] = "gzn", ["Ganggalida"] = "gcd", ["Ganglau"] = "ggl", ["Gangte"] = "gnb", ["Gangulu"] = "gnl", ["Gants"] = "gao", ["Ganza"] = "gza", ["Ganzi"] = "gnz", ["Gao"] = "gga", ["Gapapaiwa"] = "pwg", ["Garawa"] = "wrk", ["Garhwali"] = "gbm", ["Garifuna"] = "cab", ["Garingbal"] = "xgi", ["Garo"] = "grt", ["Garre"] = "gex", ["Garus"] = "gyb", ["Garza"] = "xgr", ["Gashowu"] = "nai-gsy", ["Gata'"] = "gaq", ["Gaulish"] = "cel-gau", ["Gavak"] = "dmc", ["Gavar"] = "gou", ["Gavião do Jiparaná"] = "gvo", ["Gawar-Bati"] = "gwt", ["Gawwada"] = "gwd", ["Gayil"] = "gyl", ["Gayo"] = "gay", ["Gayón"] = "sai-gay", ["Gbagyi"] = "gbr", ["Gban"] = "ggu", ["Gbanu"] = "gbv", ["Gbanziri"] = "gbg", ["Gbari"] = "gby", ["Gbaya"] = "gba", ["Gbaya-Bossangoa"] = "gbp", ["Gbaya-Bozoum"] = "gbq", ["Gbaya-Mbodomo"] = "gmm", ["Gbayi"] = "gyg", ["Gbesi Gbe"] = "gbs", ["Gbii"] = "ggb", ["Gbin"] = "xgb", ["Gbiri-Niragu"] = "grh", ["Gboloo Grebo"] = "gec", ["Gciriku"] = "diu", ["Gcwi"] = "gwj", ["Ge"] = "hmj", ["Ge'ez"] = "gez", ["Geba Karen"] = "kvq", ["Gebe"] = "gei", ["Gedaged"] = "gdd", ["Gedeo"] = "drs", ["Geji"] = "gji", ["Geko Karen"] = "ghk", ["Gela"] = "nlg", ["Gelao"] = "gio", ["Gele'"] = "sbc", ["Geme"] = "geq", ["Gen"] = "gej", ["Gende"] = "gaf", ["Gengle"] = "geg", ["Georgian"] = "ka", ["Gepo"] = "ygp", ["Gera"] = "gew", ["Gerka"] = "gek", ["जर्मन"] = "de", ["German Low German"] = "nds-de", ["German Sign Language"] = "gsg", ["Geruma"] = "gea", ["Geser-Gorom"] = "ges", ["Gey"] = "guv", ["Ghadames"] = "gha", ["Ghanaian Sign Language"] = "gse", ["Ghandruk Sign Language"] = "gds", ["Ghanongga"] = "ghn", ["Ghari"] = "gri", ["Ghayavi"] = "bmk", ["Ghera"] = "ghr", ["Ghomala'"] = "bbj", ["Ghomara"] = "gho", ["Ghotuo"] = "aaa", ["Ghulfan"] = "ghl", ["Giangan"] = "bgi", ["Gibanawa"] = "gib", ["Gidar"] = "gid", ["Gikyode"] = "acd", ["Gilaki"] = "glk", ["Gilbertese"] = "gil", ["Gilima"] = "gix", ["Gimi (Austronesian)"] = "gip", ["Gimi (Goroka)"] = "gim", ["Gimme"] = "kmp", ["Gimnime"] = "gmn", ["Ginuman"] = "gnm", ["Girawa"] = "bbr", ["Girirra"] = "gii", ["Giryama"] = "nyf", ["Githabul"] = "gih", ["Gitua"] = "ggt", ["Gitxsan"] = "git", ["Giyug"] = "giy", ["Gizrra"] = "tof", ["Glaro-Twabo"] = "glr", ["Glavda"] = "glw", ["Glio-Oubi"] = "oub", ["Glosa"] = "igs", ["Gnau"] = "gnu", ["Goa'uld"] = "art-gld", ["Goaria"] = "gig", ["Gobasi"] = "goi", ["Gobu"] = "gox", ["Godié"] = "god", ["Godoberi"] = "gdo", ["Godwari"] = "gdx", ["Goemai"] = "ank", ["Gofa"] = "gof", ["Gogo"] = "gog", ["Gogodala"] = "ggw", ["Goguryeo"] = "zkg", ["Gojri"] = "gju", ["Gokana"] = "gkn", ["Gokhy"] = "sit-gkh", ["Gola"] = "gol", ["Golin"] = "gvf", ["Golpa"] = "lja", ["Gondi"] = "gon", ["Gone Dau"] = "goo", ["Gong"] = "ugo", ["Gongduk"] = "goe", ["Gonja"] = "gjn", ["Goo"] = "gov", ["Gooniyandi"] = "gni", ["Gor"] = "gqr", ["Gorakor"] = "goc", ["Gorap"] = "goq", ["Goreng"] = "xgg", ["Gorontalo"] = "gor", ["Gorovu"] = "grq", ["Gorowa"] = "gow", ["Gothic"] = "got", ["Gottscheerish"] = "gmw-gts", ["Goundo"] = "goy", ["Gourmanchéma"] = "gux", ["Gowlan"] = "goj", ["Gowro"] = "gwf", ["Gozarkhani"] = "goz", ["Grangali"] = "nli", ["Grass Koiari"] = "kbk", ["Grebo"] = "grb", ["Greek"] = "el", ["Greek Sign Language"] = "gss", ["Green Gelao"] = "giq", ["Green Hmong"] = "hnj", ["Greenlandic"] = "kl", ["Grenadian Creole English"] = "gcl", ["Gresi"] = "grs", ["Groma"] = "gro", ["Gros Ventre"] = "ats", ["Gua"] = "gwx", ["Guahibo"] = "guh", ["Guajajára"] = "gub", ["Guajá"] = "gvj", ["Guambiano"] = "gum", ["Guamo"] = "sai-gmo", ["Guanano"] = "gvc", ["Guanche"] = "gnc", ["Guaraní"] = "gn", ["Guarayu"] = "gyr", ["Guatemalan Sign Language"] = "gsm", ["Guató"] = "gta", ["Guayabero"] = "guo", ["Guazacapán"] = "nai-guz", ["Gudang"] = "xgd", ["Gudanji"] = "nji", ["Gude"] = "gde", ["Gudu"] = "gdu", ["Guduf-Gava"] = "gdf", ["Guerrero Amuzgo"] = "amu", ["Guerrero Nahuatl"] = "ngu", ["Guevea de Humboldt Zapotec"] = "zpg", ["Gugadj"] = "ggd", ["Gugu Badhun"] = "gdc", ["Gugu Warra"] = "wrw", ["Guhu-Samane"] = "ghs", ["Guianese Creole"] = "gcr", ["Guiberoua Bété"] = "bet", ["Guinau"] = "awd-gnu", ["Guinea Kpelle"] = "gkp", ["Guinea-Bissau Creole"] = "pov", ["Guinea-Bissau Sign Language"] = "lgs", ["Guinean Sign Language"] = "gus", ["Guiqiong"] = "gqi", ["गुजराती"] = "gu", ["Gula"] = "glu", ["Gula'alaa"] = "gmb", ["Gulay"] = "gvl", ["Gule"] = "gly", ["Gulf Arabic"] = "afb", ["Gullah"] = "gul", ["Gumalu"] = "gmu", ["Gumatj"] = "gnn", ["Gumawana"] = "gvs", ["Gumuz"] = "guk", ["Gun"] = "guw", ["Gundi"] = "gdi", ["Gunditjmara"] = "gjm", ["Gundungurra"] = "xrd", ["Gungabula"] = "gyf", ["Gungu"] = "rub", ["Guntai"] = "gnt", ["Gunu"] = "yas", ["Gunwinggu"] = "gup", ["Gunya"] = "gyy", ["Gupa-Abawa"] = "gpa", ["Gupapuyngu"] = "guf", ["Gur Lama"] = "las", ["Guragone"] = "gge", ["Guramalum"] = "grz", ["Gurani"] = "hac", ["Gureng Gureng"] = "gnr", ["Gurgula"] = "ggg", ["Guriaso"] = "grx", ["Gurindji"] = "gue", ["Gurjar Apabhramsa"] = "inc-gup", ["Gurmana"] = "gvm", ["Guro"] = "goa", ["Guruntum"] = "grd", ["Gusan"] = "gsn", ["Gusii"] = "guz", ["Gusilay"] = "gsl", ["Gutnish"] = "gmq-gut", ["Guugu Yimidhirr"] = "kky", ["Guwa"] = "xgw", ["Guwamu"] = "gwu", ["Guwar"] = "aus-guw", ["Guya"] = "gka", ["Guyanese Creole English"] = "gyn", ["Guyani"] = "gvy", ["Guébie"] = "gie", ["Gvoko"] = "ngs", ["Gwa"] = "gwb", ["Gwahatike"] = "dah", ["Gwak"] = "jgk", ["Gwamhi-Wuri"] = "bga", ["Gwandara"] = "gwn", ["Gwara"] = "alv-gwa", ["Gweda"] = "grw", ["Gweno"] = "gwe", ["Gwere"] = "gwr", ["Gwich'in"] = "gwi", ["Gyalsumdo"] = "gyo", ["Gyele"] = "gyi", ["Gyem"] = "gye", ["Güenoa"] = "sai-gue", ["Habu"] = "hbu", ["Hadiyya"] = "hdy", ["Hadothi"] = "hoj", ["Hadrami"] = "xhd", ["Hadza"] = "hts", ["Haeke"] = "aek", ["Hahon"] = "hah", ["Haida"] = "hai", ["Haigwai"] = "hgw", ["Hainyaxo Bozo"] = "bzx", ["Haiphong Sign Language"] = "haf", ["Haisla"] = "has", ["Haitian Creole"] = "ht", ["Haitian Vodoun Culture Language"] = "hvc", ["Haiǁom"] = "hgm", ["Haji"] = "hji", ["Hajong"] = "haj", ["Hakka"] = "hak", ["Hakö"] = "hao", ["Halang"] = "hal", ["Halang Doan"] = "hld", ["Halbi"] = "hlb", ["Halia"] = "hla", ["Halkomelem"] = "hur", ["Hamap"] = "hmu", ["Hamba"] = "hba", ["Hamer-Banna"] = "amf", ["Hamtai"] = "hmt", ["Hanga"] = "hag", ["Hanga Hundi"] = "wos", ["Hani"] = "hni", ["Hanoi Sign Language"] = "hab", ["Hanunoo"] = "hnn", ["Harami"] = "xha", ["Harari"] = "har", ["Haraza"] = "nub-har", ["Harijan Kinnauri"] = "kjo", ["Haroi"] = "hro", ["Harsusi"] = "hss", ["Haruai"] = "tmd", ["Haruku"] = "hrk", ["Haryanvi"] = "bgc", ["Harzani"] = "hrz", ["Hasaitic"] = "sem-has", ["Hasha"] = "ybj", ["Hassaniya"] = "mey", ["Hatam"] = "had", ["Hattic"] = "xht", ["Hausa"] = "ha", ["Hausa Sign Language"] = "hsl", ["Haush"] = "sai-hau", ["Havasupai-Walapai-Yavapai"] = "yuf", ["Haveke"] = "hvk", ["Havu"] = "hav", ["Hawai'i Pidgin Sign Language"] = "hps", ["Hawaiian"] = "haw", ["Hawaiian Creole"] = "hwc", ["Haya"] = "hay", ["Hazaragi"] = "haz", ["Hdi"] = "xed", ["हिब्रू"] = "he", ["Hehe"] = "heh", ["Heiban"] = "hbn", ["Heiltsuk"] = "hei", ["Helong"] = "heg", ["Helu"] = "elu-prk", ["Hema"] = "nix", ["Hemba"] = "hem", ["Herdé"] = "hed", ["Herero"] = "hz", ["Hermit"] = "llf", ["Hernican"] = "xhr", ["Hewa"] = "ham", ["Heyo"] = "auk", ["Hibito"] = "hib", ["Hidatsa"] = "hid", ["Higaonon"] = "mba", ["Highland Konjo"] = "kjk", ["Highland Oaxaca Chontal"] = "chd", ["Highland Popoluca"] = "poi", ["Highland Puebla Nahuatl"] = "azz", ["Highland Totonac"] = "tos", ["Hijazi Arabic"] = "acw", ["Hijuk"] = "hij", ["Hiligaynon"] = "hil", ["Hill Maria"] = "mrr", ["Himarimã"] = "hir", ["Himyaritic"] = "sem-him", ["हिंदी"] = "hi", ["Hindi Dogri"] = "dgo", ["Hinduri"] = "hii", ["Hinukh"] = "gin", ["Hiri Motu"] = "ho", ["Hismaic"] = "sem-his", ["Hitchiti"] = "nai-hit", ["Hittite"] = "hit", ["Hitu"] = "htu", ["Hiw"] = "hiw", ["Hixkaryana"] = "hix", ["Hlai"] = "lic", ["Hlepho Phowa"] = "yhl", ["Hlersu"] = "hle", ["Hmar"] = "hmr", ["Hmong Don"] = "hmf", ["Hmong Dô"] = "hmv", ["Hmong Shua"] = "hmz", ["Hmwaveke"] = "mrk", ["Ho"] = "hoc", ["Ho Chi Minh City Sign Language"] = "hos", ["Hoava"] = "hoa", ["Hobyót"] = "hoh", ["Hoia Hoia"] = "hhi", ["Holikachuk"] = "hoi", ["Holiya"] = "hoy", ["Holma"] = "hod", ["Holoholo"] = "hoo", ["Holu"] = "hol", ["Homa"] = "hom", ["Honduran Lenca"] = "len", ["Honduras Sign Language"] = "hds", ["Hone"] = "juh", ["Hong Kong Sign Language"] = "hks", ["Honi"] = "how", ["Hopi"] = "hop", ["Horned Miao"] = "hrm", ["Horo"] = "hor", ["Horom"] = "hoe", ["Horpa"] = "ero", ["Hote"] = "hot", ["Hoti"] = "hti", ["Hovongan"] = "hov", ["Hoyahoya"] = "hhy", ["Hozo"] = "hoz", ["Hpon"] = "hpo", ["Hrangkhol"] = "hra", ["Hre"] = "hre", ["Hruso"] = "hru", ["Hu"] = "huo", ["Huachipaeri"] = "hug", ["Huambisa"] = "hub", ["Huaorani"] = "auc", ["Huarijio"] = "var", ["Huaulu"] = "hud", ["Huautla Mazatec"] = "mau", ["Huave"] = "huv", ["Huaxcaleca Nahuatl"] = "nhq", ["Huba"] = "hbb", ["Huehuetla Tepehua"] = "tee", ["Huetar"] = "cba-hue", ["Huichol"] = "hch", ["Huilliche"] = "huh", ["Huitepec Mixtec"] = "mxs", ["Huizhou"] = "czh", ["Hukumina"] = "huw", ["Hula"] = "hul", ["Hulaulá"] = "huy", ["Huli"] = "hui", ["Hulung"] = "huk", ["Humburi Senni"] = "hmb", ["Humene"] = "huf", ["Hun"] = "uth", ["Hunde"] = "hke", ["Hung"] = "hnu", ["Hungana"] = "hum", ["Hungarian"] = "hu", ["Hungarian Sign Language"] = "hsh", ["Hungworo"] = "nat", ["Hunjara-Kaina Ke"] = "hkk", ["Hunnic"] = "xhc", ["Hunsrik"] = "hrx", ["Hunzib"] = "huz", ["Hupa"] = "hup", ["Hupdë"] = "jup", ["Hupla"] = "hap", ["Hurrian"] = "xhu", ["Hutterisch"] = "geh", ["Hwana"] = "hwo", ["Hya"] = "hya", ["Hyam"] = "jab", ["Hän"] = "haa", ["Hértevin"] = "hrt", ["I-Wak"] = "iwk", ["Iaai"] = "iai", ["Iamalele"] = "yml", ["Iatmul"] = "ian", ["Iau"] = "tmu", ["Ibali Teke"] = "tek", ["Ibaloi"] = "ibl", ["Iban"] = "iba", ["Ibanag"] = "ibg", ["Ibani"] = "iby", ["Ibatan"] = "ivb", ["Iberian"] = "xib", ["Ibibio"] = "ibb", ["Ibino"] = "ibn", ["Iboko"] = "bkp", ["Ibu"] = "ibu", ["Ibuoro"] = "ibr", ["Icelandic"] = "is", ["Icelandic Sign Language"] = "icl", ["Iceve-Maci"] = "bec", ["Ida'an"] = "dbj", ["Idakho-Isukha-Tiriki"] = "ida", ["Idaté"] = "idt", ["Idere"] = "ide", ["Idesa"] = "ids", ["Idi"] = "idi", ["Ido"] = "io", ["Idoma"] = "idu", ["Idon"] = "idc", ["Idu"] = "clk", ["Idun"] = "ldb", ["Iduna"] = "viv", ["Ifo"] = "iff", ["Ifè"] = "ife", ["Igala"] = "igl", ["Igana"] = "igg", ["Igbo"] = "ig", ["Igede"] = "ige", ["Ignaciano"] = "ign", ["Igo"] = "ahl", ["Iguta"] = "nar", ["Igwe"] = "igw", ["Iha"] = "ihp", ["Ihievbe"] = "ihi", ["Ija-Zuba"] = "vki", ["Ik"] = "ikx", ["Ika"] = "ikk", ["Ikaranggal"] = "ikr", ["Ikizu"] = "ikz", ["Iko"] = "iki", ["Ikobi-Mena"] = "meb", ["Ikoma"] = "ntk", ["Ikpeng"] = "txi", ["Ikpeshi"] = "ikp", ["Ikposo"] = "kpo", ["Iku-Gora-Ankwa"] = "ikv", ["Ikulu"] = "ikl", ["Ikwere"] = "ikw", ["Ikwo"] = "iqw", ["Ila"] = "ilb", ["Ile Ape"] = "ila", ["Ilgar"] = "ilg", ["Ili Turki"] = "ili", ["Ili'uun"] = "ilu", ["Ilianen Manobo"] = "mbi", ["Illyrian"] = "xil", ["Ilocano"] = "ilo", ["Ilongot"] = "ilk", ["Ilue"] = "ilv", ["Ilwana"] = "mlk", ["Imbongu"] = "imo", ["Imonda"] = "imn", ["Imroing"] = "imr", ["Inabaknon"] = "abx", ["Inapang"] = "mzu", ["Inari Sami"] = "smn", ["Indanga"] = "bnt-ind", ["Indian Sign Language"] = "ins", ["Indo-Portuguese"] = "idb", ["Indonesian"] = "id", ["Indonesian Bajau"] = "bdl", ["Indonesian Sign Language"] = "inl", ["Indri"] = "idr", ["Indus Kohistani"] = "mvy", ["Indus Valley Language"] = "xiv", ["Inebu One"] = "oin", ["Ineseño"] = "inz", ["Inga"] = "inb", ["Ingrian"] = "izh", ["Ingush"] = "inh", ["Inlaod Itneg"] = "iti", ["Inoke-Yate"] = "ino", ["Inonhan"] = "loc", ["Inor"] = "ior", ["Inpui Naga"] = "nkf", ["Interlingua"] = "ia", ["Interlingue"] = "ie", ["International Sign"] = "ils", ["Intha"] = "int", ["Inuinnaqtun"] = "esx-inq", ["Inuit Sign Language"] = "iks", ["Inuktitut"] = "iu", ["Inuktun"] = "esx-ink", ["Inupiaq"] = "ik", ["Inuvialuktun"] = "ikt", ["Ipai"] = "nai-ipa", ["Ipalapa Amuzgo"] = "azm", ["Ipiko"] = "ipo", ["Ipili"] = "ipi", ["Ipulo"] = "ass", ["Iquito"] = "iqu", ["Ir"] = "irr", ["Irantxe"] = "irn", ["Iranun"] = "ill", ["Iraqi Arabic"] = "acm", ["Iraqw"] = "irk", ["Irarutu"] = "irh", ["Iraya"] = "iry", ["Iresim"] = "ire", ["Iriga Bicolano"] = "bto", ["Irish"] = "ga", ["Irish Sign Language"] = "isg", ["Irula"] = "iru", ["Isabi"] = "isa", ["Isan"] = "tts", ["Isanzu"] = "isn", ["Isarog Agta"] = "agk", ["Isaurian"] = "und-isa", ["Isconahua"] = "isc", ["Isebe"] = "igo", ["Ishkashimi"] = "isk", ["Isinai"] = "inn", ["Isirawa"] = "srl", ["Island Carib"] = "crb", ["Islander Creole English"] = "icr", ["Isnag"] = "isd", ["Isoko"] = "iso", ["Israeli Sign Language"] = "isr", ["Isthmus Mixe"] = "mir", ["Isthmus Zapotec"] = "zai", ["Istriot"] = "ist", ["Istro-Romanian"] = "ruo", ["Isu"] = "isu", ["Isubu"] = "szv", ["इतालवी"] = "it", ["Italian Sign Language"] = "ise", ["Italiot Greek"] = "grk-ita", ["Itawit"] = "itv", ["Itelmen"] = "itl", ["Itene"] = "ite", ["Iteri"] = "itr", ["Itik"] = "itx", ["Ito"] = "itw", ["Itonama"] = "ito", ["Itsekiri"] = "its", ["Itu Mbon Uzo"] = "itm", ["Itundujia Mixtec"] = "mce", ["Itzá"] = "itz", ["Iu Mien"] = "ium", ["Ivatan"] = "ivv", ["Iwaidja"] = "ibd", ["Iwal"] = "kbm", ["Iwam"] = "iwm", ["Iwur"] = "iwo", ["Ixcatec"] = "ixc", ["Ixcatlán Mazatec"] = "mzi", ["Ixil"] = "ixl", ["Ixtayutla Mixtec"] = "vmj", ["Ixtenco Otomi"] = "otz", ["Iyayu"] = "iya", ["Iyive"] = "uiv", ["Iyo"] = "nca", ["Iyo'wujwa Chorote"] = "crq", ["Iyojwa'ja Chorote"] = "crt", ["Izere"] = "izr", ["Izi"] = "izz", ["Izi-Ezaa-Ikwo-Mgbo"] = "izi", ["Izon"] = "ijc", ["Izora"] = "cbo", ["Iñapari"] = "inp", ["Jabem"] = "jae", ["Jabutí"] = "jbt", ["Jad"] = "jda", ["Jadgali"] = "jdg", ["Jah Hut"] = "jah", ["Jahanka"] = "jad", ["Jair Awyu"] = "awv", ["Jakaltek"] = "jac", ["Jakati"] = "jat", ["Jalapa de Díaz Mazatec"] = "maj", ["Jalkunan"] = "bxl", ["Jamaican Country Sign Language"] = "jcs", ["Jamaican Creole"] = "jam", ["Jamaican Sign Language"] = "jls", ["Jamamadí"] = "jaa", ["Jambi Malay"] = "jax", ["Jamiltepec Mixtec"] = "mxt", ["Jaminjung"] = "djd", ["Jamsay"] = "djm", ["Jamtish"] = "gmq-jmk", ["Jandavra"] = "jnd", ["Janday"] = "jan", ["Jangkang"] = "djo", ["Jangshung"] = "jna", ["Janji"] = "jni", ["जापानी"] = "ja", ["Japanese Sign Language"] = "jsl", ["Japhug"] = "sit-jap", ["Japrería"] = "jru", ["Jaqaru"] = "jqr", ["Jara"] = "jaf", ["Jarai"] = "jra", ["Jarawa"] = "anq", ["Jaru"] = "ddj", ["Jassic"] = "ysc", ["Jaunsari"] = "jns", ["Javanese"] = "jv", ["Javindo"] = "jvd", ["Jawe"] = "jaz", ["Jaya"] = "jyy", ["Jebero"] = "jeb", ["Jeh"] = "jeh", ["Jehai"] = "jhi", ["Jeikó"] = "sai-jko", ["Jeju"] = "jje", ["Jemez"] = "tow", ["Jenaama Bozo"] = "bze", ["Jeng"] = "jeg", ["Jennu Kurumba"] = "xuj", ["Jere"] = "jer", ["Jeri Kuo"] = "jek", ["Jersey Dutch"] = "gmw-jdt", ["Jeru"] = "akj", ["Jerung"] = "jee", ["Jhankot Sign Language"] = "jhs", ["Jiamao"] = "jio", ["Jiba"] = "juo", ["Jibu"] = "jib", ["Jicarilla"] = "apj", ["Jiiddu"] = "jii", ["Jilbe"] = "jie", ["Jili"] = "mgi", ["Jilim"] = "jil", ["Jimi"] = "jmi", ["Jimjimen"] = "jim", ["Jin"] = "cjy", ["Jina"] = "jia", ["Jingpho"] = "kac", ["Jingulu"] = "jig", ["Jiongnai Bunu"] = "pnu", ["Jirajara"] = "sai-jrj", ["Jirel"] = "jul", ["Jiru"] = "jrr", ["Jita"] = "jit", ["Jju"] = "kaj", ["Joba"] = "job", ["Jofotek-Bromnya"] = "jbr", ["Jola-Fonyi"] = "dyo", ["Jola-Kasa"] = "csk", ["Jonkor Bourmataguil"] = "jeu", ["Jordanian Sign Language"] = "jos", ["Jorá"] = "jor", ["Jowulu"] = "jow", ["Ju"] = "juu", ["Juang"] = "jun", ["Juba Arabic"] = "pga", ["Judeo-Italian"] = "itk", ["Judeo-Persian"] = "jpr", ["Judeo-Tat"] = "jdt", ["Jukun Takum"] = "jbu", ["Jumaytepeque"] = "nai-jum", ["Jumjum"] = "jum", ["Jumla Sign Language"] = "jus", ["Jumli"] = "jml", ["Jungle Inga"] = "inj", ["Juquila Mixe"] = "mxq", ["Jur Modo"] = "bex", ["Juray"] = "juy", ["Jurchen"] = "juc", ["Jurúna"] = "jur", ["Jutiapa"] = "nai-jtp", ["Jutish"] = "jut", ["Juwal"] = "mwb", ["Juxtlahuaca Mixtec"] = "vmc", ["Juǀ'hoan"] = "ktz", ["Jwira-Pepesa"] = "jwi", ["Júma"] = "jua", ["K'iche'"] = "quc", ["Kaamba"] = "xku", ["Kaan"] = "ldl", ["Kaang Chin"] = "ckn", ["Kaansa"] = "gna", ["Kaapor Sign Language"] = "uks", ["Kaba"] = "ksp", ["Kabalai"] = "kvf", ["Kabardian"] = "kbd", ["Kabatei"] = "xkp", ["Kabba-Laka"] = "lap", ["Kabishiana"] = "tup-kab", ["Kabiyé"] = "kbp", ["Kabola"] = "klz", ["Kabore One"] = "onk", ["Kabras"] = "lkb", ["Kaburi"] = "uka", ["Kabutra"] = "kbu", ["Kabuverdianu"] = "kea", ["Kabwa"] = "cwa", ["Kabwari"] = "kcw", ["Kabyle"] = "kab", ["Kachama-Ganjule"] = "kcx", ["Kachari"] = "xac", ["Kachchi"] = "kfr", ["Kachi Koli"] = "gjk", ["Kacipo-Balesi"] = "koe", ["Kaco'"] = "xkk", ["Kadai"] = "kzd", ["Kadar"] = "kej", ["Kadara"] = "kad", ["Kadaru"] = "kdu", ["Kadiwéu"] = "kbc", ["Kado"] = "kdv", ["Kadugli"] = "xtc", ["Kaduo"] = "ktp", ["Kaera"] = "jka", ["Kafa"] = "kbr", ["Kafoa"] = "kpu", ["Kagan Kalagan"] = "kll", ["Kagate"] = "syw", ["Kagayanen"] = "cgc", ["Kagoma"] = "kdm", ["Kagoro"] = "xkg", ["Kagulu"] = "kki", ["Kahe"] = "hka", ["Kahua"] = "agw", ["Kaian"] = "kct", ["Kaibobo"] = "kzb", ["Kaidipang"] = "kzp", ["Kaiep"] = "kbw", ["Kaikadi"] = "kep", ["Kaike"] = "kzq", ["Kaiku"] = "kkq", ["Kaimbulawa"] = "zka", ["Kaimbé"] = "xai", ["Kaingang"] = "kgp", ["Kairak"] = "ckr", ["Kairiru"] = "kxa", ["Kairui-Midiki"] = "krd", ["Kais"] = "kzm", ["Kaivi"] = "kce", ["Kaiwá"] = "kgk", ["Kaiy"] = "tcq", ["Kajakse"] = "ckq", ["Kajali"] = "xkj", ["Kajaman"] = "kag", ["Kakabai"] = "kqf", ["Kakabe"] = "kke", ["Kakanda"] = "kka", ["Kaki Ae"] = "tbd", ["Kakihum"] = "kxe", ["Kako"] = "kkj", ["Kakwa"] = "keo", ["Kala"] = "kcl", ["Kala Lagaw Ya"] = "mwp", ["Kalaamaya"] = "lkm", ["Kalabakan"] = "kve", ["Kalabari"] = "ijn", ["Kalabra"] = "kzz", ["Kalagan"] = "kqe", ["Kalaktang Monpa"] = "kkf", ["Kalam"] = "kmh", ["Kalami"] = "gwc", ["Kalamsé"] = "knz", ["Kalanadi"] = "wkl", ["Kalanga"] = "kck", ["Kalao"] = "kly", ["Kalapuya"] = "kyl", ["Kalarko"] = "kba", ["Kalasha"] = "kls", ["Kalasuri"] = "xme-kls", ["Kalenjin"] = "kln", ["Kalkatungu"] = "ktg", ["Kalkoti"] = "xka", ["Kalmyk"] = "xal", ["Kalo Finnish Romani"] = "rmf", ["Kalou"] = "ywa", ["Kaluli"] = "bco", ["Kalumpang"] = "kli", ["Kam"] = "kdx", ["Kamakan"] = "vkm", ["Kamang"] = "woi", ["Kamano"] = "kbq", ["Kamantan"] = "kci", ["Kamar"] = "keq", ["Kamara"] = "jmr", ["Kamarian"] = "kzx", ["Kamaru"] = "kgx", ["Kamarupi Prakrit"] = "inc-kam", ["Kamasa"] = "klp", ["Kamasau"] = "kms", ["Kamassian"] = "xas", ["Kamayo"] = "kyk", ["Kamayurá"] = "kay", ["Kamba"] = "kam", ["Kambaata"] = "ktb", ["Kambaira"] = "kyy", ["Kambera"] = "xbr", ["Kamberataro"] = "kbv", ["Kamberau"] = "irx", ["Kambiwá"] = "xbw", ["Kami"] = "kmi", ["Kamkata-viri"] = "bsh", ["Kamo"] = "kcq", ["Kamoro"] = "kgq", ["Kamta"] = "rkt", ["Kamu"] = "xmu", ["Kamula"] = "xla", ["Kamwe"] = "hig", ["Kanakanabu"] = "xnb", ["Kanakuru"] = "kna", ["Kanamari"] = "knm", ["Kanashi"] = "xns", ["Kanasi"] = "soq", ["Kandas"] = "kqw", ["Kandawo"] = "gam", ["Kande"] = "kbs", ["Kang"] = "kyp", ["Kanga"] = "kcp", ["Kangean"] = "kkv", ["Kanggape"] = "igm", ["Kangjia"] = "kxs", ["Kango"] = "kty", ["Kango-Sua"] = "kzy", ["Kangri"] = "xnr", ["Kaniet"] = "ktk", ["Kanikkaran"] = "kev", ["Kaningdon-Nindem"] = "kdp", ["Kaningi"] = "kzo", ["Kaningra"] = "knr", ["Kaninuwa"] = "wat", ["Kanite"] = "kmu", ["Kanjari"] = "kft", ["Kanju"] = "kbe", ["Kankanaey"] = "kne", ["Kannada"] = "kn", ["Kannada Kurumba"] = "kfi", ["Kannauji"] = "bjj", ["Kanowit"] = "kxn", ["Kanoé"] = "kxo", ["Kansa"] = "ksk", ["Kantosi"] = "xkt", ["Kanu"] = "khx", ["Kanufi"] = "kni", ["Kanuri"] = "kr", ["Kanyok"] = "kny", ["Kao"] = "kax", ["Kaonde"] = "kqn", ["Kap"] = "ykm", ["Kapampangan"] = "pam", ["Kapauri"] = "khp", ["Kapin"] = "tbx", ["Kapinawá"] = "xpn", ["Kapingamarangi"] = "kpg", ["Kapriman"] = "dju", ["Kaptiau"] = "kbi", ["Kapya"] = "klo", ["Kaqchikel"] = "cak", ["Kara (New Guinea)"] = "leu", ["Kara (Tanzania)"] = "reg", ["Karachay-Balkar"] = "krc", ["Karadjeri"] = "gbd", ["Karaga Mandaya"] = "mry", ["Karaim"] = "kdr", ["Karajá"] = "kpj", ["Karakalpak"] = "kaa", ["Karakhanid"] = "xqa", ["Karami"] = "xar", ["Karamojong"] = "kdj", ["Karang"] = "kzr", ["Karanga"] = "kth", ["Karankawa"] = "zkk", ["Karao"] = "kyj", ["Karas"] = "kgv", ["Karata"] = "kpt", ["Karawa"] = "xrw", ["Karbi"] = "mjw", ["Kare (Africa)"] = "kbn", ["Kare (New Guinea)"] = "kmf", ["Karekare"] = "kai", ["Karelian"] = "krl", ["Karey"] = "kyd", ["Kari"] = "kbj", ["Karingani"] = "kgn", ["Karipuna"] = "kuq", ["Karipúna"] = "kgm", ["Karipúna Creole French"] = "kmv", ["Kariri"] = "kzw", ["Karitiâna"] = "ktn", ["Kariya"] = "kil", ["Kariyarra"] = "vka", ["Karkar-Yuri"] = "yuj", ["Karkin"] = "krb", ["Karko"] = "kko", ["Karnai"] = "bbv", ["Karo"] = "kxh", ["Karo Batak"] = "btx", ["Karok"] = "kyh", ["Karolanos"] = "kyn", ["Karon"] = "krx", ["Karon Dori"] = "kgw", ["Karore"] = "xkx", ["Karranga"] = "xrq", ["Karuwali"] = "rxw", ["Kasanga"] = "ccj", ["Kasem"] = "xsm", ["Kashaya"] = "kju", ["Kashmiri"] = "ks", ["Kashubian"] = "csb", ["Kasiguranin"] = "ksn", ["Kaska"] = "kkz", ["Kaskean"] = "zsk", ["Kaskihá"] = "gva", ["Kassite"] = "und-kas", ["Kassonke"] = "kao", ["Kasua"] = "khs", ["Kataang"] = "kgd", ["Katabaga"] = "ktq", ["Katawixi"] = "xat", ["Katembri"] = "sai-kat", ["Kathlamet"] = "nai-kat", ["Kathoriya Tharu"] = "tkt", ["Kathu"] = "ykt", ["Katkari"] = "kfu", ["Katla"] = "kcr", ["Kato"] = "ktw", ["Katso"] = "kaf", ["Katua"] = "kta", ["Katukina"] = "knt", ["Kaulong"] = "pss", ["Kaur"] = "vkk", ["Kaure"] = "bpp", ["Kaurna"] = "zku", ["Kauwera"] = "xau", ["Kavalan"] = "ckv", ["Kavet"] = "krv", ["Kawacha"] = "kcb", ["Kawaiisu"] = "xaw", ["Kawe"] = "kgb", ["Kawishana"] = "awd-kaw", ["Kawésqar"] = "alc", ["Kaxararí"] = "ktx", ["Kaxuyana"] = "kbb", ["Kaya"] = "zra", ["Kayabí"] = "kyz", ["Kayagar"] = "kyt", ["Kayan"] = "pdu", ["Kayan Mahakam"] = "xay", ["Kayan River Kayan"] = "xkn", ["Kayapa Kallahan"] = "kak", ["Kayapó"] = "txu", ["Kayardild"] = "gyd", ["Kayeli"] = "kzl", ["Kayong"] = "kxy", ["Kayort"] = "kyv", ["Kaytetye"] = "gbb", ["Kayupulau"] = "kzu", ["Kazakh"] = "kk", ["Kazukuru"] = "kzk", ["Ke'o"] = "xxk", ["Keak"] = "keh", ["Keapara"] = "khz", ["Kedah Malay"] = "meo", ["Kedang"] = "ksx", ["Keder"] = "kdy", ["Kehu"] = "khh", ["Kei"] = "kei", ["Keiga"] = "kec", ["Kein"] = "bmh", ["Keiyo"] = "eyo", ["Kela-Yela"] = "kel", ["Kelabit"] = "kzi", ["Keley-I Kallahan"] = "ify", ["Keliko"] = "kbo", ["Kelo"] = "xel", ["Kelon"] = "kyo", ["Kemak"] = "kem", ["Kembayan"] = "xem", ["Kemberano"] = "bzp", ["Kembra"] = "xkw", ["Kemezung"] = "dmo", ["Kemi Sami"] = "sjk", ["Kemiehua"] = "kfj", ["Kemtuik"] = "kmt", ["Kenaboi"] = "xbn", ["Kenati"] = "gat", ["Kendayan"] = "knx", ["Kendeje"] = "klf", ["Kendem"] = "kvm", ["Kenga"] = "kyq", ["Keningau Murut"] = "kxi", ["Keninjal"] = "knl", ["Kensiu"] = "kns", ["Kenswei Nsei"] = "ndb", ["Kenyan Sign Language"] = "xki", ["Kenyang"] = "ken", ["Kenyi"] = "lke", ["Keoru-Ahia"] = "xeu", ["Kepkiriwát"] = "kpn", ["Kepo'"] = "kuk", ["Kera"] = "ker", ["Kerak"] = "hhr", ["Kereho"] = "xke", ["Kerek"] = "krk", ["Kerewe"] = "ked", ["Kerewo"] = "kxz", ["Kerinci"] = "kvr", ["Kermanic"] = "xme-ker", ["Kesawai"] = "xes", ["Ket"] = "ket", ["Ketangalan"] = "kae", ["Kete"] = "kcv", ["Ketengban"] = "xte", ["Ketum"] = "ktt", ["Kewa"] = "kew", ["Keyagana"] = "kyg", ["Kgalagadi"] = "xkv", ["Khakas"] = "kjh", ["Khalaj"] = "klj", ["Khaling"] = "klr", ["Kham"] = "kjl", ["Khamnigan Mongol"] = "ykh", ["Khamti"] = "kht", ["Khamyang"] = "ksu", ["Khana"] = "ogo", ["Khandeshi"] = "khn", ["Khanty"] = "kca", ["Khao"] = "xao", ["Kharam Naga"] = "kfw", ["Kharia"] = "khr", ["Kharia Thar"] = "ksy", ["Khasa Prakrit"] = "inc-kha", ["Khasi"] = "kha", ["Khayo"] = "lko", ["Khazar"] = "zkz", ["Khe"] = "kqg", ["Khehek"] = "tlx", ["Khengkha"] = "xkf", ["Khetrani"] = "xhe", ["Khezha Naga"] = "nkh", ["Khiamniungan Naga"] = "kix", ["Khinalug"] = "kjj", ["Khirwar"] = "kwx", ["Khisa"] = "kqm", ["Khitan"] = "zkt", ["Khlor"] = "llo", ["Khlula"] = "ykl", ["Khmer"] = "km", ["Khmu"] = "kjg", ["Khoekhoe"] = "naq", ["Khoibu Naga"] = "nkb", ["Khoini"] = "xkc", ["Kholok"] = "ktc", ["Kholosi"] = "inc-kho", ["Khonso"] = "kxc", ["Khorasani Turkish"] = "kmz", ["Khorezmian Turkic"] = "zkh", ["Khotanese"] = "kho", ["Khowar"] = "khw", ["Khroskyabs"] = "jiq", ["Khua"] = "xhv", ["Khuen"] = "khf", ["Khumi Chin"] = "cnk", ["Khvarshi"] = "khv", ["Khwarezmian"] = "xco", ["Khwe"] = "xuu", ["Kháng"] = "kjm", ["Khün"] = "kkh", ["Kibala"] = "blv", ["Kibena"] = "bez", ["Kibet"] = "kie", ["Kibiri"] = "prm", ["Kichwa"] = "qwe-kch", ["Kickapoo"] = "kic", ["Kikai"] = "kzg", ["Kikami"] = "kcu", ["Kikuyu"] = "ki", ["Kildin Sami"] = "sjd", ["Kilit"] = "xme-klt", ["Kilivila"] = "kij", ["Kiliwa"] = "klb", ["Kilmeri"] = "kih", ["Kim"] = "kia", ["Kim Mun"] = "mji", ["Kimaama"] = "kig", ["Kimaragang"] = "kqr", ["Kimbu"] = "kiv", ["Kimbundu"] = "kmb", ["Kimki"] = "sbt", ["Kimré"] = "kqp", ["Kinabalian"] = "cbw", ["Kinalakna"] = "kco", ["Kinaray-a"] = "krj", ["Kinga"] = "zga", ["Kings River Yokuts"] = "nai-kry", ["Kinikinao"] = "gqn", ["Kinnauri"] = "kfk", ["Kintaq"] = "knq", ["Kinuku"] = "kkd", ["Kioko"] = "ues", ["Kiong"] = "kkm", ["Kiorr"] = "xko", ["Kiowa"] = "kio", ["Kipchak"] = "qwm", ["Kipfokomo"] = "pkb", ["Kipsigis"] = "sgc", ["Kiput"] = "kyi", ["Kir-Balar"] = "kkr", ["Kire"] = "geb", ["Kirfi"] = "kks", ["Kirike"] = "okr", ["Kirikiri"] = "kiy", ["Kirya-Konzel"] = "fkk", ["Kis"] = "kis", ["Kisa"] = "lks", ["Kisan"] = "xis", ["Kisankasa"] = "kqh", ["Kisar"] = "kje", ["Kisi"] = "kiz", ["Kistane"] = "gru", ["Kita Maninkakan"] = "mwk", ["Kitanemuk"] = "azc-ktn", ["Kitembo"] = "tbt", ["Kitja"] = "gia", ["Kitsai"] = "kii", ["Kituba"] = "ktu", ["Kiunum"] = "wei", ["Kla"] = "lda", ["Klallam"] = "clm", ["Klamath-Modoc"] = "kla", ["Klao"] = "klu", ["Klias River Kadazan"] = "kqt", ["Klingon"] = "tlh", ["Knaanic"] = "czk", ["Ko"] = "fuj", ["Koalib"] = "kib", ["Koasati"] = "cku", ["Koba"] = "kpd", ["Kobiana"] = "kcj", ["Kobol"] = "kgu", ["Kobon"] = "kpw", ["Koch"] = "kdq", ["Kochila Tharu"] = "thq", ["Koda"] = "cdz", ["Kodaku"] = "ksz", ["Kodava"] = "kfa", ["Kodeoha"] = "vko", ["Kodi"] = "kod", ["Kodia"] = "kwp", ["Koenoem"] = "kcs", ["Kofa"] = "kso", ["Kofei"] = "kpi", ["Kofyar"] = "kwl", ["Kohin"] = "kkx", ["Kohistani Shina"] = "plk", ["Koho"] = "kpm", ["Kohumono"] = "bcs", ["Koi"] = "kkt", ["Koibal"] = "zkb", ["Koireng"] = "nkd", ["Koitabu"] = "kqi", ["Koiwat"] = "kxt", ["Kok-Nar"] = "gko", ["Kok-Paponk"] = "okg", ["Kokata"] = "ktd", ["Kokborok"] = "trp", ["Koke"] = "kou", ["Koko-Bera"] = "kkp", ["Kokoda"] = "xod", ["Kokola"] = "kzn", ["Kokota"] = "kkk", ["Kol (Cameroon)"] = "biw", ["Kol (New Guinea)"] = "kol", ["Kola"] = "kvv", ["Kolami"] = "kfb", ["Kolbila"] = "klc", ["Kolhe"] = "ekl", ["Kolibugan Subanon"] = "skn", ["Kolom"] = "klm", ["Koluwawa"] = "klx", ["Kom (Cameroon)"] = "bkm", ["Kom (India)"] = "kmm", ["Koma"] = "kmy", ["Komba"] = "kpf", ["Kombai"] = "tyn", ["Kombio"] = "xbi", ["Komering"] = "kge", ["Komi-Permyak"] = "koi", ["Komi-Yazva"] = "urj-kya", ["Komi-Zyrian"] = "kpv", ["Kominimung"] = "xoi", ["Komo"] = "xom", ["Komodo"] = "kvh", ["Kompane"] = "kvp", ["Komyandaret"] = "kzv", ["Kon Keu"] = "kkn", ["Konabéré"] = "bbo", ["Konai"] = "kxw", ["Konda"] = "knd", ["Konda-Dora"] = "kfc", ["Kondekor"] = "gau", ["Koneraw"] = "kdw", ["Kongo"] = "kg", ["Konkani"] = "kok", ["Konkomba"] = "xon", ["Konni"] = "kma", ["Kono (Guinea)"] = "knu", ["Kono (Nigeria)"] = "klk", ["Kono (Sierra Leone)"] = "kno", ["Konomala"] = "koa", ["Konomihu"] = "nai-knm", ["Konongo"] = "kcz", ["Konyak Naga"] = "nbe", ["Konyanka Maninka"] = "mku", ["Konzo"] = "koo", ["Koonzime"] = "ozm", ["Koorete"] = "kqy", ["Kopar"] = "xop", ["Kopkaka"] = "opk", ["Korafe-Yegha"] = "kpr", ["Korak"] = "koz", ["Korana"] = "kqz", ["Korandje"] = "kcy", ["Korean"] = "ko", ["Korean Sign Language"] = "kvk", ["Koreguaje"] = "coe", ["Koresh-e Rostam"] = "okh", ["Korku"] = "kfq", ["Korlai Creole Portuguese"] = "vkp", ["Koro (India)"] = "jkr", ["Koro (New Guinea)"] = "kxr", ["Koro (Vanuatu)"] = "krf", ["Koro (West Africa)"] = "kfo", ["Koromfé"] = "kfz", ["Koromira"] = "kqj", ["Koronadal Blaan"] = "bpr", ["Koroni"] = "xkq", ["Korop"] = "krp", ["Koropó"] = "xxr", ["Koroshi"] = "ktl", ["Korowai"] = "khe", ["Korra Koraga"] = "kfd", ["Korubo"] = "xor", ["Korupun-Sela"] = "kpq", ["Korwa"] = "kfp", ["Koryak"] = "kpy", ["Kosadle"] = "kiq", ["Kosarek Yale"] = "kkl", ["Kosena"] = "kze", ["Koshin"] = "kid", ["Kosraean"] = "kos", ["Kota (Gabon)"] = "koq", ["Kota (India)"] = "kfe", ["Kota Bangun Kutai Malay"] = "mqg", ["Kota Marudu Talantang"] = "grm", ["Kota Marudu Tinagas"] = "ktr", ["Kotafon Gbe"] = "kqk", ["Kotava"] = "avk", ["Koti"] = "eko", ["Kott"] = "zko", ["Kou"] = "snz", ["Kouya"] = "kyf", ["Kovai"] = "kqb", ["Kove"] = "kvc", ["Kowaki"] = "xow", ["Kowiai"] = "kwh", ["Koy Sanjaq Surat"] = "kqd", ["Koya"] = "kff", ["Koyaga"] = "kga", ["Koyo"] = "koh", ["Koyra Chiini"] = "khq", ["Koyraboro Senni"] = "ses", ["Koyukon"] = "koy", ["Kpagua"] = "kuw", ["Kpala"] = "kpl", ["Kpan"] = "kpk", ["Kpasam"] = "pbn", ["Kpati"] = "koc", ["Kpatili"] = "kym", ["Kpee"] = "cpo", ["Kpelle"] = "kpe", ["Kpessi"] = "kef", ["Kplang"] = "kph", ["Krache"] = "kye", ["Krahô"] = "xra", ["Kraol"] = "rka", ["Krenak"] = "kqq", ["Kresh"] = "krs", ["Krevinian"] = "zkv", ["Kreye"] = "xre", ["Krikati-Timbira"] = "xri", ["Krim"] = "krm", ["Krio"] = "kri", ["Kriol"] = "rop", ["Krisa"] = "ksi", ["Kristang"] = "mcm", ["Krobu"] = "kxb", ["Krongo"] = "kgo", ["Kru'ng"] = "krr", ["Krymchak"] = "jct", ["Kryts"] = "kry", ["Kua"] = "tyu", ["Kua-nsi"] = "ykn", ["Kuamasi"] = "yku", ["Kuan"] = "uan", ["Kuanhua"] = "xnh", ["Kube"] = "kgf", ["Kubi"] = "kof", ["Kubo"] = "jko", ["Kubu"] = "kvb", ["Kucong"] = "lkc", ["Kudiya"] = "kfg", ["Kudmali"] = "kyw", ["Kudu-Camo"] = "kov", ["Kugama"] = "kow", ["Kugbo"] = "kes", ["Kugu-Muminh"] = "xmh", ["Kui (India)"] = "kxu", ["Kui (Indonesia)"] = "kvd", ["Kuijau"] = "dkr", ["Kuikúro"] = "kui", ["Kujarge"] = "vkj", ["Kuk"] = "kfn", ["Kukatja"] = "kux", ["Kukele"] = "kez", ["Kukkuzi"] = "urj-kuk", ["Kukna"] = "kex", ["Kuku-Mangk"] = "xmq", ["Kuku-Mu'inh"] = "xmp", ["Kuku-Thaypan"] = "typ", ["Kuku-Ugbanh"] = "ugb", ["Kuku-Uwanh"] = "uwa", ["Kuku-Yalanji"] = "gvn", ["Kula"] = "tpg", ["Kulaal"] = "glj", ["Kulere"] = "kul", ["Kulfa"] = "kxj", ["Kulina"] = "xpk", ["Kulisusu"] = "vkl", ["Kullu Pahari"] = "kfx", ["Kulon"] = "uon", ["Kulon-Pazeh"] = "uun", ["Kulung"] = "kle", ["Kumak"] = "nee", ["Kumalu"] = "ksl", ["Kumam"] = "kdi", ["Kuman"] = "kue", ["Kumaoni"] = "kfy", ["Kumarbhag Paharia"] = "kmj", ["Kumba"] = "ksm", ["Kumbainggar"] = "kgs", ["Kumbaran"] = "wkb", ["Kumbewaha"] = "xks", ["Kumeyaay"] = "nai-kum", ["Kumhali"] = "kra", ["Kumu"] = "kmw", ["Kumukio"] = "kuo", ["Kumyk"] = "kum", ["Kumzari"] = "zum", ["Kuna"] = "cuk", ["Kunama"] = "kun", ["Kunbarlang"] = "wlg", ["Kunda"] = "kdn", ["Kundal Shahi"] = "shd", ["Kunduvadi"] = "wku", ["Kung"] = "kfl", ["Kungarakany"] = "ggk", ["Kungardutyi"] = "gdt", ["Kunggari"] = "kgl", ["Kungkari"] = "lku", ["Kuni"] = "kse", ["Kuni-Boazi"] = "kvg", ["Kunigami"] = "xug", ["Kunimaipa"] = "kup", ["Kunja"] = "pep", ["Kunjen"] = "kjn", ["Kunyi"] = "njx", ["Kunza"] = "kuz", ["Kuo"] = "xuo", ["Kuot"] = "kto", ["Kupa"] = "kug", ["Kupang Malay"] = "mkn", ["Kupia"] = "key", ["Kupsabiny"] = "kpz", ["Kur"] = "kuv", ["Kura Ede Nago"] = "nqk", ["Kurama"] = "krh", ["Kuranko"] = "knk", ["Kuri"] = "nbn", ["Kuria"] = "kuj", ["Kurichiya"] = "kfh", ["Kurmukar"] = "kfv", ["Kurnai"] = "unn", ["Kurrama"] = "vku", ["Kurti"] = "ktm", ["Kurtjar"] = "gdj", ["Kurtöp"] = "xkz", ["Kurudu"] = "kjr", ["Kurukh"] = "kru", ["Kuruáya"] = "kyr", ["Kusaal"] = "kus", ["Kusaghe"] = "ksg", ["Kushi"] = "kuh", ["Kustenau"] = "awd-kus", ["Kusu"] = "ksv", ["Kusunda"] = "kgg", ["Kutang Ghale"] = "ght", ["Kutenai"] = "kut", ["Kutep"] = "kub", ["Kuthant"] = "xut", ["Kutto"] = "kpa", ["Kutu"] = "kdc", ["Kuturmi"] = "khj", ["Kuuk Thaayorre"] = "thd", ["Kuuk Yak"] = "uky", ["Kuuku-Ya'u"] = "kuy", ["Kuvale"] = "olu", ["Kuvi"] = "kxv", ["Kuwaa"] = "blh", ["Kuwaataay"] = "cwt", ["Kuwani"] = "paa-kwn", ["Kuy"] = "kdt", ["Kven"] = "fkv", ["Kw'adza"] = "wka", ["Kwa'"] = "bko", ["Kwaami"] = "ksq", ["Kwadi"] = "kwz", ["Kwaio"] = "kwd", ["Kwaja"] = "kdz", ["Kwak"] = "kwq", ["Kwak'wala"] = "kwk", ["Kwakum"] = "kwu", ["Kwalhioqua-Tlatskanai"] = "qwt", ["Kwama"] = "kmq", ["Kwambi"] = "kwm", ["Kwamera"] = "tnk", ["Kwami"] = "ktf", ["Kwamtim One"] = "okk", ["Kwang"] = "kvi", ["Kwanga"] = "kwj", ["Kwangali"] = "kwn", ["Kwanja"] = "knp", ["Kwanka"] = "bij", ["Kwanyama"] = "kj", ["Kwara'ae"] = "kwf", ["Kwasio"] = "nmg", ["Kwaya"] = "kya", ["Kwaza"] = "xwa", ["Kwegu"] = "xwg", ["Kwer"] = "kwr", ["Kwerba"] = "kwe", ["Kwerba Mamberamo"] = "xwr", ["Kwere"] = "cwe", ["Kwerisa"] = "kkb", ["Kwese"] = "kws", ["Kwesten"] = "kwt", ["Kwini"] = "gww", ["Kwinsu"] = "kuc", ["Kwinti"] = "kww", ["Kwoma"] = "kmo", ["Kwomtari"] = "kwo", ["Kyak"] = "bka", ["Kyaka"] = "kyc", ["Kyakala"] = "tuw-kkl", ["Kyan-Karyaw Naga"] = "nqq", ["Kyenele"] = "kql", ["Kyenga"] = "tye", ["Kyerung"] = "kgy", ["Kyrgyz"] = "ky", ["Kâte"] = "kmg", ["Kélé"] = "keb", ["Kómnzo"] = "paa-kom", ["La'bi"] = "lbi", ["Laal"] = "gdm", ["Laalaa"] = "cae", ["Laba"] = "lau", ["Label"] = "lbb", ["Labir"] = "jku", ["Labo"] = "mwi", ["Labo Phowa"] = "ypb", ["Laboya"] = "lmy", ["Labu"] = "lbu", ["Labuk-Kinabatangan Kadazan"] = "dtb", ["Lacandon"] = "lac", ["Lachi"] = "lbt", ["Lachiguiri Zapotec"] = "zpa", ["Lachixío Zapotec"] = "zpl", ["Ladakhi"] = "lbj", ["Ladin"] = "lld", ["Ladino"] = "lad", ["Ladji-Ladji"] = "llj", ["Laeko-Libuat"] = "lkl", ["Lafofa"] = "laf", ["Laghu"] = "lgb", ["Laghuu"] = "lgh", ["Lagwan"] = "kot", ["Laha (Indonesia)"] = "lhh", ["Laha (Vietnam)"] = "lha", ["Lahanan"] = "lhn", ["Lahnda"] = "lah", ["Lahta Karen"] = "kvt", ["Lahu"] = "lhu", ["Lahu Shi"] = "lhi", ["Lahul Lohar"] = "lhl", ["Lai"] = "cnh", ["Laimbue"] = "lmx", ["Laitu Chin"] = "clj", ["Laiyolo"] = "lji", ["Lak"] = "lbe", ["Laka"] = "lak", ["Lakalei"] = "lka", ["Lake Miwok"] = "lmw", ["Lakha"] = "lkh", ["Laki"] = "lki", ["Lakkia"] = "lbc", ["Lakon"] = "lkn", ["Lakondê"] = "lkd", ["Lakota"] = "lkt", ["Lakota Dida"] = "dic", ["Lala (New Guinea)"] = "nrz", ["Lala (South Africa)"] = "bnt-lal", ["Lala-Bisa"] = "leb", ["Lala-Roba"] = "lla", ["Lalana Chinantec"] = "cnl", ["Lama Bai"] = "lay", ["Lamaholot"] = "slp", ["Lamalera"] = "lmr", ["Lamang"] = "hia", ["Lamatuka"] = "lmq", ["Lamba"] = "lam", ["Lambadi"] = "lmn", ["Lambichhong"] = "lmh", ["Lambya"] = "lai", ["Lame"] = "bma", ["Lamenu"] = "lmu", ["Lamet"] = "lbn", ["Lamja-Dengsa-Tola"] = "ldh", ["Lamkang"] = "lmk", ["Lamma"] = "lev", ["Lamnso'"] = "lns", ["Lamogai"] = "lmg", ["Lampung Api"] = "ljp", ["Lamu"] = "llh", ["Lamu-Lamu"] = "lby", ["Lanas Lobu"] = "ruu", ["Landoma"] = "ldm", ["Lang'e"] = "yne", ["Langam"] = "lnm", ["Langbashe"] = "lna", ["Langi"] = "lag", ["Langnian Buyang"] = "yln", ["Lango (Sudan)"] = "lno", ["Lango (Uganda)"] = "laj", ["Lanima"] = "lnw", ["Lanoh"] = "lnh", ["Lao"] = "lo", ["Lao Naga"] = "nlq", ["Laomian"] = "lwm", ["Laopang"] = "lbg", ["Laos Sign Language"] = "lso", ["Lapaguía-Guivini Zapotec"] = "ztl", ["Lapine"] = "art-lap", ["Lapuyan Subanun"] = "laa", ["Laragia"] = "lrg", ["Larantuka Malay"] = "lrt", ["Lardil"] = "lbz", ["Larestani"] = "lrl", ["Larevat"] = "lrv", ["Larike-Wakasihu"] = "alo", ["Laro"] = "lro", ["Larteh"] = "lar", ["Laru"] = "lan", ["Lasalimu"] = "llm", ["Lasgerdi"] = "lsa", ["Lashi"] = "lsi", ["Lasi"] = "lss", ["Latgalian"] = "ltg", ["Latin"] = "la", ["Latu"] = "ltu", ["Latundê"] = "ltn", ["Latvian"] = "lv", ["Latvian Sign Language"] = "lsl", ["Lau"] = "llu", ["Laua"] = "luf", ["Lauan"] = "llx", ["Lauje"] = "law", ["Laura"] = "lur", ["Laurentian"] = "lre", ["Lautu Chin"] = "clt", ["Lavatbura-Lamusong"] = "lbv", ["Lave"] = "brb", ["Laven"] = "lbo", ["Lavukaleve"] = "lvk", ["Lawangan"] = "lbx", ["Lawi"] = "lvi", ["Lawu"] = "lwu", ["Lawunuia"] = "tgi", ["Layakha"] = "lya", ["Laz"] = "lzz", ["Laze"] = "tbq-laz", ["Lealao Chinantec"] = "cle", ["Leco"] = "lec", ["Ledo Kaili"] = "lew", ["Leelau"] = "ldk", ["Lefa"] = "lfa", ["Lega-Mwenga"] = "lgm", ["Lega-Shabunda"] = "lea", ["Legbo"] = "agb", ["Legenyem"] = "lcc", ["Lehali"] = "tql", ["Lehalurup"] = "urr", ["Leinong Naga"] = "lzn", ["Leipon"] = "lek", ["Lela"] = "dri", ["Lelak"] = "llk", ["Lele (Chad)"] = "lln", ["Lele (Congo)"] = "lel", ["Lele (Guinea)"] = "llc", ["Lele (New Guinea)"] = "lle", ["Lelemi"] = "lef", ["Lelepa"] = "lpa", ["Lembena"] = "leq", ["Lemerig"] = "lrz", ["Lemio"] = "lei", ["Lemnian"] = "xle", ["Lemolang"] = "ley", ["Lemoro"] = "ldj", ["Lenakel"] = "tnl", ["Lendu"] = "led", ["Lengilu"] = "lgi", ["Lengo"] = "lgr", ["Lengola"] = "lej", ["Lenje"] = "leh", ["Lenkau"] = "ler", ["Lenyima"] = "ldg", ["Leonese"] = "roa-leo", ["Lepcha"] = "lep", ["Lepki"] = "lpe", ["Lepontic"] = "xlp", ["Lere"] = "gnh", ["Lese"] = "les", ["Lesing-Gelimi"] = "let", ["Letemboi"] = "nms", ["Leti (Cameroon)"] = "leo", ["Leti (Indonesia)"] = "lti", ["Levuka"] = "lvu", ["Lewo"] = "lww", ["Lewo Eleng"] = "lwe", ["Lewotobi"] = "lwt", ["Leyigha"] = "ayi", ["Lezgi"] = "lez", ["Lhao Vo"] = "mhx", ["Lhokpu"] = "lhp", ["Li'o"] = "ljl", ["Liabuku"] = "lix", ["Liana-Seti"] = "ste", ["Liangmai Naga"] = "njn", ["Liberia Kpelle"] = "xpe", ["Liberian English"] = "lir", ["Libido"] = "liq", ["Libinza"] = "liz", ["Libon Bikol"] = "lbl", ["Liburnian"] = "xli", ["Libyan Arabic"] = "ayl", ["Libyan Sign Language"] = "lbs", ["Ligbi"] = "lig", ["Ligenza"] = "lgz", ["Ligurian"] = "lij", ["Lihir"] = "lih", ["Lika"] = "lik", ["Liki"] = "lio", ["Likila"] = "lie", ["Likuba"] = "kxx", ["Likum"] = "lib", ["Likwala"] = "kwc", ["Lilau"] = "lll", ["Lillooet"] = "lil", ["Limassa"] = "bme", ["Limbu"] = "lif", ["Limbum"] = "lmp", ["Limburgish"] = "li", ["Limi"] = "ylm", ["Limilngan"] = "lmc", ["Limos Kalinga"] = "kmk", ["Lindu"] = "klw", ["Linear A"] = "lab", ["Lingala"] = "ln", ["Lingao"] = "onb", ["Lingkhim"] = "lii", ["Lingua Franca Nova"] = "lfn", ["Linngithigh"] = "lnj", ["Lipan"] = "apl", ["Lipo"] = "lpo", ["Lisabata-Nuniali"] = "lcs", ["Lisela"] = "lcl", ["Lish"] = "lsh", ["Lishana Deni"] = "lsd", ["Lishanid Noshan"] = "aij", ["Lishán Didán"] = "trg", ["Lisu"] = "lis", ["Literary Chinese"] = "lzh", ["Lithuanian"] = "lt", ["Lithuanian Sign Language"] = "lls", ["Little Swanport"] = "aus-lsw", ["Litzlitz"] = "lzl", ["Livonian"] = "liv", ["Livvi"] = "olo", ["Lizu"] = "sit-liz", ["Lo-Toga"] = "lht", ["Loarki"] = "lrk", ["Lobala"] = "loq", ["Lobi"] = "lob", ["Lodhi"] = "lbm", ["Logba"] = "lgq", ["Logo"] = "log", ["Logol"] = "lof", ["Logooli"] = "rag", ["Logorik"] = "liu", ["Lojban"] = "jbo", ["Lokaa"] = "yaz", ["Loko"] = "lok", ["Lokoya"] = "lky", ["Lola"] = "lcd", ["Lolak"] = "llq", ["Lole"] = "llg", ["Lolo"] = "llb", ["Loloda"] = "loa", ["Lolopo"] = "ycl", ["Lomaiviti"] = "lmv", ["Lomakka"] = "loi", ["Lomavren"] = "rmi", ["Lombard"] = "lmo", ["Lombi"] = "lmi", ["Lombo"] = "loo", ["Lomwe"] = "ngl", ["Loncong"] = "lce", ["Long Phuri Naga"] = "lpn", ["Long Wat"] = "ttw", ["Longgu"] = "lgu", ["Longto"] = "wok", ["Longuda"] = "lnu", ["Loniu"] = "los", ["Lonwolwol"] = "crc", ["Loo"] = "ldo", ["Looma"] = "lom", ["Lopa"] = "lop", ["Lopi"] = "lov", ["Lopit"] = "lpx", ["Lorang"] = "lrn", ["Lorediakarkar"] = "lnn", ["Lorrain"] = "roa-lor", ["Lote"] = "uvl", ["Lotha Naga"] = "njh", ["Lotud"] = "dtr", ["Lotuko"] = "lot", ["Lou"] = "loj", ["Louisiana Creole"] = "lou", ["Loun"] = "lox", ["Loup A"] = "xlo", ["Loup B"] = "xlb", ["Lovono"] = "vnk", ["Low German"] = "nds", ["Lower Burdekin"] = "xbb", ["Lower Chehalis"] = "cea", ["Lower Grand Valley Dani"] = "dni", ["Lower Nossob"] = "nsb", ["Lower Sorbian"] = "dsb", ["Lower Southern Aranda"] = "axl", ["Lower Ta'oih"] = "tto", ["Lower Tanana"] = "taa", ["Lowland Oaxaca Chontal"] = "clo", ["Lowland Tarahumara"] = "tac", ["Loxicha Zapotec"] = "ztp", ["Lozi"] = "loz", ["Luang"] = "lex", ["Luba-Kasai"] = "lua", ["Luba-Katanga"] = "lu", ["Lubila"] = "kcc", ["Lubu"] = "lcf", ["Lubuagan Kalinga"] = "knb", ["Luchazi"] = "lch", ["Lucumí"] = "luq", ["Ludian"] = "lud", ["Lufu"] = "ldq", ["Luganda"] = "lg", ["Lugbara"] = "lgg", ["Luguru"] = "ruf", ["Luhu"] = "lcq", ["Luhya"] = "luy", ["Luimbi"] = "lum", ["Luiseño"] = "lui", ["Lukpa"] = "dop", ["Lule"] = "ule", ["Lule Sami"] = "smj", ["Lumba-Yakkha"] = "luu", ["Lumbee"] = "lmz", ["Lumbu"] = "lup", ["Lumun"] = "lmd", ["Lun Bawang"] = "lnd", ["Luna"] = "luj", ["Lunanakha"] = "luk", ["Lunda"] = "lun", ["Lungga"] = "lga", ["Luo"] = "luo", ["Luopohe Hmong"] = "hml", ["Luri (Nigeria)"] = "ldd", ["Lusengo"] = "lse", ["Lushootseed"] = "lut", ["Lusi"] = "khl", ["Lusitanian"] = "xls", ["Lutachoni"] = "lts", ["Lutos"] = "ndy", ["Luvale"] = "lue", ["Luwati"] = "luv", ["Luwian"] = "xlu", ["Luwo"] = "lwo", ["Luxembourgish"] = "lb", ["Luyana"] = "lyn", ["Lwalu"] = "lwa", ["Lwel"] = "bnt-lwl", ["Lycian"] = "xlc", ["Lydian"] = "xld", ["Lyngngam"] = "lyg", ["Lyélé"] = "lee", ["Láadan"] = "ldn", ["Láá Láá Bwamu"] = "bwj", ["Lü"] = "khb", ["Ma"] = "msj", ["Ma Manda"] = "skc", ["Ma'anyan"] = "mhy", ["Ma'di"] = "mhi", ["Ma'ya"] = "slz", ["Maa"] = "cma", ["Maaka"] = "mew", ["Maale"] = "mdy", ["Maasai"] = "mas", ["Maay"] = "ymm", ["Maba"] = "mqa", ["Mabaale"] = "mmz", ["Mabaan"] = "mfz", ["Mabaka Valley Kalinga"] = "kkg", ["Mabire"] = "muj", ["Maca"] = "mca", ["Macaguaje"] = "mcl", ["Macaguán"] = "mbn", ["Macanese"] = "mzs", ["Macau Pidgin Portuguese"] = "crp-mpp", ["Macedonian"] = "mk", ["Machame"] = "jmc", ["Machiguenga"] = "mcb", ["Machinere"] = "mpd", ["Machinga"] = "mvw", ["Macoris"] = "nai-mac", ["Macuna"] = "myy", ["Macushi"] = "mbc", ["Mada (Cameroon)"] = "mxu", ["Mada (Nigeria)"] = "mda", ["Madagascar Sign Language"] = "mzc", ["Madak"] = "mmx", ["Maden"] = "xmx", ["Madhi Madhi"] = "dmd", ["Madi"] = "grg", ["Madngele"] = "zml", ["Madukayang Kalinga"] = "kmd", ["Madurese"] = "mad", ["Mae"] = "mme", ["Maek"] = "hmk", ["Maeng Itneg"] = "itt", ["Mafa"] = "maf", ["Mafea"] = "mkv", ["Mag-Anchi Ayta"] = "sgb", ["Mag-Indi Ayta"] = "blx", ["Magadhi Prakrit"] = "inc-mgd", ["Magahat"] = "mtw", ["Magahi"] = "mag", ["Magdalena Peñasco Mixtec"] = "xtm", ["Magiyi"] = "gmg", ["Magoma"] = "gmx", ["Magori"] = "zgr", ["Maguindanao"] = "mdh", ["Magɨ"] = "gkd", ["Mahali"] = "mjx", ["Maharastri Prakrit"] = "pmh", ["Mahasu Pahari"] = "bfz", ["Mahican"] = "mjy", ["Mahongwe"] = "mhb", ["Mahou"] = "mxx", ["Maia"] = "sks", ["Maiadomu"] = "mzz", ["Maiani"] = "tnh", ["Maii"] = "mmm", ["Mailu"] = "mgu", ["Maindo"] = "cwb", ["Mairasi"] = "zrs", ["Maisin"] = "mbq", ["मैथिली"] = "mai", ["Maiwa (Indonesia)"] = "wmm", ["Maiwa (New Guinea)"] = "mti", ["Maiwala"] = "mum", ["Majang"] = "mpe", ["Majera"] = "xmj", ["Majhi"] = "mjz", ["Majhwar"] = "mmj", ["Mak (China)"] = "mkg", ["Mak (Nigeria)"] = "pbl", ["Makaa"] = "mcp", ["Makah"] = "myh", ["Makalero"] = "mjb", ["Makasae"] = "mkz", ["Makasar"] = "mak", ["Makassar Malay"] = "mfp", ["Makayam"] = "aup", ["Makhuwa"] = "vmw", ["Makhuwa-Marrevone"] = "xmc", ["Makhuwa-Meetto"] = "mgh", ["Makhuwa-Moniga"] = "mhm", ["Makhuwa-Saka"] = "xsq", ["Makhuwa-Shirima"] = "vmk", ["Maklew"] = "mgf", ["Makolkol"] = "zmh", ["Makonde"] = "kde", ["Maku"] = "xak", ["Maku'a"] = "lva", ["Makuri Naga"] = "jmn", ["Makuráp"] = "mpu", ["Makwe"] = "ymk", ["Makyan Naga"] = "umn", ["Mal"] = "mlf", ["Mal Paharia"] = "mkb", ["Mala (New Guinea)"] = "ped", ["Mala (Nigeria)"] = "ruy", ["Mala Malasar"] = "ima", ["Malaccan Creole Malay"] = "ccm", ["Malagasy"] = "mg", ["Malalamai"] = "mmt", ["Malalí"] = "sai-mal", ["Malango"] = "mln", ["Malankuravan"] = "mjo", ["Malapandaram"] = "mjp", ["Malaryan"] = "mjq", ["Malas"] = "mkr", ["Malasanga"] = "mqz", ["Malasar"] = "ymr", ["Malavedan"] = "mjr", ["Malawi Lomwe"] = "lon", ["Malawian Sign Language"] = "lws", ["Malay"] = "ms", ["Malayalam"] = "ml", ["Malayic Dayak"] = "xdy", ["Malaynon"] = "mlz", ["Malaysian Sign Language"] = "xml", ["Malba Birifor"] = "bfo", ["Male"] = "mdc", ["Malecite-Passamaquoddy"] = "pqm", ["Maleng"] = "pkt", ["Maleu-Kilenge"] = "mgl", ["Malfaxal"] = "mlx", ["Malgana"] = "vml", ["Malgbe"] = "mxf", ["Mali"] = "gcc", ["Malibu"] = "sai-mlb", ["Malila"] = "mgq", ["Malimba"] = "mzd", ["Malimpung"] = "mli", ["Malinaltepec Tlapanec"] = "tcf", ["Malol"] = "mbk", ["Maltese"] = "mt", ["Maltese Sign Language"] = "mdl", ["Malua Bay"] = "mll", ["Malvi"] = "mup", ["Maléku Jaíka"] = "gut", ["Mam"] = "mam", ["Mama"] = "mma", ["Mamaa"] = "mhf", ["Mamaindé"] = "wmd", ["Mamanwa"] = "mmn", ["Mamara Senoufo"] = "myk", ["Mamasa"] = "mqj", ["Mambae"] = "mgm", ["Mambai"] = "mcs", ["Mamboru"] = "mvd", ["Mambwe-Lungu"] = "mgr", ["Mampruli"] = "maw", ["Mamuju"] = "mqx", ["Mamulique"] = "emm", ["Mamusi"] = "kdf", ["Mamvu"] = "mdi", ["Man Met"] = "mml", ["Manado Malay"] = "xmm", ["Manam"] = "mva", ["Manambu"] = "mle", ["Manangba"] = "nmm", ["Manangkari"] = "znk", ["Manao"] = "awd-man", ["Manchu"] = "mnc", ["Manda (Australia)"] = "zma", ["Manda (India)"] = "mha", ["Manda (Tanzania)"] = "mgs", ["Mandahuaca"] = "mht", ["Mandaic"] = "mid", ["Mandailing Batak"] = "btm", ["Mandalorian"] = "art-man", ["Mandan"] = "mhq", ["Mandandanyi"] = "zmk", ["Mandar"] = "mdr", ["Mandara"] = "tbf", ["Mandari"] = "mqu", ["Mandarin"] = "cmn", ["Mandeali"] = "mjl", ["Mander"] = "mqr", ["Mandingo"] = "man", ["Mandinka"] = "mnk", ["Mandjak"] = "mfv", ["Mandobo Atas"] = "aax", ["Mandobo Bawah"] = "bwp", ["Manem"] = "jet", ["Mang"] = "zng", ["Mangala"] = "mem", ["Mangarayi"] = "mpc", ["Mangarevan"] = "mrv", ["Mangas"] = "zns", ["Mangayat"] = "myj", ["Mangbetu"] = "mdj", ["Mangbutu"] = "mdk", ["Mangerr"] = "zme", ["Mangga Buang"] = "mmo", ["Manggarai"] = "mqy", ["Mangghuer"] = "xgn-mgr", ["Mango"] = "mge", ["Mangole"] = "mqc", ["Mangseng"] = "mbh", ["Manigri-Kambolé Ede Nago"] = "xkb", ["Manikion"] = "mnx", ["Manipa"] = "mqp", ["Manipuri"] = "mni", ["Mankanya"] = "knf", ["Mankiyali"] = "nlm", ["Manna-Dora"] = "mju", ["Mannan"] = "mjv", ["Mano"] = "mev", ["Manombai"] = "woo", ["Mansaka"] = "msk", ["Mansi"] = "mns", ["Mansoanka"] = "msw", ["Manta"] = "myg", ["Mantsi"] = "nty", ["Manumanaw Karen"] = "kxf", ["Manusela"] = "wha", ["Manx"] = "gv", ["Manya"] = "mzj", ["Manyawa"] = "mny", ["Manza"] = "mzv", ["Mao Naga"] = "nbi", ["Maonan"] = "mmd", ["Maore Comorian"] = "swb", ["Maori"] = "mi", ["Mape"] = "mlh", ["Mapena"] = "mnm", ["Mapia"] = "mpy", ["Mapidian"] = "mpw", ["Mapos Buang"] = "bzh", ["Mapoyo"] = "mcg", ["Mapudungun"] = "arn", ["Mapun"] = "sjm", ["Maquiritari"] = "mch", ["Mara"] = "mec", ["Mara Chin"] = "mrh", ["Marachi"] = "lri", ["Maraghei"] = "vmh", ["Maragus"] = "mrs", ["Maram Naga"] = "nma", ["Marama"] = "lrm", ["Maranao"] = "mrw", ["Maranungku"] = "zmr", ["Mararit"] = "mgb", ["Marathi"] = "mr", ["Maratino"] = "sai-mar", ["Marau"] = "mvr", ["Marawan"] = "awd-mar", ["Marba"] = "mpg", ["Marenje"] = "vmr", ["Marfa"] = "mvu", ["Margany"] = "zmc", ["Marghi South"] = "mfm", ["Margi"] = "mrt", ["Margu"] = "mhg", ["Maria"] = "mds", ["Mariaté"] = "awd-mrt", ["Maricopa"] = "mrc", ["Maridan"] = "zmd", ["Maridjabin"] = "zmj", ["Marik"] = "dad", ["Marimanindji"] = "zmm", ["Marind"] = "mrz", ["Maring"] = "mbw", ["Maring Naga"] = "nng", ["Maringarr"] = "zmt", ["Marino"] = "mrb", ["Mariri"] = "mqi", ["Maritime Sign Language"] = "nsr", ["Maritsauá"] = "msp", ["Mariupol Greek"] = "grk-mar", ["Mariyedi"] = "zmy", ["Marka"] = "rkm", ["Markweeta"] = "enb", ["Marma"] = "rmz", ["Maroon Spirit Language"] = "cpe-mar", ["Marovo"] = "mvo", ["Marriammu"] = "xru", ["Marrithiyel"] = "mfr", ["Marrucinian"] = "umc", ["Marshallese"] = "mh", ["Marsian"] = "ims", ["Martha's Vineyard Sign Language"] = "mre", ["Marti Ke"] = "zmg", ["Martu Wangka"] = "mpj", ["Martuthunira"] = "vma", ["Marwari"] = "mwr", ["Marúbo"] = "mzr", ["Masaba"] = "myx", ["Masadiit Itneg"] = "tis", ["Masakará"] = "sai-msk", ["Masalit"] = "mls", ["Masana"] = "mcn", ["Masbate Sorsogon"] = "bks", ["Masbatenyo"] = "msb", ["Mashco Piro"] = "cuj", ["Mashi"] = "mho", ["Masimasi"] = "ism", ["Masiwang"] = "bnf", ["Maskelynes"] = "klv", ["Maslam"] = "msv", ["Masmaje"] = "mes", ["Massachusett"] = "wam", ["Massalat"] = "mdg", ["Massep"] = "mvs", ["Matagalpa"] = "mtn", ["Matal"] = "mfh", ["Matanawi"] = "sai-mat", ["Matbat"] = "xmt", ["Matengo"] = "mgv", ["Matepi"] = "mqe", ["Matigsalug Manobo"] = "mbt", ["Matipuhy"] = "mzo", ["Matlatzinca"] = "mat", ["Mato"] = "met", ["Mato Grosso Arára"] = "axg", ["Mator"] = "mtm", ["Matsés"] = "mcf", ["Mattole"] = "mvb", ["Matukar"] = "mjk", ["Matumbi"] = "mgw", ["Matya Samo"] = "stj", ["Matís"] = "mpq", ["Maung"] = "mph", ["Mauritian Creole"] = "mfe", ["Mauritian Sign Language"] = "lsy", ["Mauwake"] = "mhl", ["Mawa"] = "mcw", ["Mawak"] = "mjj", ["Mawan"] = "mcz", ["Mawayana"] = "mzx", ["Mawchi"] = "mke", ["Mawes"] = "mgk", ["Maxakalí"] = "mbl", ["Maxi Gbe"] = "mxl", ["Maya Samo"] = "sym", ["Mayaguduna"] = "xmy", ["Mayangna"] = "yan", ["Mayawali"] = "yxa", ["Maybrat"] = "ayz", ["Mayeka"] = "myc", ["Mayi-Thakurti"] = "xyt", ["Maykulan"] = "mnt", ["Maynas"] = "sai-mys", ["Mayo"] = "mfy", ["Mayogo"] = "mdm", ["Mayoyao Ifugao"] = "ifu", ["Maypure"] = "awd-mpr", ["Mazagway"] = "dkx", ["Mazaltepec Zapotec"] = "zpy", ["Mazanderani"] = "mzn", ["Mazatlán Mazatec"] = "vmz", ["Mazatlán Mixe"] = "mzl", ["Mba"] = "mfc", ["Mbabaram"] = "vmb", ["Mbala"] = "mdp", ["Mbalanhu"] = "lnb", ["Mbandja"] = "zmz", ["Mbangala"] = "mxg", ["Mbangi"] = "mgn", ["Mbangwe"] = "zmn", ["Mbara (Australia)"] = "mvl", ["Mbara (Chad)"] = "mpk", ["Mbariman-Gudhinma"] = "zmv", ["Mbati"] = "mdn", ["Mbato"] = "gwa", ["Mbay"] = "myb", ["Mbe"] = "mfo", ["Mbe'"] = "mtk", ["Mbelime"] = "mql", ["Mbere"] = "mdt", ["Mbesa"] = "zms", ["Mbiywom"] = "aus-mbi", ["Mbo (Cameroon)"] = "mbo", ["Mbo (Congo)"] = "zmw", ["Mboi"] = "moi", ["Mboko"] = "mdu", ["Mbole"] = "mdq", ["Mbonga"] = "xmb", ["Mbongno"] = "bgu", ["Mbosi"] = "mdw", ["Mbowe"] = "mxo", ["Mbre"] = "mka", ["Mbu'"] = "muc", ["Mbudum"] = "xmd", ["Mbugu"] = "mhd", ["Mbugwe"] = "mgz", ["Mbuko"] = "mqb", ["Mbukushu"] = "mhw", ["Mbula"] = "mna", ["Mbula-Bwazza"] = "mbu", ["Mbule"] = "mlb", ["Mbulungish"] = "mbv", ["Mbum"] = "mdd", ["Mbunda"] = "mck", ["Mbunga"] = "mgy", ["Mburku"] = "bbt", ["Mbuun"] = "zmp", ["Mbwela"] = "mfu", ["Mbyá Guaraní"] = "gun", ["Me'en"] = "mym", ["Mea"] = "meg", ["Mebu"] = "mjn", ["Mecayapan Nahuatl"] = "nhx", ["Medebur"] = "mjm", ["Medefaidrin"] = "dmf", ["Media Lengua"] = "mue", ["Mednyj Aleut"] = "mud", ["Medumba"] = "byv", ["Mefele"] = "mfj", ["Megam"] = "mef", ["Megleno-Romanian"] = "ruq", ["Mehek"] = "nux", ["Mehináku"] = "mmh", ["Mehri"] = "gdq", ["Mekeo"] = "mek", ["Mekmek"] = "mvk", ["Mekwei"] = "msf", ["Mel-Khaonh"] = "hkn", ["Mele-Fila"] = "mxe", ["Melo"] = "mfx", ["Melpa"] = "med", ["Memoni"] = "mby", ["Mendalam Kayan"] = "xkd", ["Mendankwe-Nkwen"] = "mfd", ["Mende"] = "men", ["Mengaka"] = "xmg", ["Mengen"] = "mee", ["Menien"] = "sai-men", ["Menka"] = "mea", ["Menominee"] = "mez", ["Mentawai"] = "mwv", ["Menya"] = "mcr", ["Meoswar"] = "mvx", ["Mer"] = "mnu", ["Meramera"] = "mxm", ["Merei"] = "lmb", ["Merey"] = "meq", ["Meriam"] = "ulk", ["Merlav"] = "mrm", ["Meroitic"] = "xmr", ["Meru"] = "mer", ["Mesaka"] = "iyo", ["Mese"] = "mci", ["Mesme"] = "zim", ["Mesmes"] = "mys", ["Mesqan"] = "mvz", ["Messapic"] = "cms", ["Meta'"] = "mgo", ["Metlatónoc Mixtec"] = "mxv", ["Mewari"] = "mtr", ["Mewati"] = "wtm", ["Mexican Sign Language"] = "mfs", ["Meyah"] = "mej", ["Mezontla Popoloca"] = "pbe", ["Mezquital Otomi"] = "ote", ["Meänkieli"] = "fit", ["Mfinu"] = "zmf", ["Mfumte"] = "nfu", ["Mgbo"] = "gmz", ["Mi'kmaq"] = "mic", ["Miami"] = "mia", ["Mian"] = "mpt", ["Miani"] = "pla", ["Michif"] = "crg", ["Michigamea"] = "cmm", ["Michoacán Mazahua"] = "mmc", ["Michoacán Nahuatl"] = "ncl", ["Mid Grand Valley Dani"] = "dnt", ["Mid-Southern Banda"] = "bjo", ["Middle Armenian"] = "axm", ["Middle Assamese"] = "inc-mas", ["Middle Bengali"] = "inc-mbn", ["Middle Breton"] = "xbm", ["Middle Chinese"] = "ltc", ["Middle Cornish"] = "cnx", ["Middle Dutch"] = "dum", ["Middle English"] = "enm", ["Middle French"] = "frm", ["Middle Gujarati"] = "inc-mgu", ["Middle High German"] = "gmh", ["Middle Irish"] = "mga", ["Middle Kannada"] = "dra-mkn", ["Middle Khmer"] = "xhm", ["Middle Korean"] = "okm", ["Middle Low German"] = "gml", ["Middle Median"] = "xme-mid", ["Middle Mon"] = "mkh-mmn", ["Middle Mongol"] = "xng", ["Middle Newar"] = "nwx", ["Middle Norwegian"] = "gmq-mno", ["Middle Oriya"] = "inc-mor", ["Middle Persian"] = "pal", ["Middle Vietnamese"] = "mkh-mvi", ["Middle Watut"] = "mpl", ["Middle Welsh"] = "wlm", ["Midob"] = "mei", ["Migaama"] = "mmy", ["Migabac"] = "mpp", ["Miji"] = "sjl", ["Miju"] = "mxj", ["Mikasuki"] = "mik", ["Milang"] = "und-mil", ["Mili"] = "ymh", ["Millcayac"] = "sai-mil", ["Miltu"] = "mlj", ["Miluk"] = "iml", ["Milyan"] = "imy", ["Mimi of Decorse"] = "und-mmd", ["Mimi of Nachtigal"] = "und-mmn", ["Min Bei"] = "mnp", ["Min Dong"] = "cdo", ["Min Nan"] = "nan", ["Min Zhong"] = "czo", ["Mina"] = "hna", ["Minaean"] = "inm", ["Minang"] = "xrg", ["Minangkabau"] = "min", ["Minanibai"] = "mcv", ["Minaveha"] = "mvn", ["Minderico"] = "drc", ["Mindiri"] = "mpn", ["Mingang Doso"] = "mko", ["Mingo"] = "iro-min", ["Mingrelian"] = "xmf", ["Minica Huitoto"] = "hto", ["Minidien"] = "wii", ["Minigir"] = "vmg", ["Minjungbal"] = "xjb", ["Minkin"] = "xxm", ["Minoan"] = "omn", ["Minokok"] = "mqq", ["Minriq"] = "mnq", ["Mintil"] = "mzt", ["Miqie"] = "yiq", ["Mirandese"] = "mwl", ["Miraya Bikol"] = "rbl", ["Mire"] = "mvh", ["Mirgan"] = "zrg", ["Miriti"] = "mmv", ["Miriwoong Sign Language"] = "rsm", ["Miriwung"] = "mep", ["Mirpur Panjabi"] = "pmu", ["Misantla Totonac"] = "tlc", ["Miship"] = "mjs", ["Misima-Paneati"] = "mpx", ["Mising"] = "mrg", ["Miskito"] = "miq", ["Mitla Zapotec"] = "zaw", ["Mitlatongo Mixtec"] = "vmm", ["Mittu"] = "mwu", ["Mituku"] = "zmq", ["Miu"] = "mpo", ["Miwa"] = "vmi", ["Mixed Great Andamanese"] = "gac", ["Mixifore"] = "mfg", ["Mixtepec Mixtec"] = "mix", ["Mixtepec Zapotec"] = "zpm", ["Miya"] = "mkf", ["Miyako"] = "mvi", ["Miyobe"] = "soy", ["Mizo"] = "lus", ["Mlabri"] = "mra", ["Mlahsö"] = "lhs", ["Mlap"] = "kja", ["Mlomp"] = "mlo", ["Mmaala"] = "mmu", ["Mmani"] = "buy", ["Mmen"] = "bfm", ["Mo"] = "wkd", ["Mo'da"] = "gbn", ["Moabite"] = "obm", ["Moba"] = "mfq", ["Mobilian"] = "mod", ["Mobumrin Aizi"] = "ahm", ["Mocana"] = "sai-mcn", ["Mochi"] = "old", ["Mochica"] = "omc", ["Mocho"] = "mhc", ["Mocoví"] = "moc", ["Modang"] = "mxd", ["Modole"] = "mqo", ["Moere"] = "mvq", ["Mofu-Gudur"] = "mif", ["Mogholi"] = "mhj", ["Mogum"] = "mou", ["Mohawk"] = "moh", ["Mohegan-Pequot"] = "xpq", ["Moi (Congo)"] = "mow", ["Moi (Indonesia)"] = "mxn", ["Moikodi"] = "mkp", ["Moingi"] = "mwz", ["Mojave"] = "mov", ["Moji"] = "ymi", ["Mok"] = "mqt", ["Moken"] = "mwt", ["Mokerang"] = "mft", ["Mokilese"] = "mkj", ["Moklen"] = "mkm", ["Mokole"] = "mkl", ["Mokpwe"] = "bri", ["Moksha"] = "mdf", ["Molale"] = "mbe", ["Molbog"] = "pwm", ["Moldova Sign Language"] = "vsi", ["Molengue"] = "bxc", ["Molima"] = "mox", ["Molmo One"] = "aun", ["Molo"] = "zmo", ["Molof"] = "msl", ["Moloko"] = "mlw", ["Mom Jango"] = "ver", ["Moma"] = "myl", ["Momare"] = "msz", ["Mombo Dogon"] = "dmb", ["Mombum"] = "mso", ["Momina"] = "mmb", ["Momuna"] = "mqf", ["Mon"] = "mnw", ["Monastic Sign Language"] = "mzg", ["Mondropolon"] = "npn", ["Mondé"] = "mnd", ["Mongghul"] = "xgn-mgl", ["Mongo"] = "lol", ["Mongol"] = "mgt", ["Mongolian"] = "mn", ["Mongolian Sign Language"] = "msr", ["Mongondow"] = "mog", ["Moni"] = "mnz", ["Monimbo"] = "mom", ["Mono (California)"] = "mnr", ["Mono (Cameroon)"] = "mru", ["Mono (Congo)"] = "mnh", ["Monom"] = "moo", ["Monsang Naga"] = "nmh", ["Montagnais"] = "moe", ["Montana Salish"] = "fla", ["Montol"] = "mtl", ["Monumbo"] = "mxk", ["Monzombo"] = "moj", ["Moo"] = "gwg", ["Moore"] = "mos", ["Moose Cree"] = "crm", ["Mopan Maya"] = "mop", ["Mor (Austronesian)"] = "mhz", ["Mor (Papuan)"] = "moq", ["Moraid"] = "msg", ["Moran"] = "sit-mor", ["Morawa"] = "mze", ["Morelos Nahuatl"] = "nhm", ["Morerebi"] = "xmo", ["Moresada"] = "msx", ["Mori Atas"] = "mzq", ["Mori Bawah"] = "xmz", ["Morigi"] = "mdb", ["Moro"] = "mor", ["Moroccan Amazigh"] = "zgh", ["Moroccan Arabic"] = "ary", ["Moroccan Sign Language"] = "xms", ["Morokodo"] = "mgc", ["Morom"] = "bdo", ["Moronene"] = "mqn", ["Morori"] = "mok", ["Morouas"] = "mrp", ["Mortlockese"] = "mrl", ["Moru"] = "mgd", ["Mosimo"] = "mqv", ["Moskona"] = "mtj", ["Mota"] = "mtt", ["Motembo"] = "tmv", ["Motu"] = "meu", ["Mouk-Aria"] = "mwh", ["Mount Iraya Agta"] = "atl", ["Mount Iriga Agta"] = "agz", ["Mountain Koiari"] = "kpx", ["Mouwase"] = "jmw", ["Movima"] = "mzp", ["Moyadan Itneg"] = "ity", ["Moyon Naga"] = "nmo", ["Mozambican Sign Language"] = "mzy", ["Mozarabic"] = "mxi", ["Mpade"] = "mpi", ["Mpalitjanh"] = "xpj", ["Mpi"] = "mpz", ["Mpiemo"] = "mcx", ["Mpiin"] = "bnt-mpi", ["Mpinda"] = "pnd", ["Mpongmpong"] = "mgg", ["Mpoto"] = "mpa", ["Mpotovoro"] = "mvt", ["Mpuono"] = "bnt-mpu", ["Mpur"] = "akc", ["Mro Chin"] = "cmr", ["Mru"] = "mro", ["Mser"] = "kqx", ["Muak Sa-aak"] = "ukk", ["Mualang"] = "mtd", ["Mubami"] = "tsx", ["Mubi"] = "mub", ["Mucuchí"] = "sai-muc", ["Muda"] = "ymd", ["Mudburra"] = "dmw", ["Mudu Koraga"] = "vmd", ["Muduapa"] = "wiv", ["Muduga"] = "udg", ["Muellama"] = "sai-mue", ["Mufian"] = "aoj", ["Muher"] = "sem-mhr", ["Muinane"] = "bmr", ["Mukha-Dora"] = "mmk", ["Mukulu"] = "moz", ["Mulaha"] = "mfw", ["Mulam"] = "mlm", ["Mulao"] = "giu", ["Mullu Kurumba"] = "kpb", ["Mullukmulluk"] = "mpb", ["Muluridyi"] = "vmu", ["Mum"] = "kqa", ["Mumuye"] = "mzm", ["Muna"] = "mnb", ["Munda"] = "unx", ["Mundabli"] = "boe", ["Mundang"] = "mua", ["Mundani"] = "mnf", ["Mundari"] = "unr", ["Mundat"] = "mmf", ["Mundolinco"] = "art-mun", ["Mundurukú"] = "myu", ["Mungaka"] = "mhk", ["Mungbam"] = "mij", ["Munggui"] = "mth", ["Mungkip"] = "mpv", ["Muniche"] = "myr", ["Munit"] = "mtc", ["Munji"] = "mnj", ["Munsee"] = "umu", ["Muong"] = "mtq", ["Mur Pano"] = "tkv", ["Muratayak"] = "asx", ["Murik (Malaysia)"] = "mxr", ["Murik (New Guinea)"] = "mtf", ["Murkim"] = "rmh", ["Murle"] = "mur", ["Murrinh-Patha"] = "mwf", ["Mursi"] = "muz", ["Murui Huitoto"] = "huu", ["Murupi"] = "mqw", ["Muruwari"] = "zmu", ["Musan"] = "mmp", ["Musar"] = "mmi", ["Musasa"] = "smm", ["Musey"] = "mse", ["Musgu"] = "mug", ["Musi"] = "mui", ["Muskum"] = "mje", ["Musom"] = "msu", ["Mussau-Emira"] = "emi", ["Muthuvan"] = "muv", ["Mutu"] = "tuc", ["Muya"] = "mvm", ["Muyang"] = "muy", ["Muyuw"] = "myw", ["Muzi"] = "ymz", ["Muzo"] = "sai-muz", ["Mvanip"] = "mcj", ["Mvuba"] = "mxh", ["Mwaghavul"] = "sur", ["Mwali Comorian"] = "wlc", ["Mwan"] = "moa", ["Mwani"] = "wmw", ["Mwatebu"] = "mwa", ["Mwera"] = "mwe", ["Mwimbi-Muthambi"] = "mws", ["Mwotlap"] = "mlv", ["Mycenaean Greek"] = "gmy", ["Myene"] = "mye", ["Mysian"] = "yms", ["Mzieme Naga"] = "nme", ["Mághdì"] = "gmd", ["Mòcheno"] = "mhn", ["Mün Chin"] = "mwq", ["Mündü"] = "muh", ["N'Ko"] = "nqo", ["Na"] = "nbt", ["Na'vi"] = "art-nav", ["Naaba"] = "nao", ["Naba"] = "mne", ["Nabak"] = "naf", ["Nabi"] = "mty", ["Nachering"] = "ncd", ["Nadruvian"] = "ndf", ["Nadëb"] = "mbj", ["Nafaanra"] = "nfr", ["Nafi"] = "srf", ["Nafri"] = "nxx", ["Naga Pidgin"] = "nag", ["Nagarchal"] = "nbg", ["Nage"] = "nxe", ["Nagtipunan Agta"] = "phi-nag", ["Nagu"] = "ngr", ["Nagumi"] = "ngv", ["Nahali"] = "nlx", ["Nahari"] = "nhh", ["Nahavaq"] = "sns", ["Nahuatl"] = "nah", ["Nai"] = "bio", ["Najdi Arabic"] = "ars", ["Naka'ela"] = "nae", ["Nakai"] = "nkj", ["Nakame"] = "nib", ["Nakanai"] = "nak", ["Nakara"] = "nck", ["Nake"] = "nbk", ["Naki"] = "mff", ["Nakwi"] = "nax", ["Nalca"] = "nlc", ["Nali"] = "nss", ["Nalik"] = "nal", ["Nalu"] = "naj", ["Naluo Yi"] = "ylo", ["Nalögo"] = "nlz", ["Namakura"] = "nmk", ["Namat"] = "nkm", ["Nambikwara"] = "nab", ["Nambo"] = "ncm", ["Nambya"] = "nmq", ["Namia"] = "nnm", ["Namiae"] = "nvm", ["Namibian Sign Language"] = "nbs", ["Namla"] = "naa", ["Namo"] = "mxw", ["Namonuito"] = "nmt", ["Namosi-Naitasiri-Serua"] = "bwb", ["Namuyi"] = "nmy", ["Nanai"] = "gld", ["Nancere"] = "nnc", ["Nande"] = "nnb", ["Nandi"] = "niq", ["Nanerigé Sénoufo"] = "sen", ["Nanga Dama Dogon"] = "nzz", ["Nankina"] = "nnk", ["Nanti"] = "cox", ["Nanticoke"] = "nnt", ["Nanubae"] = "afk", ["Naolan"] = "nai-nao", ["Napu"] = "npy", ["Nar Phu"] = "npa", ["Nara"] = "nrb", ["Narak"] = "nac", ["Narango"] = "nrg", ["Narau"] = "nxu", ["Narim"] = "loh", ["Naro"] = "nhr", ["Narom"] = "nrm", ["Narragansett"] = "xnt", ["Narua"] = "nru", ["Narungga"] = "nnr", ["Nasal"] = "nsy", ["Nasarian"] = "nvh", ["Nasioi"] = "nas", ["Naskapi"] = "nsk", ["Nasu"] = "ywq", ["Natagaimas"] = "nts", ["Natchez"] = "ncz", ["Nateni"] = "ntm", ["Nathembo"] = "nte", ["Natioro"] = "nti", ["Natú"] = "sai-nat", ["Natügu"] = "ntu", ["Nauete"] = "nxa", ["Naukanski"] = "ynk", ["Nauna"] = "ncn", ["Nauo"] = "nwo", ["Nauruan"] = "na", ["Navajo"] = "nv", ["Navarro-Aragonese"] = "roa-oan", ["Navut"] = "nsw", ["Nawaru"] = "nwr", ["Nawathinehena"] = "nwa", ["Nawdm"] = "nmz", ["Nawuri"] = "naw", ["Naxi"] = "nxq", ["Nayi"] = "noz", ["Ncane"] = "ncr", ["Nchumbulu"] = "nlu", ["Nda'nda'"] = "nnz", ["Ndai"] = "gke", ["Ndaka"] = "ndk", ["Ndali"] = "ndh", ["Ndam"] = "ndm", ["Ndamba"] = "ndj", ["Ndambomo"] = "nxo", ["Ndasa"] = "nda", ["Ndau"] = "ndc", ["Nde-Gbite"] = "ned", ["Nde-Nsele-Nta"] = "ndd", ["Ndemli"] = "nml", ["Ndendeule"] = "dne", ["Ndengereko"] = "ndg", ["Nding"] = "eli", ["Ndjébbana"] = "djj", ["Ndo"] = "ndp", ["Ndobo"] = "ndw", ["Ndoe"] = "nbb", ["Ndogo"] = "ndz", ["Ndolo"] = "ndl", ["Ndom"] = "nqm", ["Ndombe"] = "ndq", ["Ndonga"] = "ng", ["Ndoola"] = "ndr", ["Ndrulo"] = "dno", ["Nduga"] = "ndx", ["Ndumu"] = "nmd", ["Ndunda"] = "nuh", ["Ndunga"] = "ndt", ["Ndut"] = "ndv", ["Ndyuka-Trio Pidgin"] = "njt", ["Ndzwani Comorian"] = "wni", ["Neapolitan"] = "nap", ["Nedebang"] = "nec", ["Nefamese"] = "nef", ["Nefusa"] = "jbn", ["Negerhollands"] = "dcr", ["Negeri Sembilan Malay"] = "zmi", ["Negidal"] = "neg", ["Nehan"] = "nsn", ["Nek"] = "nif", ["Nekgini"] = "nkg", ["Neko"] = "nej", ["Neku"] = "nek", ["Neme"] = "nex", ["Nemi"] = "nem", ["Nen"] = "nqn", ["Nend"] = "anh", ["Nengone"] = "nen", ["Neo"] = "neu", ["Nepalese Sign Language"] = "nsp", ["Nepali"] = "ne", ["Nepali Kurux"] = "kxl", ["Nete"] = "net", ["Neve'ei"] = "vnm", ["Neverver"] = "lgk", ["New Caledonian Javanese"] = "jas", ["New River Shasta"] = "nai-nrs", ["New Zealand Sign Language"] = "nzs", ["Newar"] = "new", ["Neyo"] = "ney", ["Nez Perce"] = "nez", ["Nga La"] = "hlt", ["Ngaanyatjarra"] = "ntj", ["Ngadha"] = "nxg", ["Ngadjunmaya"] = "nju", ["Ngadjuri"] = "jui", ["Ngaing"] = "nnf", ["Ngaju"] = "nij", ["Ngala"] = "nud", ["Ngalakan"] = "nig", ["Ngalkbun"] = "ngk", ["Ngalum"] = "szb", ["Ngam"] = "nmc", ["Ngamambo"] = "nbv", ["Ngambay"] = "sba", ["Ngamini"] = "nmv", ["Ngamo"] = "nbh", ["Ngan'gityemerri"] = "nam", ["Nganakarti"] = "xnk", ["Nganasan"] = "nio", ["Ngandi"] = "nid", ["Ngando (Central African Republic)"] = "ngd", ["Ngando (Congo)"] = "nxd", ["Ngandyera"] = "nne", ["Ngangam"] = "gng", ["Ngantangarra"] = "ntg", ["Nganyaywana"] = "nyx", ["Ngardi"] = "rxd", ["Ngarigu"] = "xni", ["Ngarinman"] = "nbj", ["Ngarinyin"] = "ung", ["Ngarla"] = "nrk", ["Ngarluma"] = "nrl", ["Ngarrindjeri"] = "nay", ["Ngas"] = "anc", ["Ngasa"] = "nsg", ["Ngatik Men's Creole"] = "ngm", ["Ngawn Chin"] = "cnw", ["Ngawun"] = "nxn", ["Ngazidja Comorian"] = "zdj", ["Ngbaka"] = "nga", ["Ngbaka Ma'bo"] = "nbm", ["Ngbaka Manza"] = "ngg", ["Ngbee"] = "jgb", ["Ngbinda"] = "nbd", ["Ngbundu"] = "nuu", ["Ngelima"] = "agh", ["Ngemba"] = "nge", ["Ngen"] = "gnj", ["Ngendelengo"] = "nql", ["Ngeq"] = "ngt", ["Ngete"] = "nnn", ["Nggem"] = "nbq", ["Nggwahyi"] = "ngx", ["Ngie"] = "ngj", ["Ngiemboon"] = "nnh", ["Ngile"] = "jle", ["Ngindo"] = "nnq", ["Ngiti"] = "niy", ["Ngiyambaa"] = "wyb", ["Ngizim"] = "ngi", ["Ngkoth"] = "aus-ngk", ["Ngkâlmpw Kanum"] = "kcd", ["Ngochang"] = "tbq-ngo", ["Ngom"] = "nra", ["Ngomba"] = "jgo", ["Ngombale"] = "nla", ["Ngombe (Central African Republic)"] = "nmj", ["Ngombe (Congo)"] = "ngc", ["Ngong"] = "nnx", ["Ngongo"] = "noq", ["Ngoni"] = "ngo", ["Ngoreme"] = "ngq", ["Ngoshie"] = "nsh", ["Ngul"] = "nlo", ["Ngulu"] = "ngp", ["Nguluwan"] = "nuw", ["Ngumbi"] = "nui", ["Ngunawal"] = "xul", ["Ngundi"] = "ndn", ["Ngundu"] = "nue", ["Ngungwel"] = "ngz", ["Ngurmbur"] = "nrx", ["Nguôn"] = "nuo", ["Ngwaba"] = "ngw", ["Ngwe"] = "nwe", ["Ngwo"] = "ngn", ["Ngäbere"] = "gym", ["Nhanda"] = "nha", ["Nheengatu"] = "yrl", ["Nhirrpi"] = "hrp", ["Nhuwala"] = "nhf", ["Nias"] = "nia", ["Nicaraguan Creole"] = "bzk", ["Nicaraguan Sign Language"] = "ncs", ["Nicola"] = "ath-nic", ["Niellim"] = "nie", ["Nigeria Mambila"] = "mzk", ["Nigerian Pidgin"] = "pcm", ["Nigerian Sign Language"] = "nsi", ["Nihali"] = "nll", ["Nii"] = "nii", ["Niksek"] = "gbe", ["Nila"] = "nil", ["Nilamba"] = "nim", ["Nimadi"] = "noe", ["Nimanbur"] = "nmp", ["Nimbari"] = "nmr", ["Nimboran"] = "nir", ["Nimi"] = "nis", ["Nimo"] = "niw", ["Nimoa"] = "nmw", ["Ninam"] = "shb", ["Nindi"] = "nxi", ["Ningera"] = "nby", ["Ninggerum"] = "nxr", ["Ningil"] = "niz", ["Ninia Yali"] = "nlk", ["Ninzo"] = "nin", ["Nipsan"] = "nps", ["Nisa"] = "njs", ["Nisenan"] = "nsz", ["Nisga'a"] = "ncg", ["Nisi"] = "yso", ["Niuafo'ou"] = "num", ["Niuatoputapu"] = "nkp", ["Niuean"] = "niu", ["Nivaclé"] = "cag", ["Nivkh"] = "niv", ["Niwer Mil"] = "hrc", ["Niya Prakrit"] = "pra-niy", ["Njalgulgule"] = "njl", ["Njebi"] = "nzb", ["Njen"] = "njj", ["Njerep"] = "njr", ["Njyem"] = "njy", ["Nkami"] = "nkq", ["Nkangala"] = "nkn", ["Nkari"] = "nkz", ["Nkem-Nkum"] = "isi", ["Nkhumbi"] = "khu", ["Nkongho"] = "nkc", ["Nkonya"] = "nko", ["Nkoroo"] = "nkx", ["Nkoya"] = "nka", ["Nkukoli"] = "nbo", ["Nkutu"] = "nkw", ["Nnam"] = "nbp", ["Nobiin"] = "fia", ["Nobonob"] = "gaw", ["Nocamán"] = "nom", ["Nocte Naga"] = "njb", ["Nogai"] = "nog", ["Noiri"] = "noi", ["Nokuku"] = "nkk", ["Nomaande"] = "lem", ["Nomane"] = "nof", ["Nomatsiguenga"] = "not", ["Nomlaki"] = "nol", ["Nomu"] = "noh", ["Nong Zhuang"] = "zhn", ["Nonuya"] = "noj", ["Nooksack"] = "nok", ["Noon"] = "snf", ["Noone"] = "nhu", ["Nootka"] = "nuk", ["Nopala Chatino"] = "cya", ["Noric"] = "nrc", ["Norman"] = "nrf", ["Norn"] = "nrn", ["Norra"] = "nrr", ["North Alaskan Inupiatun"] = "esi", ["North Ambrym"] = "mmg", ["North Asmat"] = "nks", ["North Awyu"] = "yir", ["North Babar"] = "bcd", ["North Boma"] = "boh", ["North Central Mixe"] = "neq", ["North Efate"] = "llp", ["North Fali"] = "fll", ["North Frisian"] = "frr", ["North Giziga"] = "gis", ["North Levantine Arabic"] = "apc", ["North Marquesan"] = "mrq", ["North Mesopotamian Arabic"] = "ayp", ["North Mofu"] = "mfk", ["North Moluccan Malay"] = "max", ["North Muyu"] = "kti", ["North Nuaulu"] = "nni", ["North Picene"] = "nrp", ["North Slavey"] = "scs", ["North Tairora"] = "tbg", ["North Tanna"] = "tnn", ["North Wahgi"] = "whg", ["North Watut"] = "una", ["Northeast Kiwai"] = "kiw", ["Northeast Maidu"] = "nmu", ["Northeast Pashayi"] = "aee", ["Northeastern Dinka"] = "dip", ["Northeastern Pomo"] = "pef", ["Northern Alta"] = "aqn", ["Northern Altai"] = "atv", ["Northern Amami-Oshima"] = "ryn", ["Northern Bai"] = "bfc", ["Northern Bontoc"] = "rbk", ["Northern Catanduanes Bicolano"] = "cts", ["Northern Dagara"] = "dgi", ["Northern East Cree"] = "crl", ["Northern Emberá"] = "emp", ["Northern Ghale"] = "ghh", ["Northern Grebo"] = "gbo", ["Northern Guiyang Hmong"] = "huj", ["Northern Haida"] = "hdn", ["Northern Hindko"] = "hno", ["Northern Huishui Hmong"] = "hmi", ["Northern Kalapuya"] = "nrt", ["Northern Kam"] = "doc", ["Northern Kankanay"] = "xnn", ["Northern Khmer"] = "kxm", ["Northern Kissi"] = "kqs", ["Northern Kurdish"] = "kmr", ["Northern Lorung"] = "lbr", ["Northern Luri"] = "lrc", ["Northern Mashan Hmong"] = "hmp", ["Northern Muji"] = "ymx", ["Northern Ndebele"] = "nd", ["Northern Ngbandi"] = "ngb", ["Northern Nisu"] = "yiv", ["Northern Nuni"] = "nuv", ["Northern Oaxaca Nahuatl"] = "nhy", ["Northern Ohlone"] = "cst", ["Northern One"] = "onr", ["Northern Paiute"] = "pao", ["Northern Pame"] = "pmq", ["Northern Pomo"] = "pej", ["Northern Puebla Nahuatl"] = "ncj", ["Northern Pumi"] = "pmi", ["Northern Pwo"] = "pww", ["Northern Qiandong Miao"] = "hea", ["Northern Qiang"] = "cng", ["Northern Rengma Naga"] = "nnl", ["Northern Roglai"] = "rog", ["Northern Saharan Berber"] = "mzb", ["Northern Sami"] = "se", ["Northern Selkup"] = "sel-nor", ["Northern Sierra Miwok"] = "nsq", ["Northern Sotho"] = "nso", ["Northern Subanen"] = "stb", ["Northern Tarahumara"] = "thh", ["Northern Tepehuan"] = "ntp", ["Northern Thai"] = "nod", ["Northern Tidong"] = "ntd", ["Northern Tlaxiaco Mixtec"] = "xtn", ["Northern Toussian"] = "tsp", ["Northern Tujia"] = "tji", ["Northern Tutchone"] = "ttm", ["Northern Valley Yokuts"] = "nai-nvy", ["Northern Yukaghir"] = "ykg", ["Northwest Alaska Inupiatun"] = "esk", ["Northwest Gbaya"] = "gya", ["Northwest Maidu"] = "mjd", ["Northwest Oaxaca Mixtec"] = "mxa", ["Northwest Pashayi"] = "glh", ["Northwestern Dinka"] = "diw", ["Northwestern Fars"] = "faz", ["Northwestern Ojibwa"] = "ojb", ["Northwestern Tamang"] = "tmk", ["Norwegian"] = "no", ["Norwegian Bokmål"] = "nb", ["Norwegian Nynorsk"] = "nn", ["Norwegian Sign Language"] = "nsl", ["Notre"] = "bly", ["Notsi"] = "ncf", ["Nottoway"] = "ntw", ["Nottoway-Meherrin"] = "nwy", ["Novial"] = "nov", ["Noxilo"] = "art-nox", ["Noy"] = "noy", ["Nsari"] = "asj", ["Nsenga"] = "nse", ["Nshi"] = "nsc", ["Nsong"] = "soo", ["Nsongo"] = "nsx", ["Ntcham"] = "bud", ["Ntomba"] = "nto", ["Ntra'ngith"] = "dgt", ["Nubaca"] = "baf", ["Nubi"] = "kcn", ["Nuer"] = "nus", ["Nuguria"] = "nur", ["Nuk"] = "noc", ["Nukak Makú"] = "mbr", ["Nukna"] = "klt", ["Nukuini"] = "nuc", ["Nukumanu"] = "nuq", ["Nukunu"] = "nnv", ["Nukunul"] = "xnu", ["Nukuoro"] = "nkr", ["Numana"] = "nbr", ["Numanggang"] = "nop", ["Numbami"] = "sij", ["Nume"] = "tgs", ["Numee"] = "kdk", ["Numidian"] = "nxm", ["Nung"] = "nut", ["Nungali"] = "nug", ["Nunggubuyu"] = "nuy", ["Nungon"] = "paa-nun", ["Nungu"] = "rin", ["Nupbikha"] = "npb", ["Nupe"] = "nup", ["Nusa Laut"] = "nul", ["Nusu"] = "nuf", ["Nutabe"] = "cba-nut", ["Nyabwa"] = "nwb", ["Nyah Kur"] = "cbn", ["Nyaheun"] = "nev", ["Nyakyusa"] = "nyy", ["Nyali"] = "nlj", ["Nyam"] = "nmi", ["Nyamal"] = "nly", ["Nyambo"] = "now", ["Nyamusa-Molo"] = "nwm", ["Nyamwanga"] = "mwn", ["Nyamwezi"] = "nym", ["Nyaneka"] = "nyk", ["Nyang'i"] = "nyp", ["Nyanga (Congo)"] = "nyj", ["Nyanga (Togo)"] = "ayg", ["Nyanga-li"] = "nyc", ["Nyangatom"] = "nnj", ["Nyangbo"] = "nyb", ["Nyangga"] = "nny", ["Nyangumarta"] = "nna", ["Nyankole"] = "nyn", ["Nyarafolo Senoufo"] = "sev", ["Nyaturu"] = "rim", ["Nyaw"] = "nyw", ["Nyawaygi"] = "nyt", ["Nyemba"] = "nba", ["Nyengo"] = "nye", ["Nyenkha"] = "neh", ["Nyeu"] = "nyl", ["Nyigina"] = "nyh", ["Nyiha"] = "nih", ["Nyika"] = "nkt", ["Nyimang"] = "nyi", ["Nyindrou"] = "lid", ["Nyindu"] = "nyg", ["Nyishi"] = "njz", ["Nyiyaparli"] = "xny", ["Nyokon"] = "nvo", ["Nyole (Kenya)"] = "nyd", ["Nyole (Uganda)"] = "nuj", ["Nyong"] = "muo", ["Nyoro"] = "nyo", ["Nyulnyul"] = "nyv", ["Nyunga"] = "nys", ["Nyungwe"] = "nyu", ["Nyâlayu"] = "yly", ["Nzadi"] = "nzd", ["Nzakambay"] = "nzy", ["Nzakara"] = "nzk", ["Nzanyi"] = "nja", ["Nzima"] = "nzi", ["Ná-Meo"] = "neo", ["Nüpode Huitoto"] = "hux", ["Nǀuu"] = "ngh", ["O'chi'chi'"] = "xoc", ["O'du"] = "tyh", ["O'odham"] = "ood", ["Obanliku"] = "bzy", ["Obispeño"] = "obi", ["Oblo"] = "obl", ["Obo Manobo"] = "obo", ["Obokuitai"] = "afz", ["Obolo"] = "ann", ["Obulom"] = "obu", ["Ocaina"] = "oca", ["Occitan"] = "oc", ["Ocotepec Mixtec"] = "mie", ["Ocotlán Zapotec"] = "zac", ["Od"] = "odk", ["Odiai"] = "bhf", ["Odoodee"] = "kkc", ["Odual"] = "odu", ["Odut"] = "oda", ["Ofayé"] = "opy", ["Ofo"] = "ofo", ["Ogbah"] = "ogc", ["Ogbia"] = "ogb", ["Ogbogolo"] = "ogg", ["Ogbronuagum"] = "ogu", ["Ogea"] = "eri", ["Oirata"] = "oia", ["Ojibwe"] = "oj", ["Ojitlán Chinantec"] = "chj", ["Okanagan"] = "oka", ["Oki-No-Erabu"] = "okn", ["Okiek"] = "oki", ["Okinawan"] = "ryu", ["Oko-Eni-Osayen"] = "oks", ["Oko-Juwoi"] = "okj", ["Okobo"] = "okb", ["Okodia"] = "okd", ["Okolod"] = "kqv", ["Okpamheri"] = "opa", ["Okpe (Northwestern Edo)"] = "okx", ["Okpe (Southwestern Edo)"] = "oke", ["Okpela"] = "atg", ["Oksapmin"] = "opm", ["Oku"] = "oku", ["Okwanuchu"] = "nai-okw", ["Old Anatolian Turkish"] = "trk-oat", ["Old Armenian"] = "xcl", ["Old Avar"] = "oav", ["Old Bengali"] = "inc-obn", ["Old Breton"] = "obt", ["Old Burmese"] = "obr", ["Old Catalan"] = "roa-oca", ["Old Chinese"] = "och", ["Old Church Slavonic"] = "cu", ["Old Cornish"] = "oco", ["Old Czech"] = "zlw-ocs", ["Old Danish"] = "gmq-oda", ["Old Dutch"] = "odt", ["Old East Slavic"] = "orv", ["Old English"] = "ang", ["Old French"] = "fro", ["Old Frisian"] = "ofs", ["Old Galician-Portuguese"] = "roa-opt", ["Old Georgian"] = "oge", ["Old Gujarati"] = "inc-ogu", ["Old High German"] = "goh", ["Old Hindi"] = "inc-ohi", ["Old Hungarian"] = "ohu", ["Old Irish"] = "sga", ["Old Japanese"] = "ojp", ["Old Javanese"] = "kaw", ["Old Kamta"] = "inc-ork", ["Old Kannada"] = "dra-okn", ["Old Kentish Sign Language"] = "okl", ["Old Khmer"] = "okz", ["Old Komi"] = "urj-koo", ["Old Korean"] = "oko", ["Old Leonese"] = "roa-ole", ["Old Lithuanian"] = "olt", ["Old Manipuri"] = "omp", ["Old Marathi"] = "omr", ["Old Median"] = "xme-old", ["Old Mon"] = "omx", ["Old Norse"] = "non", ["Old Novgorodian"] = "zle-ono", ["Old Nubian"] = "onw", ["Old Occitan"] = "pro", ["Old Oriya"] = "inc-oor", ["Old Ossetic"] = "oos", ["Old Persian"] = "peo", ["Old Polish"] = "zlw-opl", ["Old Prussian"] = "prg", ["Old Punjabi"] = "inc-opa", ["Old Ruthenian"] = "zle-ort", ["Old Saxon"] = "osx", ["Old South Arabian"] = "sem-srb", ["Old Spanish"] = "osp", ["Old Sundanese"] = "osn", ["Old Swedish"] = "gmq-osw", ["Old Tamil"] = "oty", ["Old Tati"] = "xme-ott", ["Old Telugu"] = "dra-ote", ["Old Tibetan"] = "otb", ["Old Tupi"] = "tpw", ["Old Turkic"] = "otk", ["Old Uyghur"] = "oui", ["Old Welsh"] = "owl", ["Olekha"] = "ole", ["Ollari"] = "gdb", ["Olo"] = "ong", ["Oloma"] = "olm", ["Olrat"] = "olr", ["Olu'bo"] = "lul", ["Olukumi"] = "ulb", ["Olulumo-Ikom"] = "iko", ["Oluta Popoluca"] = "plo", ["Olutsotso"] = "lto", ["Omagua"] = "omg", ["Omaha-Ponca"] = "oma", ["Omani Arabic"] = "acx", ["Omba"] = "omb", ["Ombamba"] = "mbm", ["Ombo"] = "oml", ["Ometepec Nahuatl"] = "nht", ["Omi"] = "omi", ["Omok"] = "omk", ["Omotik"] = "omt", ["Omurano"] = "omu", ["Oneida"] = "one", ["Ong"] = "oog", ["Ongota"] = "bxe", ["Onin"] = "oni", ["Onjob"] = "onj", ["Ono"] = "ons", ["Onobasulu"] = "onn", ["Onondaga"] = "ono", ["Ontenu"] = "ont", ["Ontong Java"] = "ojv", ["Oorlams"] = "oor", ["Opao"] = "opo", ["Opata"] = "opt", ["Opuuo"] = "lgn", ["Opón"] = "sai-opo", ["Oraon Sadri"] = "sdr", ["Orejón"] = "ore", ["Oring"] = "org", ["Oriya"] = "or", ["Orizaba Nahuatl"] = "nlv", ["Orléanais"] = "roa-orl", ["Ormu"] = "orz", ["Ormuri"] = "oru", ["Oro"] = "orx", ["Oro Win"] = "orw", ["Oroch"] = "oac", ["Oroha"] = "ora", ["Orok"] = "oaa", ["Orokaiva"] = "okv", ["Oroko"] = "bdu", ["Orokolo"] = "oro", ["Oromo"] = "om", ["Oroqen"] = "orh", ["Orowe"] = "bpk", ["Oruma"] = "orr", ["Orya"] = "ury", ["Osage"] = "osa", ["Osamayi"] = "syx", ["Osatu"] = "ost", ["Oscan"] = "osc", ["Osing"] = "osi", ["Ososo"] = "oso", ["Ossetian"] = "os", ["Ot Danum"] = "otd", ["Otank"] = "uta", ["Oti"] = "oti", ["Otomaco"] = "sai-oto", ["Otoro"] = "otr", ["Ottawa"] = "otw", ["Ottoman Turkish"] = "ota", ["Otuke"] = "otu", ["Ouma"] = "oum", ["Oune"] = "oue", ["Owa"] = "stn", ["Owenia"] = "wsr", ["Owiniga"] = "owi", ["Oy"] = "oyb", ["Oya'oya"] = "oyy", ["Oyda"] = "oyd", ["Ozolotepec Zapotec"] = "zao", ["Ozumacín Chinantec"] = "chz", ["Pa"] = "ppt", ["Pa Di"] = "pdi", ["Pa'a"] = "pqa", ["Pa'o Karen"] = "blk", ["Pa-Hng"] = "pha", ["Paama"] = "pma", ["Paasaal"] = "sig", ["Pacahuara"] = "pcp", ["Pacoh"] = "pac", ["Padoe"] = "pdo", ["Paelignian"] = "pgn", ["Paeonian"] = "ine-pae", ["Pagi"] = "pgi", ["Pagibete"] = "pae", ["Pagu"] = "pgu", ["Pahanan Agta"] = "apf", ["Pahari-Potwari"] = "phr", ["Pahi"] = "lgt", ["Pahlavani"] = "phv", ["Pai Tavytera"] = "pta", ["Pai-lang"] = "tbq-plg", ["Paicî"] = "pri", ["Paikoneka"] = "awd-pai", ["Paipai"] = "ppi", ["Paisaci Prakrit"] = "inc-psc", ["Paite"] = "pck", ["Paiwan"] = "pwn", ["Pajapan Nahuatl"] = "nhp", ["Pak-Tong"] = "pkg", ["Pakanha"] = "pkn", ["Pakistan Sign Language"] = "pks", ["Paku"] = "pku", ["Paku Karen"] = "kpp", ["Pal"] = "abw", ["Palaic"] = "plq", ["Palaka Senoufo"] = "plr", ["Palantla Chinantec"] = "cpa", ["Palauan"] = "pau", ["Palawan Batak"] = "bya", ["Paleni"] = "pnl", ["Palenquero"] = "pln", ["Palewyami"] = "nai-ply", ["Pali"] = "pi", ["Palikur"] = "plu", ["Paliyan"] = "pcf", ["Pallanganmiddang"] = "pmd", ["Palor"] = "fap", ["Palta"] = "sai-pal", ["Palu'e"] = "ple", ["Paluan"] = "plz", ["Palya Bareli"] = "bpx", ["Pam"] = "pmn", ["Pambia"] = "pmb", ["Pamigua"] = "sai-pam", ["Pamlico"] = "pmk", ["Pamona"] = "pmf", ["Pamosu"] = "hih", ["Pamplona Atta"] = "att", ["Pana (Central Africa)"] = "pnz", ["Pana (West Africa)"] = "pnq", ["Panamanian Sign Language"] = "lsp", ["Panamint"] = "par", ["Panare"] = "pbh", ["Panará"] = "kre", ["Panasuan"] = "psn", ["Panawa"] = "pwb", ["Pancana"] = "pnp", ["Panchpargania"] = "tdb", ["Pande"] = "bkj", ["Pangasinan"] = "pag", ["Pangseng"] = "pgs", ["Pangutaran Sama"] = "slm", ["Pangwa"] = "pbr", ["Pangwali"] = "pgg", ["Panim"] = "pnr", ["Paniya"] = "pcg", ["Pankararé"] = "pax", ["Pankararú"] = "paz", ["Pankhu"] = "pkh", ["Pannei"] = "pnc", ["Panobo"] = "pno", ["Panyjima"] = "pnw", ["Panzaleo"] = "sai-pnz", ["Pao"] = "ppa", ["Papantla Totonac"] = "top", ["Papapana"] = "ppn", ["Papar"] = "dpp", ["Papasena"] = "pas", ["Papel"] = "pbo", ["Papi"] = "ppe", ["Papiamentu"] = "pap", ["Papitalai"] = "pat", ["Papora"] = "ppu", ["Papua New Guinean Sign Language"] = "pgz", ["Papuan Malay"] = "pmy", ["Papuma"] = "ppm", ["Para Naga"] = "pzn", ["Parachi"] = "prc", ["Paraguayan Guaraní"] = "gug", ["Paraguayan Sign Language"] = "pys", ["Parakanã"] = "pak", ["Paranan"] = "prf", ["Paranawát"] = "paf", ["Paratió"] = "sai-par", ["Paraujano"] = "pbg", ["Parauk"] = "prk", ["Parawen"] = "prw", ["Pardhan"] = "pch", ["Pardhi"] = "pcl", ["Pare"] = "asa", ["Pareci"] = "pab", ["Paredarerme"] = "xpd", ["Parenga"] = "pcj", ["Parkari Koli"] = "kvx", ["Parthian"] = "xpr", ["Parya"] = "paq", ["Pará Arára"] = "aap", ["Pará Gavião"] = "gvp", ["Pashto"] = "ps", ["Pasi"] = "psq", ["Pass Valley Yali"] = "yac", ["Passé"] = "awd-pas", ["Patagón"] = "sai-ptg", ["Patamona"] = "pbc", ["Patani"] = "ptn", ["Pataxó Hã-Ha-Hãe"] = "pth", ["Patep"] = "ptp", ["Pathiya"] = "pty", ["Patpatar"] = "gfk", ["Pattani"] = "lae", ["Pattani Malay"] = "mfa", ["Pattapu"] = "ptq", ["Patwin"] = "pwi", ["Paulohi"] = "plh", ["Paumarí"] = "pad", ["Paunaca"] = "pnk", ["Pauri Bareli"] = "bfb", ["Pauserna"] = "psm", ["Pawaia"] = "pwa", ["Pawnee"] = "paw", ["Payaguá"] = "sai-pyg", ["Paynamar"] = "pmr", ["Pazeh"] = "pzh", ["Pe"] = "pai", ["Pear"] = "pcb", ["Pech"] = "pay", ["Pecheneg"] = "xpc", ["Peerapper"] = "xpw", ["Peere"] = "pfe", ["Pei"] = "ppq", ["Pekal"] = "pel", ["Pela"] = "bxd", ["Pele-Ata"] = "ata", ["Pemon"] = "aoc", ["Penang Sign Language"] = "psg", ["Penchal"] = "pek", ["Pendau"] = "ums", ["Pengo"] = "peg", ["Pennsylvania German"] = "pdc", ["Penobscot"] = "aaq", ["Penrhyn"] = "pnh", ["Pentlatch"] = "ptw", ["Perai"] = "wet", ["Peranakan Indonesian"] = "pea", ["Perema"] = "wom", ["Pericú"] = "nai-per", ["Pero"] = "pip", ["फ़ारसी"] = "fa", ["Persian Sign Language"] = "psc", ["Peruvian Sign Language"] = "prl", ["Petapa Zapotec"] = "zpe", ["Petats"] = "pex", ["Petjo"] = "pey", ["Peñoles Mixtec"] = "mil", ["Phai"] = "prt", ["Phake"] = "phk", ["Phala"] = "ypa", ["Phalura"] = "phl", ["Phana'"] = "phq", ["Phangduwali"] = "phw", ["Phende"] = "pem", ["Philippine Sign Language"] = "psp", ["Philistine"] = "und-phi", ["Phimbi"] = "phm", ["Phoenician"] = "phn", ["Phola"] = "ypg", ["Pholo"] = "yip", ["Phom"] = "nph", ["Phong-Kniang"] = "pnx", ["Phrae Pwo"] = "kjt", ["Phrygian"] = "xpg", ["Phu Thai"] = "pht", ["Phuan"] = "phu", ["Phudagi"] = "phd", ["Phuie"] = "pug", ["Phukha"] = "phh", ["Phuma"] = "ypm", ["Phunoi"] = "pho", ["Phuong"] = "phg", ["Phupa"] = "ypp", ["Phupha"] = "yph", ["Phuthi"] = "bnt-phu", ["Phuza"] = "ypz", ["Piamatsina"] = "ptr", ["Piame"] = "pin", ["Piapoco"] = "pio", ["Piaroa"] = "pid", ["Picard"] = "pcd", ["Pichinglis"] = "fpe", ["Pichis Ashéninka"] = "cpu", ["Pictish"] = "xpi", ["Picuris"] = "nai-pic", ["Pidgin Delaware"] = "dep", ["Pidgin Iha"] = "ihb", ["Pidgin Onin"] = "onx", ["Piedmontese"] = "pms", ["Pijao"] = "pij", ["Pije"] = "piz", ["Pijin"] = "pis", ["Pilagá"] = "plg", ["Pileni"] = "piv", ["Pima Bajo"] = "pia", ["Pimbwe"] = "piw", ["Pinai-Hagahai"] = "pnn", ["Pingelapese"] = "pif", ["Pini"] = "pii", ["Pinigura"] = "pnv", ["Pinjarup"] = "pnj", ["Pinji"] = "pic", ["Pinotepa Nacional Mixtec"] = "mio", ["Pintiini"] = "pti", ["Pintupi-Luritja"] = "piu", ["Pinyin"] = "pny", ["Pipil"] = "ppl", ["Pirahã"] = "myp", ["Piratapuyo"] = "pir", ["Pirlatapa"] = "bxi", ["Piro"] = "pie", ["Pirriya"] = "xpa", ["Pisabo"] = "pig", ["Pisaflores Tepehua"] = "tpp", ["Piscataway"] = "psy", ["Pisidian"] = "xps", ["Pitcairn-Norfolk"] = "pih", ["Pite Sami"] = "sje", ["Piti"] = "pcn", ["Pitjantjatjara"] = "pjt", ["Pitta-Pitta"] = "pit", ["Piu"] = "pix", ["Piya-Kwonci"] = "piy", ["Plains Apache"] = "apk", ["Plains Cree"] = "crk", ["Plains Indian Sign Language"] = "psd", ["Plains Miwok"] = "pmw", ["Plapo Krumen"] = "ktj", ["Plautdietsch"] = "pdt", ["Playero"] = "gob", ["Pnar"] = "pbv", ["Pochuri Naga"] = "npo", ["Pochutec"] = "xpo", ["Podoko"] = "pbi", ["Pogolo"] = "poy", ["Pohnpeian"] = "pon", ["Poitevin-Saintongeais"] = "roa-poi", ["Pokangá"] = "pok", ["Poke"] = "pof", ["Pol"] = "pmm", ["Polabian"] = "pox", ["Polci"] = "plj", ["Polish"] = "pl", ["Polish Sign Language"] = "pso", ["Polonombauk"] = "plb", ["Pom"] = "pmo", ["Ponam"] = "ncc", ["Pongu"] = "png", ["Ponosakan"] = "pns", ["Pontic Greek"] = "pnt", ["Ponyo"] = "npg", ["Poqomam"] = "poc", ["Poqomchi'"] = "poh", ["Porohanon"] = "prh", ["Port Sandwich"] = "psw", ["Port Sorell"] = "xpl", ["Port Vato"] = "ptv", ["Portuguese"] = "pt", ["Portuguese Sign Language"] = "psr", ["Potawatomi"] = "pot", ["Potiguára"] = "pog", ["Poumei Naga"] = "pmx", ["Pouye"] = "bye", ["Powari"] = "pwr", ["Powhatan"] = "pim", ["Poyanáwa"] = "pyn", ["Prakrit"] = "inc-pra", ["Prasuni"] = "prn", ["Primitive Irish"] = "pgl", ["Principense"] = "pre", ["Proto-Abkhaz-Abaza"] = "cau-abz-pro", ["Proto-Afroasiatic"] = "afa-pro", ["Proto-Albanian"] = "sqj-pro", ["Proto-Algic"] = "aql-pro", ["Proto-Algonquian"] = "alg-pro", ["Proto-Amuesha-Chamicuro"] = "awd-amc-pro", ["Proto-Anatolian"] = "ine-ana-pro", ["Proto-Apachean"] = "apa-pro", ["Proto-Arawa"] = "auf-pro", ["Proto-Arawak"] = "awd-pro", ["Proto-Armenian"] = "hyx-pro", ["Proto-Arnhem"] = "aus-arn-pro", ["Proto-Aroid"] = "omv-aro-pro", ["Proto-Aslian"] = "mkh-asl-pro", ["Proto-Atayalic"] = "map-ata-pro", ["Proto-Athabaskan"] = "ath-pro", ["Proto-Atlantic-Congo"] = "alv-pro", ["Proto-Austroasiatic"] = "aav-pro", ["Proto-Austronesian"] = "map-pro", ["Proto-Avaro-Andian"] = "cau-ava-pro", ["Proto-Bahnaric"] = "mkh-ban-pro", ["Proto-Balto-Slavic"] = "ine-bsl-pro", ["Proto-Bantoid"] = "nic-bod-pro", ["Proto-Bantu"] = "bnt-pro", ["Proto-Basque"] = "euq-pro", ["Proto-Batak"] = "btk-pro", ["Proto-Be"] = "qfa-onb-pro", ["Proto-Be-Tai"] = "qfa-bet-pro", ["Proto-Benue-Congo"] = "nic-bco-pro", ["Proto-Berber"] = "ber-pro", ["Proto-Bodo-Garo"] = "tbq-bdg-pro", ["Proto-Bongo-Bagirmi"] = "csu-bba-pro", ["Proto-Boran"] = "sai-bor-pro", ["Proto-Brythonic"] = "cel-bry-pro", ["Proto-Bua"] = "alv-bua-pro", ["Proto-Bungku-Tolaki"] = "poz-btk-pro", ["Proto-Caddoan"] = "cdd-pro", ["Proto-Cangin"] = "alv-cng-pro", ["Proto-Cariban"] = "sai-car-pro", ["Proto-Celtic"] = "cel-pro", ["Proto-Central Chadic"] = "cdc-cbm-pro", ["Proto-Central Indo-Aryan"] = "inc-cen-pro", ["Proto-Central Jê"] = "sai-cje-pro", ["Proto-Central New South Wales"] = "aus-cww-pro", ["Proto-Central Sudanic"] = "csu-pro", ["Proto-Central Togo"] = "alv-gtm-pro", ["Proto-Central-Eastern Malayo-Polynesian"] = "poz-cet-pro", ["Proto-Cerrado"] = "sai-cer-pro", ["Proto-Chadic"] = "cdc-pro", ["Proto-Chamic"] = "cmc-pro", ["Proto-Chatino"] = "omq-cha-pro", ["Proto-Chibchan"] = "cba-pro", ["Proto-Chimakuan"] = "chi-pro", ["Proto-Chinookan"] = "nai-ckn-pro", ["Proto-Chukotko-Kamchatkan"] = "qfa-cka-pro", ["Proto-Chumash"] = "nai-chu-pro", ["Proto-Circassian"] = "cau-cir-pro", ["Proto-Cupan"] = "azc-cup-pro", ["Proto-Cushitic"] = "cus-pro", ["Proto-Daju"] = "sdv-daj-pro", ["Proto-Daly"] = "aus-dal-pro", ["Proto-Dargwa"] = "cau-drg-pro", ["Proto-Dizoid"] = "omv-diz-pro", ["Proto-Dravidian"] = "dra-pro", ["Proto-Eastern Jebel"] = "sdv-eje-pro", ["Proto-Eastern Malayo-Polynesian"] = "pqe-pro", ["Proto-Eastern Oti-Volta"] = "nic-eov-pro", ["Proto-Eastern Polynesian"] = "poz-pep-pro", ["Proto-Edekiri"] = "alv-edk-pro", ["Proto-Edoid"] = "alv-edo-pro", ["Proto-Eskimo"] = "esx-esk-pro", ["Proto-Eskimo-Aleut"] = "esx-pro", ["Proto-Fali"] = "alv-fli-pro", ["Proto-Finnic"] = "urj-fin-pro", ["Proto-Gbe"] = "alv-gbe-pro", ["Proto-Georgian-Zan"] = "ccs-gzn-pro", ["Proto-Germanic"] = "gem-pro", ["Proto-Grassfields"] = "nic-grf-pro", ["Proto-Great Andamanese"] = "qfa-adm-pro", ["Proto-Guang"] = "alv-gng-pro", ["Proto-Gur"] = "nic-gur-pro", ["Proto-Gurunsi"] = "nic-gns-pro", ["Proto-Halmahera-Cenderawasih"] = "poz-hce-pro", ["Proto-Heiban"] = "alv-hei-pro", ["Proto-Hellenic"] = "grk-pro", ["Proto-Highland East Cushitic"] = "cus-hec-pro", ["Proto-Hlai"] = "qfa-lic-pro", ["Proto-Hmong"] = "hmn-pro", ["Proto-Hmong-Mien"] = "hmx-pro", ["Proto-Hrusish"] = "sit-hrs-pro", ["Proto-Huitoto-Ocaina"] = "sai-hoc-pro", ["Proto-Hurro-Urartian"] = "qfa-hur-pro", ["Proto-Idomoid"] = "alv-ido-pro", ["Proto-Igboid"] = "alv-igb-pro", ["Proto-Ijoid"] = "ijo-pro", ["Proto-Indo-Aryan"] = "inc-pro", ["Proto-Indo-European"] = "ine-pro", ["Proto-Indo-Iranian"] = "iir-pro", ["Proto-Inuit"] = "esx-inu-pro", ["Proto-Iranian"] = "ira-pro", ["Proto-Iroquoian"] = "iro-pro", ["Proto-Italic"] = "itc-pro", ["Proto-Iwaidjan"] = "aus-wdj-pro", ["Proto-Japonic"] = "jpx-pro", ["Proto-Jukunoid"] = "nic-jkn-pro", ["Proto-Jê"] = "sai-jee-pro", ["Proto-Kadu"] = "qfa-kad-pro", ["Proto-Kalamian"] = "phi-kal-pro", ["Proto-Kalapuyan"] = "nai-klp-pro", ["Proto-Kam-Sui"] = "qfa-kms-pro", ["Proto-Kampa"] = "awd-kmp-pro", ["Proto-Karen"] = "kar-pro", ["Proto-Kartvelian"] = "ccs-pro", ["Proto-Katuic"] = "mkh-kat-pro", ["Proto-Kham"] = "sit-kha-pro", ["Proto-Khasian"] = "aav-khs-pro", ["Proto-Khmeric"] = "mkh-kmr-pro", ["Proto-Khmuic"] = "mkh-khm-pro", ["Proto-Khoe"] = "khi-kho-pro", ["Proto-Koman"] = "ssa-kom-pro", ["Proto-Komisenian"] = "ira-kms-pro", ["Proto-Koreanic"] = "qfa-kor-pro", ["Proto-Kra"] = "qfa-kra-pro", ["Proto-Kra-Dai"] = "qfa-tak-pro", ["Proto-Kru"] = "kro-pro", ["Proto-Kuki-Chin"] = "tbq-kuk-pro", ["Proto-Kuliak"] = "ssa-klk-pro", ["Proto-Kurdish"] = "ku-pro", ["Proto-Kwa"] = "alv-kwa-pro", ["Proto-Lalo"] = "tbq-lal-pro", ["Proto-Lampungic"] = "poz-lgx-pro", ["Proto-Lezghian"] = "cau-lzg-pro", ["Proto-Lolo-Burmese"] = "tbq-lob-pro", ["Proto-Loloish"] = "tbq-lol-pro", ["Proto-Lower Cross River"] = "nic-lcr-pro", ["Proto-Luish"] = "sit-luu-pro", ["Proto-Maidun"] = "nai-mdu-pro", ["Proto-Malayic"] = "poz-mly-pro", ["Proto-Malayo-Chamic"] = "poz-mcm-pro", ["Proto-Malayo-Polynesian"] = "poz-pro", ["Proto-Malayo-Sumbawan"] = "poz-msa-pro", ["Proto-Mande"] = "dmn-pro", ["Proto-Mangbetu"] = "csu-maa-pro", ["Proto-Mari"] = "chm-pro", ["Proto-Masa"] = "cdc-mas-pro", ["Proto-Mayan"] = "myn-pro", ["Proto-Mazatec"] = "omq-maz-pro", ["Proto-Medo-Parthian"] = "ira-mpr-pro", ["Proto-Mien"] = "hmx-mie-pro", ["Proto-Min"] = "zhx-min-pro", ["Proto-Mixe-Zoque"] = "nai-miz-pro", ["Proto-Mixtec"] = "omq-mxt-pro", ["Proto-Mixtecan"] = "omq-mix-pro", ["Proto-Mon-Khmer"] = "mkh-pro", ["Proto-Mongolic"] = "xgn-pro", ["Proto-Monic"] = "mkh-mnc-pro", ["Proto-Mordvinic"] = "urj-mdv-pro", ["Proto-Mumuye"] = "alv-mum-pro", ["Proto-Munda"] = "mun-pro", ["Proto-Munji-Yidgha"] = "ira-mny-pro", ["Proto-Muskogean"] = "nai-mus-pro", ["Proto-Na-Dene"] = "xnd-pro", ["Proto-Nahuan"] = "azc-nah-pro", ["Proto-Nakh"] = "cau-nkh-pro", ["Proto-Nawiki"] = "awd-nwk-pro", ["Proto-Nguni"] = "bnt-ngu-pro", ["Proto-Nicobarese"] = "aav-nic-pro", ["Proto-Niger-Congo"] = "nic-pro", ["Proto-Nilo-Saharan"] = "ssa-pro", ["Proto-Nilotic"] = "sdv-nil-pro", ["Proto-Norse"] = "gmq-pro", ["Proto-North Caucasian"] = "ccn-pro", ["Proto-North Halmahera"] = "paa-nha-pro", ["Proto-North Iroquoian"] = "iro-nor-pro", ["Proto-North Sarawak"] = "poz-swa-pro", ["Proto-Northeast Caucasian"] = "cau-nec-pro", ["Proto-Northern Jê"] = "sai-nje-pro", ["Proto-Northwest Caucasian"] = "cau-nwc-pro", ["Proto-Nubian"] = "nub-pro", ["Proto-Nuclear Polynesian"] = "poz-pnp-pro", ["Proto-Numic"] = "azc-num-pro", ["Proto-Nupoid"] = "alv-nup-pro", ["Proto-Nuristani"] = "iir-nur-pro", ["Proto-Nyima"] = "sdv-nyi-pro", ["Proto-Nyulnyulan"] = "aus-nyu-pro", ["Proto-Oceanic"] = "poz-oce-pro", ["Proto-Ogoni"] = "nic-ogo-pro", ["Proto-Omotic"] = "omv-pro", ["Proto-Ongan"] = "qfa-ong-pro", ["Proto-Ossetic"] = "os-pro", ["Proto-Oti-Volta"] = "nic-ovo-pro", ["Proto-Oto-Manguean"] = "omq-pro", ["Proto-Oto-Pamean"] = "omq-otp-pro", ["Proto-Otomi"] = "oto-otm-pro", ["Proto-Otomian"] = "oto-pro", ["Proto-Pakanic"] = "mkh-pkn-pro", ["Proto-Palaungic"] = "mkh-pal-pro", ["Proto-Pama-Nyungan"] = "aus-pam-pro", ["Proto-Paresi-Waura"] = "awd-prw-pro", ["Proto-Pathan"] = "ira-pat-pro", ["Proto-Pearic"] = "mkh-pea-pro", ["Proto-Permic"] = "urj-prm-pro", ["Proto-Philippine"] = "phi-pro", ["Proto-Plateau"] = "nic-plt-pro", ["Proto-Plateau Penutian"] = "nai-plp-pro", ["Proto-Pnar-Khasi-Lyngngam"] = "aav-pkl-pro", ["Proto-Polynesian"] = "poz-pol-pro", ["Proto-Pomeranian"] = "zlw-pom-pro", ["Proto-Pomo"] = "nai-pom-pro", ["Proto-Rukai"] = "dru-pro", ["Proto-Ryukyuan"] = "jpx-ryu-pro", ["Proto-Saka"] = "xsc-sak-pro", ["Proto-Saka-Wakhi"] = "xsc-skw-pro", ["Proto-Salish"] = "sal-pro", ["Proto-Samic"] = "smi-pro", ["Proto-Samoyedic"] = "syd-pro", ["Proto-Sanglechi-Ishkashimi"] = "ira-sgi-pro", ["Proto-Sara"] = "csu-sar-pro", ["Proto-Scythian"] = "xsc-pro", ["Proto-Selkup"] = "sel-pro", ["Proto-Semitic"] = "sem-pro", ["Proto-Shughni-Roshani"] = "ira-shr-pro", ["Proto-Shughni-Yazghulami"] = "ira-shy-pro", ["Proto-Shughni-Yazghulami-Munji"] = "ira-sym-pro", ["Proto-Sino-Tibetan"] = "sit-pro", ["Proto-Siouan"] = "sio-pro", ["Proto-Siouan-Catawban"] = "nai-sca-pro", ["Proto-Slavic"] = "sla-pro", ["Proto-Sogdic"] = "ira-sgc-pro", ["Proto-Somaloid"] = "cus-som-pro", ["Proto-Songhay"] = "son-pro", ["Proto-Sotho-Tswana"] = "bnt-sts-pro", ["Proto-South Cushitic"] = "cus-sou-pro", ["Proto-South Sulawesi"] = "poz-ssw-pro", ["Proto-Southern Jê"] = "sai-sje-pro", ["Proto-Southwestern Tai"] = "tai-swe-pro", ["Proto-Sunda-Sulawesi"] = "poz-sus-pro", ["Proto-Ta-Arawak"] = "awd-taa-pro", ["Proto-Tai"] = "tai-pro", ["Proto-Takic"] = "azc-tak-pro", ["Proto-Taman"] = "sdv-tmn-pro", ["Proto-Tani"] = "sit-tan-pro", ["Proto-Taranoan"] = "sai-tar-pro", ["Proto-Tatic"] = "xme-ttc-pro", ["Proto-Tocharian"] = "ine-toc-pro", ["Proto-Totozoquean"] = "nai-tot-pro", ["Proto-Trans-New Guinea"] = "ngf-pro", ["Proto-Trique"] = "omq-tri-pro", ["Proto-Tsezian"] = "cau-tsz-pro", ["Proto-Tsimshianic"] = "nai-tsi-pro", ["Proto-Tungusic"] = "tuw-pro", ["Proto-Tupi-Guarani"] = "tup-gua-pro", ["Proto-Tupian"] = "tup-pro", ["Proto-Turkic"] = "trk-pro", ["Proto-Ubangian"] = "nic-ubg-pro", ["Proto-Ugric"] = "urj-ugr-pro", ["Proto-Upper Cross River"] = "nic-ucr-pro", ["Proto-Uralic"] = "urj-pro", ["Proto-Utian"] = "nai-utn-pro", ["Proto-Uto-Aztecan"] = "azc-pro", ["Proto-Vietic"] = "mkh-vie-pro", ["Proto-Volta-Congo"] = "nic-vco-pro", ["Proto-Volta-Niger"] = "alv-von-pro", ["Proto-West Germanic"] = "gmw-pro", ["Proto-West Semitic"] = "sem-wes-pro", ["Proto-Western Mande"] = "dmn-mdw-pro", ["Proto-Witotoan"] = "sai-wit-pro", ["Proto-Yeniseian"] = "qfa-yen-pro", ["Proto-Yoruba"] = "alv-yor-pro", ["Proto-Yoruboid"] = "alv-yrd-pro", ["Proto-Yukaghir"] = "qfa-yuk-pro", ["Proto-Yupik"] = "ypk-pro", ["Proto-Zapotec"] = "omq-zpc-pro", ["Proto-Zapotecan"] = "omq-zap-pro", ["Proto-Zaza-Gorani"] = "ira-zgr-pro", ["Providencia Sign Language"] = "prz", ["Psikye"] = "kvj", ["Puare"] = "pux", ["Pudtol Atta"] = "atp", ["Puebla Mazatec"] = "pbm", ["Puelche"] = "pue", ["Puerto Rican Sign Language"] = "psl", ["Puimei Naga"] = "npu", ["Puinave"] = "pui", ["Puiron"] = "sit-prn", ["Pukapukan"] = "pkp", ["Pulabu"] = "pup", ["Puluwat"] = "puw", ["Puma"] = "pum", ["Pumpokol"] = "xpm", ["Pumé"] = "yae", ["Punan Aput"] = "pud", ["Punan Bah-Biau"] = "pna", ["Punan Batu"] = "pnm", ["Punan Merah"] = "puf", ["Punan Merap"] = "puc", ["Punan Tubu"] = "puj", ["Punic"] = "xpu", ["Punjabi"] = "pa", ["Punu"] = "puu", ["Puoc"] = "puo", ["Puquina"] = "puq", ["Puragi"] = "pru", ["Purari"] = "iar", ["Purepecha"] = "pua", ["Puri"] = "prr", ["Purik"] = "prx", ["Purisimeño"] = "puy", ["Puruborá"] = "pur", ["Puruhá"] = "sai-prh", ["Purukotó"] = "sai-pur", ["Purum"] = "pub", ["Putai"] = "mfl", ["Putoh"] = "put", ["Putukwam"] = "afe", ["Puxian"] = "cpx", ["Puyo-Paekche"] = "xpp", ["Puyuma"] = "pyu", ["Pwaamei"] = "pme", ["Pwapwa"] = "pop", ["Pyapun"] = "pcw", ["Pye Krumen"] = "pye", ["Pyemmairre"] = "xpb", ["Pyen"] = "pyy", ["Pykobjê"] = "sai-pyk", ["Pyu"] = "pby", ["Páez"] = "pbb", ["Pááfang"] = "pfa", ["Päri"] = "lkr", ["Pémono"] = "pev", ["Pévé"] = "lme", ["Pökoot"] = "pko", ["Q'anjob'al"] = "kjb", ["Q'eqchi"] = "kek", ["Qabiao"] = "laq", ["Qaqet"] = "byx", ["Qatabanian"] = "xqt", ["Qau"] = "gqu", ["Qila Muji"] = "ymq", ["Qimant"] = "ahg", ["Quapaw"] = "qua", ["Quebec Sign Language"] = "fcs", ["Quechua"] = "qu", ["Quenya"] = "qya", ["Querétaro Otomi"] = "otq", ["Quetzaltepec Mixe"] = "pxm", ["Queyu"] = "qvy", ["Quiavicuzas Zapotec"] = "zpj", ["Quileute"] = "qui", ["Quimbaya"] = "sai-qmb", ["Quinault"] = "qun", ["Quinigua"] = "nai-qng", ["Quinqui"] = "quq", ["Quioquitani-Quierí Zapotec"] = "ztq", ["Quiotepec Chinantec"] = "chq", ["Quiripi"] = "qyp", ["Quitemo"] = "sai-qtm", ["Rabha"] = "rah", ["Rabona"] = "sai-rab", ["Rade"] = "rad", ["Raetic"] = "xrr", ["Raga"] = "lml", ["Rahambuu"] = "raz", ["Rajah Kabunsuwan Manobo"] = "mqk", ["Rajasthani"] = "raj", ["Rajbanshi"] = "rjs", ["Raji"] = "rji", ["Rajong"] = "rjg", ["Rajput Garasia"] = "gra", ["Rakahanga-Manihiki"] = "rkh", ["Rakhine"] = "rki", ["Ralte"] = "ral", ["Rama"] = "rma", ["Ramandi"] = "tks", ["Ramanos"] = "sai-ram", ["Ramoaaina"] = "rai", ["Ramopa"] = "kjx", ["Rampi"] = "lje", ["Rana Tharu"] = "thr", ["Rang"] = "rax", ["Rangkas"] = "rgk", ["Ranglong"] = "rnl", ["Rao"] = "rao", ["Rapa"] = "ray", ["Rapa Nui"] = "rap", ["Rapoisi"] = "kyx", ["Rapting"] = "rpt", ["Rara Bakati'"] = "lra", ["Rarotongan"] = "rar", ["Rasawa"] = "rac", ["Ratagnon"] = "btn", ["Ratahan"] = "rth", ["Rathawi"] = "rtw", ["Rathwi Bareli"] = "bgd", ["Raute"] = "rau", ["Ravula"] = "yea", ["Rawa"] = "rwo", ["Rawang"] = "raw", ["Rawat"] = "jnl", ["Rawo"] = "rwa", ["Rayón Zoque"] = "zor", ["Razajerdi"] = "rat", ["Razihi"] = "rzh", ["Reang"] = "ria", ["Red Gelao"] = "gir", ["Reel"] = "atu", ["Rejang"] = "rej", ["Rejang Kayan"] = "ree", ["Reli"] = "rei", ["Rema"] = "bow", ["Rembarunga"] = "rmb", ["Rembong"] = "reb", ["Remo"] = "rem", ["Remontado Agta"] = "agv", ["Rempi"] = "rmp", ["Remun"] = "lkj", ["Rendille"] = "rel", ["Rengao"] = "ren", ["Rennellese"] = "mnv", ["Repanbitip"] = "rpn", ["Rer Bare"] = "rer", ["Rerau"] = "rea", ["Rerep"] = "pgk", ["Reshe"] = "res", ["Resígaro"] = "rgr", ["Retta"] = "ret", ["Reyesano"] = "rey", ["Rhine Franconian"] = "gmw-rfr", ["Riang"] = "ril", ["Riantana"] = "ran", ["Ribun"] = "rir", ["Rigwe"] = "iri", ["Rikbaktsa"] = "rkb", ["Rincón Zapotec"] = "zar", ["Ringgou"] = "rgu", ["Ririo"] = "rri", ["Ritarungo"] = "rit", ["Riung"] = "riu", ["Riverain Sango"] = "snj", ["Rogo"] = "rod", ["Rohingya"] = "rhg", ["Roma"] = "rmm", ["Romagnol"] = "rgn", ["Romam"] = "rmx", ["Romani"] = "rom", ["Romani Greek"] = "rge", ["Romanian"] = "ro", ["Romanian Sign Language"] = "rms", ["Romano-Serbian"] = "rsb", ["Romanova"] = "rmv", ["Romansch"] = "rm", ["Romblomanon"] = "rol", ["Rombo"] = "rof", ["Romkun"] = "rmk", ["Ron"] = "cla", ["Ronga"] = "rng", ["Rongga"] = "ror", ["Rongmei Naga"] = "nbu", ["Rongpo"] = "rnp", ["Ronji"] = "roe", ["Roon"] = "rnn", ["Roria"] = "rga", ["Roro"] = "rro", ["Rotokas"] = "roo", ["Rotuman"] = "rtm", ["Rouran"] = "xgn-rou", ["Roviana"] = "rug", ["Ruching Palaung"] = "pce", ["Rudbari"] = "rdb", ["Rufiji"] = "rui", ["Ruga"] = "ruh", ["Rukai"] = "dru", ["Rukiga"] = "cgg", ["Ruma"] = "ruz", ["Rumai Palaung"] = "rbb", ["Rumu"] = "klq", ["Runga"] = "rou", ["Rungtu"] = "rtc", ["Rungus"] = "drg", ["Rungwa"] = "rnw", ["Russenorsk"] = "crp-rsn", ["रूसी"] = "ru", ["Russian Sign Language"] = "rsl", ["Rusyn"] = "rue", ["Rutul"] = "rut", ["Ruuli"] = "ruc", ["Ruwund"] = "rnd", ["Rwa"] = "rwk", ["Rwanda-Rundi"] = "rw", ["Réunion Creole French"] = "rcf", ["S'gaw Karen"] = "ksw", ["Sa"] = "sax", ["Sa'a"] = "apb", ["Sa'ban"] = "snv", ["Sa'och"] = "scq", ["Saafi-Saafi"] = "sav", ["Saam"] = "raq", ["Saamia"] = "lsm", ["Saanich"] = "str", ["Saare"] = "uss", ["Saaroa"] = "sxr", ["Saba"] = "saa", ["Sabaean"] = "xsa", ["Sabah Bisaya"] = "bsy", ["Sabah Malay"] = "msi", ["Sabanê"] = "sae", ["Sabaot"] = "spy", ["Sabine"] = "sbv", ["Sabir"] = "pml", ["Sabu"] = "hvn", ["Sabüm"] = "sbo", ["Sacapulteco"] = "quv", ["Sadri"] = "sck", ["Saek"] = "skb", ["Saep"] = "spd", ["Safaitic"] = "sem-saf", ["Safaliba"] = "saf", ["Safeyoka"] = "apz", ["Safwa"] = "sbk", ["Sagala"] = "sbm", ["Sagalla"] = "tga", ["Sahaptin"] = "nai-spt", ["Saho"] = "ssy", ["Sahu"] = "saj", ["Saisiyat"] = "xsy", ["Sajau Basap"] = "sjb", ["Sakachep"] = "sch", ["Sakam"] = "skm", ["Sakao"] = "sku", ["Sakata"] = "skt", ["Sake"] = "sak", ["Sakirabiá"] = "skf", ["Sakizaya"] = "szy", ["Sala"] = "shq", ["Salampasu"] = "slx", ["Salar"] = "slr", ["Salas"] = "sgu", ["Salchuq"] = "slq", ["Saleman"] = "sau", ["Saliba (Colombia)"] = "slc", ["Saliba (New Guinea)"] = "sbe", ["Salinan"] = "sln", ["Salt-Yui"] = "sll", ["Saluan"] = "loe", ["Salumá"] = "slj", ["Salvadoran Lenca"] = "nai-sln", ["Salvadoran Sign Language"] = "esn", ["Sam"] = "snx", ["Sama"] = "smd", ["Samaritan Aramaic"] = "sam", ["Samaritan Hebrew"] = "smp", ["Samarokena"] = "tmj", ["Samatao"] = "ysd", ["Samba"] = "smx", ["Sambali"] = "xsb", ["Sambalpuri"] = "spv", ["Sambe"] = "xab", ["Samberigi"] = "ssx", ["Samburu"] = "saq", ["Samei"] = "smh", ["Samo"] = "smq", ["Samoan"] = "sm", ["Samoan Plantation Pidgin"] = "cpe-spp", ["Samogitian"] = "sgs", ["Samosa"] = "swm", ["Sampang"] = "rav", ["Samre"] = "sxm", ["Samtao"] = "stu", ["Samvedi"] = "smv", ["San Agustín Mixtepec Zapotec"] = "ztm", ["San Baltazar Loxicha Zapotec"] = "zpx", ["San Felipe Otlaltepec Popoloca"] = "pow", ["San Jerónimo Tecóatl Mazatec"] = "maa", ["San Juan Atzingo Popoloca"] = "poe", ["San Juan Colorado Mixtec"] = "mjc", ["San Juan Guelavía Zapotec"] = "zab", ["San Juan Quiahije Chatino"] = "ctp-san", ["San Juan Teita Mixtec"] = "xtj", ["San Luís Temalacayuca Popoloca"] = "pps", ["San Marcos Tlalcoyalco Popoloca"] = "pls", ["San Martín Itunyoso Triqui"] = "trq", ["San Miguel Creole French"] = "scf", ["San Miguel Piedras Mixtec"] = "xtp", ["San Miguel el Grande Mixtec"] = "mig", ["San Pablo Güilá Zapotec"] = "ztu", ["San Pedro Amuzgos Amuzgo"] = "azg", ["San Pedro Quiatoni Zapotec"] = "zpf", ["San Vicente Coatlán Zapotec"] = "zpt", ["Sanapaná"] = "spn", ["Sanaviron"] = "sai-san", ["Sandawe"] = "sad", ["Sanga (Congo)"] = "sng", ["Sanga (Nigeria)"] = "xsn", ["Sanggau"] = "scg", ["Sangil"] = "snl", ["Sangir"] = "sxn", ["Sangisari"] = "sgr", ["Sangkong"] = "sgk", ["Sanglechi"] = "sgy", ["Sango"] = "sg", ["Sangtam Naga"] = "nsa", ["Sangu (Gabon)"] = "snq", ["Sangu (Tanzania)"] = "sbp", ["Sani"] = "ysn", ["Sanie"] = "ysy", ["Saniyo-Hiyewe"] = "sny", ["Sankaran Maninka"] = "msc", ["Sansi"] = "ssi", ["संस्कृत"] = "sa", ["Santa Catarina Albarradas Zapotec"] = "ztn", ["Santa Inés Ahuatempan Popoloca"] = "pca", ["Santa Inés Yatzechi Zapotec"] = "zpn", ["Santa Lucía Monteverde Mixtec"] = "mdv", ["Santa María La Alta Nahuatl"] = "nhz", ["Santa María Quiegolani Zapotec"] = "zpi", ["Santa María Zacatepec Mixtec"] = "mza", ["Santa Teresa Cora"] = "cok", ["Santali"] = "sat", ["Santiago Xanica Zapotec"] = "zpr", ["Santo Domingo Albarradas Zapotec"] = "zas", ["Sanumá"] = "xsu", ["Sapa"] = "tys", ["Saparua"] = "spr", ["Sapará"] = "sai-sap", ["Sapo"] = "krn", ["Saponi"] = "spi", ["Saposa"] = "sps", ["Sapuan"] = "spu", ["Sapé"] = "spc", ["Sar"] = "mwm", ["Sara"] = "sre", ["Sara Kaba"] = "sbz", ["Sara Kaba Deme"] = "kwg", ["Sara Kaba Náà"] = "kwv", ["Saraiki"] = "skr", ["Saramaccan"] = "srm", ["Sarangani Blaan"] = "bps", ["Sarangani Manobo"] = "mbs", ["Sarasira"] = "zsa", ["Saraveca"] = "sar", ["Sarcee"] = "srs", ["Sardinian"] = "sc", ["Sarikoli"] = "srh", ["Sarli"] = "sdf", ["Sartang"] = "onp", ["Sarua"] = "swy", ["Sarudu"] = "sdu", ["Saruga"] = "sra", ["Sasak"] = "sas", ["Sasaru"] = "sxs", ["Sassarese"] = "sdc", ["Satawalese"] = "stw", ["Saterland Frisian"] = "stq", ["Sateré-Mawé"] = "mav", ["Sathmar Swabian"] = "gmw-stm", ["Saudi Arabian Sign Language"] = "sdl", ["Sauraseni Apabhramsa"] = "inc-sap", ["Sauraseni Prakrit"] = "psu", ["Saurashtra"] = "saz", ["Sauri"] = "srt", ["Sause"] = "sao", ["Sausi"] = "ssj", ["Savi"] = "sdg", ["Savosavo"] = "svs", ["Sawai"] = "szw", ["Saweru"] = "swr", ["Sawi"] = "saw", ["Sawila"] = "swt", ["Sawriya Paharia"] = "mjt", ["Saxwe Gbe"] = "sxw", ["Saya"] = "say", ["Sayula Popoluca"] = "pos", ["Scanian"] = "gmq-scy", ["Scots"] = "sco", ["Scottish Gaelic"] = "gd", ["Seba"] = "kdg", ["Sebat Bet Gurage"] = "sgw", ["Seberuang"] = "sbx", ["Sebop"] = "sib", ["Sebuyau"] = "snb", ["Sechelt"] = "sec", ["Sechura"] = "sai-sec", ["Secoya"] = "sey", ["Sedang"] = "sed", ["Sedoa"] = "tvw", ["Seenku"] = "sos", ["Segai"] = "sge", ["Segeju"] = "seg", ["Seget"] = "sbg", ["Sehwi"] = "sfw", ["Seim"] = "sim", ["Seimat"] = "ssg", ["Seit-Kaitetu"] = "hik", ["Sekani"] = "sek", ["Sekapan"] = "skp", ["Sekar"] = "skz", ["Seke"] = "skj", ["Sekele"] = "vaj", ["Seki"] = "syi", ["Seko Padang"] = "skx", ["Seko Tengah"] = "sko", ["Sekpele"] = "lip", ["Selangor Sign Language"] = "kgi", ["Selaru"] = "slu", ["Selayar"] = "sly", ["Selee"] = "snw", ["Selepet"] = "spl", ["Selk'nam"] = "ona", ["Selonian"] = "sxl", ["Selungai Murut"] = "slg", ["Seluwasan"] = "sws", ["Sema"] = "nsm", ["Semai"] = "sea", ["Semandang"] = "sdm", ["Semaq Beri"] = "szc", ["Sembakung Murut"] = "sbr", ["Semelai"] = "sza", ["Semimi"] = "etz", ["Semnam"] = "ssm", ["Semnani"] = "smy", ["Sempan"] = "xse", ["Sena"] = "seh", ["Senara Sénoufo"] = "seq", ["Senaya"] = "syn", ["Sene"] = "sej", ["Seneca"] = "see", ["Sengele"] = "szg", ["Senggi"] = "snu", ["Sengo"] = "spk", ["Sengseng"] = "ssz", ["Senhaja De Srair"] = "sjs", ["Sensi"] = "sni", ["Sentani"] = "set", ["Senthang Chin"] = "sez", ["Sentinelese"] = "std", ["Sepa (Indonesia)"] = "spb", ["Sepa (New Guinea)"] = "spe", ["Sepen"] = "spm", ["Sepik Iwam"] = "iws", ["Sepik Mari"] = "mbx", ["Sera"] = "sry", ["Serbo-Croatian"] = "sh", ["Sere"] = "swf", ["Serer"] = "srr", ["Seri"] = "sei", ["Serili"] = "sve", ["Seroa"] = "kqu", ["Serrano"] = "ser", ["Seru"] = "szd", ["Serua"] = "srw", ["Serudung Murut"] = "srk", ["Serui-Laut"] = "seu", ["Seta"] = "stf", ["Setaman"] = "stm", ["Seti"] = "sbi", ["Severn Ojibwa"] = "ojs", ["Sewa Bay"] = "sew", ["Seychellois Creole"] = "crs", ["Seze"] = "sze", ["Sha"] = "scw", ["Shabak"] = "sdb", ["Shabo"] = "sbf", ["Shahmirzadi"] = "srz", ["Shahrudi"] = "shm", ["Shall-Zwall"] = "sha", ["Shama-Sambuga"] = "sqa", ["Shamang"] = "xsh", ["Shambala"] = "ksb", ["Shan"] = "shn", ["Shanenawa"] = "swo", ["Shanga"] = "sho", ["Shangzhai"] = "jih", ["Shaozhou Tuhua"] = "zhx-sht", ["Sharanahua"] = "mcd", ["Shark Bay"] = "ssv", ["Sharwa"] = "swq", ["Shasta"] = "sht", ["Shatt"] = "shj", ["Shau"] = "sqh", ["Shawnee"] = "sjw", ["She"] = "shx", ["Shebayo"] = "awd-she", ["Shehri"] = "shv", ["Shekkacho"] = "moy", ["Sheko"] = "she", ["Shelta"] = "sth", ["Shendu"] = "shl", ["Sheni"] = "scv", ["Sherbro"] = "bun", ["Sherdukpen"] = "sdp", ["Sherpa"] = "xsr", ["Sheshi Kham"] = "kip", ["Shi"] = "shr", ["Shihhi Arabic"] = "ssh", ["Shiki"] = "gua", ["Shilluk"] = "shk", ["Shina"] = "scl", ["Shinasha"] = "bwo", ["Shipibo-Conibo"] = "shp", ["Shixing"] = "sxg", ["Sholaga"] = "sle", ["Shom Peng"] = "sii", ["Shona"] = "sn", ["Shoo-Minda-Nye"] = "bcv", ["Shor"] = "cjs", ["Shoshone"] = "shh", ["Shua"] = "shg", ["Shuar"] = "jiv", ["Shuba"] = "cbq", ["Shughni"] = "sgh", ["Shumashti"] = "sts", ["Shumcho"] = "scu", ["Shuswap"] = "shs", ["Shuwa-Zamani"] = "ksa", ["Shwai"] = "shw", ["Shwe Palaung"] = "pll", ["Sialum"] = "slw", ["Siamou"] = "sif", ["Sian"] = "spg", ["Siane"] = "snp", ["Siang"] = "sya", ["Siar-Lak"] = "sjr", ["Sibe"] = "nco", ["Siberian Tatar"] = "sty", ["Sibu Melanau"] = "sdx", ["Sicanian"] = "sxc", ["Sicel"] = "scx", ["Sichuan Yi"] = "ii", ["Sicilian"] = "scn", ["Siculo-Arabic"] = "sqr", ["Sidamo"] = "sid", ["Sidetic"] = "xsd", ["Sie"] = "erg", ["Sierra Leone Sign Language"] = "sgx", ["Sierra Negra Nahuatl"] = "nsu", ["Sierra de Juárez Zapotec"] = "zaa", ["Sighu"] = "sxe", ["Sihan"] = "snr", ["Sika"] = "ski", ["Sikaiana"] = "sky", ["Sikaritai"] = "tty", ["Sikiana"] = "sik", ["Sikkimese"] = "sip", ["Sikule"] = "skh", ["Sila"] = "slt", ["Silacayoapan Mixtec"] = "mks", ["Sileibi"] = "sbq", ["Silesian"] = "szl", ["Silimo"] = "wul", ["Siliput"] = "mkc", ["Silopi"] = "xsp", ["Silt'e"] = "stv", ["Simaa"] = "sie", ["Simalungun Batak"] = "bts", ["Simba"] = "sbw", ["Simbali"] = "smg", ["Simbari"] = "smb", ["Simbo"] = "sbb", ["Simeku"] = "smz", ["Simeulue"] = "smr", ["Simte"] = "smt", ["Sinacantán"] = "nai-sin", ["Sinagen"] = "siu", ["Sinasina"] = "sst", ["Sinaugoro"] = "snc", ["Sindarin"] = "sjn", ["Sindhi"] = "sd", ["Sindhi Bhil"] = "sbn", ["Sindihui Mixtec"] = "xts", ["Singa"] = "sgm", ["Singapore Sign Language"] = "sls", ["Singpho"] = "sgp", ["Sinhalese"] = "si", ["Sinicahua Mixtec"] = "xti", ["Sininkere"] = "skq", ["Sinte Romani"] = "rmo", ["Sinyar"] = "sys", ["Sinúfana"] = "sai-sin", ["Sio"] = "xsi", ["Siona"] = "snn", ["Sipakapense"] = "qum", ["Sira"] = "swj", ["Siraya"] = "fos", ["Sirenik"] = "ysr", ["Siri"] = "sir", ["Siriano"] = "sri", ["Sirionó"] = "srq", ["Sirmauri"] = "srx", ["Siroi"] = "ssd", ["Sissala"] = "sld", ["Sissano"] = "sso", ["Situ"] = "sit-sit", ["Siuslaw"] = "sis", ["Sivandi"] = "siy", ["Siwai"] = "siw", ["Siwi"] = "siz", ["Siwu"] = "akp", ["Siyin Chin"] = "csy", ["Skagit"] = "ska", ["Skalvian"] = "svx", ["Ske"] = "ske", ["Skepi Creole Dutch"] = "skw", ["Skolt Sami"] = "sms", ["Skou"] = "skv", ["Slavey"] = "den", ["Slavomolisano"] = "svm", ["Slovak"] = "sk", ["Slovakian Sign Language"] = "svk", ["Slovene"] = "sl", ["Slovincian"] = "zlw-slv", ["Small Flowery Miao"] = "sfm", ["Smärky Kanum"] = "kxq", ["Snohomish"] = "sno", ["So'a"] = "ssq", ["Sobei"] = "sob", ["Sochiapam Chinantec"] = "cso", ["Soga"] = "xog", ["Sogdian"] = "sog", ["Sok"] = "skk", ["Sokna"] = "swn", ["Soko"] = "soc", ["Sokoro"] = "sok", ["Solano"] = "xso", ["Soli"] = "sby", ["Solon"] = "tuw-sol", ["Solong"] = "aaw", ["Solos"] = "sol", ["Som"] = "smc", ["Somali"] = "so", ["Somba-Siawari"] = "bmu", ["Somra"] = "ntx", ["Somrai"] = "sor", ["Somray"] = "smu", ["Somyev"] = "kgt", ["Sonaga"] = "ysg", ["Sonde"] = "shc", ["Songe"] = "sop", ["Songlai Chin"] = "csj", ["Songomeno"] = "soe", ["Songoora"] = "sod", ["Sonha"] = "soi", ["Sonia"] = "siq", ["Soninke"] = "snk", ["Sonsorolese"] = "sov", ["Soo"] = "teu", ["Sop"] = "urw", ["Soqotri"] = "sqt", ["Sora"] = "srb", ["Sori-Harengan"] = "sbh", ["Sorkhei"] = "sqo", ["Sorothaptic"] = "sxo", ["Sorsogon Ayta"] = "ays", ["Sos Kundi"] = "sdk", ["Sota Kanum"] = "krz", ["Sotho"] = "st", ["Sou"] = "sqq", ["South African Sign Language"] = "sfs", ["South Awyu"] = "aws", ["South Boma"] = "bnt-sbo", ["South Central Banda"] = "lnl", ["South Central Dinka"] = "dib", ["South Efate"] = "erk", ["South Fali"] = "fal", ["South Giziga"] = "giz", ["South Lembata"] = "lmf", ["South Levantine Arabic"] = "ajp", ["South Marquesan"] = "mqm", ["South Muyu"] = "kts", ["South Nuaulu"] = "nxl", ["South Picene"] = "spx", ["South Slavey"] = "xsl", ["South Tairora"] = "omw", ["South Ucayali Ashéninka"] = "cpy", ["South Watut"] = "mcy", ["Southeast Ambrym"] = "tvk", ["Southeast Babar"] = "vbb", ["Southeast Ijo"] = "ijs", ["Southeast Pashayi"] = "psi", ["Southeast Tasmanian"] = "xpf", ["Southeastern Dinka"] = "dks", ["Southeastern Ixtlán Zapotec"] = "zpd", ["Southeastern Kolami"] = "nit", ["Southeastern Nochixtlán Mixtec"] = "mxy", ["Southeastern Pomo"] = "pom", ["Southeastern Puebla Nahuatl"] = "npl", ["Southeastern Tarahumara"] = "tcu", ["Southeastern Tepehuan"] = "stp", ["Southern Alta"] = "agy", ["Southern Altai"] = "alt", ["Southern Amami-Oshima"] = "ams", ["Southern Bai"] = "bfs", ["Southern Birifor"] = "biv", ["Southern Bobo"] = "bwq", ["Southern Bontoc"] = "obk", ["Southern Carrier"] = "caf", ["Southern Catanduanes Bicolano"] = "bln", ["Southern Dagaare"] = "dga", ["Southern East Cree"] = "crj", ["Southern Ghale"] = "ghe", ["Southern Grebo"] = "grj", ["Southern Guiyang Hmong"] = "hmy", ["Southern Haida"] = "hax", ["Southern Hindko"] = "hnd", ["Southern Kalapuya"] = "sxk", ["Southern Kalinga"] = "ksc", ["Southern Kam"] = "kmc", ["Southern Kissi"] = "kss", ["Southern Kiwai"] = "kjd", ["Southern Kurdish"] = "sdh", ["Southern Lolopo"] = "ysp", ["Southern Lorung"] = "lrr", ["Southern Luri"] = "luz", ["Southern Ma'di"] = "snm", ["Southern Mashan Hmong"] = "hma", ["Southern Mnong"] = "mnn", ["Southern Muji"] = "ymc", ["Southern Ndebele"] = "nr", ["Southern Ngbandi"] = "nbw", ["Southern Nicobarese"] = "nik", ["Southern Nisu"] = "nsd", ["Southern Nuni"] = "nnw", ["Southern Ohlone"] = "css", ["Southern One"] = "osu", ["Southern Pame"] = "pmz", ["Southern Pomo"] = "peq", ["Southern Puebla Mixtec"] = "mit", ["Southern Puget Sound Salish"] = "slh", ["Southern Pumi"] = "pmj", ["Southern Qiandong Miao"] = "hms", ["Southern Qiang"] = "qxs", ["Southern Rengma Naga"] = "nre", ["Southern Rincon Zapotec"] = "zsr", ["Southern Roglai"] = "rgs", ["Southern Sama"] = "ssb", ["Southern Sami"] = "sma", ["Southern Samo"] = "sbd", ["Southern Selkup"] = "sel-sou", ["Southern Sierra Miwok"] = "skd", ["Southern Thai"] = "sou", ["Southern Tidong"] = "itd", ["Southern Tiwa"] = "tix", ["Southern Toussian"] = "wib", ["Southern Tujia"] = "tjs", ["Southern Tutchone"] = "tce", ["Southern Valley Yokuts"] = "nai-svy", ["Southern Yukaghir"] = "yux", ["Southwest Gbaya"] = "gso", ["Southwest Palawano"] = "plv", ["Southwest Pashayi"] = "psh", ["Southwest Tanna"] = "nwi", ["Southwestern Bontoc"] = "vbk", ["Southwestern Dinka"] = "dik", ["Southwestern Fars"] = "fay", ["Southwestern Guiyang Hmong"] = "hmg", ["Southwestern Huishui Hmong"] = "hmh", ["Southwestern Nisu"] = "nsv", ["Southwestern Tamang"] = "tsf", ["Southwestern Tarahumara"] = "twr", ["Southwestern Tepehuan"] = "tla", ["Southwestern Tlaxiaco Mixtec"] = "meh", ["Sowa"] = "sww", ["Sowanda"] = "sow", ["Soyaltepec Mazatec"] = "vmp", ["Soyaltepec Mixtec"] = "vmq", ["Spanish"] = "es", ["Spanish Sign Language"] = "ssp", ["Spiti Bhoti"] = "spt", ["Spokane"] = "spo", ["Squamish"] = "squ", ["Sranan Tongo"] = "srn", ["Sri Lankan Creole Malay"] = "sci", ["Sri Lankan Sign Language"] = "sqs", ["Stod Bhoti"] = "sbu", ["Stoney"] = "sto", ["Suabo"] = "szp", ["Suarmin"] = "seo", ["Suau"] = "swp", ["Suba"] = "sxb", ["Suba-Simbiti"] = "ssc", ["Subi"] = "xsj", ["Subiya"] = "sbs", ["Subtiaba"] = "sut", ["Sudanese Arabic"] = "apd", ["Sudest"] = "tgo", ["Sudovian"] = "xsv", ["Suena"] = "sue", ["Suga"] = "sgi", ["Suganga"] = "sug", ["Sugut Dusun"] = "kzs", ["Sui"] = "swi", ["Suki"] = "sui", ["Suku"] = "sub", ["Sukuma"] = "suk", ["Sukur"] = "syk", ["Sukurum"] = "zsu", ["Sula"] = "szn", ["Sulka"] = "sua", ["Sulod"] = "srg", ["Sulung"] = "suv", ["Suma"] = "sqm", ["Sumariup"] = "siv", ["Sumau"] = "six", ["Sumbawa"] = "smw", ["Sumbwa"] = "suw", ["Sumerian"] = "sux", ["Sumtu Chin"] = "csv", ["Sunam"] = "ssk", ["Sundanese"] = "su", ["Sunum"] = "ymn", ["Sunwar"] = "suz", ["Suoy"] = "syo", ["Supyire"] = "spp", ["Sur"] = "tdl", ["Surbakhal"] = "sbj", ["Suri"] = "suq", ["Surigaonon"] = "sgd", ["Surjapuri"] = "sjp", ["Sursurunga"] = "sgz", ["Suruahá"] = "swx", ["Surubu"] = "sde", ["Suruí"] = "sru", ["Suruí Do Pará"] = "mdz", ["Susquehannock"] = "sqn", ["Susu"] = "sus", ["Susuami"] = "ssu", ["Suundi"] = "sdj", ["Suwawa"] = "swu", ["Suyá"] = "suy", ["Svan"] = "sva", ["Swabian"] = "swg", ["Swahili"] = "sw", ["Swampy Cree"] = "csw", ["Swazi"] = "ss", ["Swedish"] = "sv", ["Swedish Sign Language"] = "swl", ["Swiss-French Sign Language"] = "ssr", ["Swiss-German Sign Language"] = "sgg", ["Swiss-Italian Sign Language"] = "slf", ["Swo"] = "sox", ["Syenara Senoufo"] = "shz", ["Sylheti"] = "syl", ["Sácata"] = "sai-sac", ["São Paulo Kaingáng"] = "zkp", ["Sãotomense"] = "cri", ["Sìcìté Sénoufo"] = "sep", ["Sô"] = "sss", ["T'en"] = "tct", ["Taabwa"] = "tap", ["Tabaa Zapotec"] = "zat", ["Tabancale"] = "sai-tab", ["Tabaru"] = "tby", ["Tabasaran"] = "tab", ["Tabasco Chontal"] = "chf", ["Tabasco Nahuatl"] = "nhc", ["Tabasco Zoque"] = "zoq", ["Tabla"] = "tnm", ["Tabo"] = "knv", ["Tabriak"] = "tzx", ["Tacahua Mixtec"] = "xtt", ["Tacana"] = "tna", ["Tachawit"] = "shy", ["Tadaksahak"] = "dsq", ["Tadyawan"] = "tdy", ["Tae'"] = "rob", ["Tafi"] = "tcd", ["Tafreshi"] = "xme-taf", ["Tagabawa"] = "bgs", ["Tagakaulu Kalagan"] = "klg", ["Tagal Murut"] = "mvv", ["Tagalog"] = "tl", ["Tagbanwa"] = "tbw", ["Tagbu"] = "tbm", ["Tagdal"] = "tda", ["Tagish"] = "tgx", ["Tagoi"] = "tag", ["Tagwana Senoufo"] = "tgw", ["Tahitian"] = "ty", ["Tahltan"] = "tht", ["Tai"] = "taw", ["Tai Daeng"] = "tyr", ["Tai Dam"] = "blt", ["Tai Do"] = "tyj", ["Tai Dón"] = "twh", ["Tai Hang Tong"] = "thc", ["Tai Hongjin"] = "tiz", ["Tai Laing"] = "tjl", ["Tai Loi"] = "tlq", ["Tai Long"] = "thi", ["Tai Nüa"] = "tdd", ["Tai Pao"] = "tpo", ["Tai Thanh"] = "tmm", ["Tai Ya"] = "cuu", ["Taiap"] = "gpn", ["Taikat"] = "aos", ["Taimyr Pidgin Russian"] = "crp-tpr", ["Tainae"] = "ago", ["Tairuma"] = "uar", ["Taishanese"] = "zhx-tai", ["Taita"] = "dav", ["Taivoan"] = "tvx", ["Taiwan Sign Language"] = "tss", ["Taje"] = "pee", ["Tajik"] = "tg", ["Tajiki Arabic"] = "abh", ["Tajio"] = "tdj", ["Tajuasohn"] = "tja", ["Takelma"] = "tkm", ["Takia"] = "tbc", ["Takka Apabhramsa"] = "inc-tak", ["Takua"] = "tkz", ["Takuu"] = "nho", ["Takwane"] = "tke", ["Tal"] = "tal", ["Tala"] = "tak", ["Talaud"] = "tld", ["Taliabu"] = "tlv", ["Talieng"] = "tdf", ["Talinga-Bwisi"] = "tlj", ["Talise"] = "tlr", ["Tallán"] = "sai-tal", ["Talodi"] = "tlo", ["Taloki"] = "tlk", ["Talondo'"] = "tln", ["Talossan"] = "tzl", ["Talu"] = "yta", ["Talysh"] = "tly", ["Tama (Chad)"] = "tma", ["Tama (Colombia)"] = "ten", ["Tamagario"] = "tcg", ["Tamambo"] = "mla", ["Taman (Indonesia)"] = "tmn", ["Taman (Myanmar)"] = "tcl", ["Tamanaku"] = "tmz", ["Tamazola Mixtec"] = "vmx", ["Tambas"] = "tdk", ["Tambora"] = "xxt", ["Tambotalo"] = "tls", ["Tambunan Dusun"] = "kzt", ["Tami"] = "tmy", ["Tamil"] = "ta", ["Tamki"] = "tax", ["Tamnim Citak"] = "tml", ["Tampias Lobu"] = "low", ["Tampuan"] = "tpu", ["Tampulma"] = "tpm", ["Tanacross"] = "tcb", ["Tanahmerah"] = "tcm", ["Tanapag"] = "tpv", ["Tandaganon"] = "tgn", ["Tandia"] = "tni", ["Tanema"] = "tnx", ["Tangale"] = "tan", ["Tangam"] = "sit-tgm", ["Tangchangya"] = "tnv", ["Tanggu"] = "tgu", ["Tangkhul Naga"] = "nmf", ["Tangko"] = "tkx", ["Tanglang"] = "ytl", ["Tangoa"] = "tgp", ["Tangsa"] = "nst", ["Tanguat"] = "tbs", ["Tangut"] = "txg", ["Tangwang"] = "crp-tnw", ["Tanimbili"] = "tbe", ["Tanimuca-Retuarã"] = "tnc", ["Tanjijili"] = "uji", ["Tanudan Kalinga"] = "kml", ["Tanzanian Sign Language"] = "tza", ["Taos"] = "twf", ["Tapachultec"] = "nai-tap", ["Taparita"] = "sai-tpr", ["Tapayuna"] = "sai-tap", ["Tapeba"] = "tbb", ["Tapei"] = "afp", ["Tapieté"] = "tpj", ["Tapirapé"] = "taf", ["Tar Gula"] = "kcm", ["Tara Baka"] = "bdh", ["Tarairiú"] = "sai-trr", ["Tarantino"] = "roa-tar", ["Tarao"] = "tro", ["Taraon"] = "mhu", ["Tareng"] = "tgr", ["Tariana"] = "tae", ["Tarifit"] = "rif", ["Tarjumo"] = "txj", ["Tarok"] = "yer", ["Taroko"] = "trv", ["Tarpia"] = "tpf", ["Tartessian"] = "txr", ["Taruma"] = "tdm", ["Tasawaq"] = "twq", ["Tashelhit"] = "shi", ["Tasmanian"] = "xtz", ["Tasmate"] = "tmt", ["Tat"] = "ttt", ["Tataltepec Chatino"] = "cta", ["Tatana"] = "txx", ["Tatar"] = "tt", ["Tataviam"] = "azc-tat", ["Tatuyo"] = "tav", ["Tauade"] = "ttd", ["Taulil"] = "tuh", ["Taungyo"] = "tco", ["Taupota"] = "tpa", ["Tause"] = "tad", ["Taushiro"] = "trr", ["Tausug"] = "tsg", ["Tauya"] = "tya", ["Taveta"] = "tvs", ["Tavoyan"] = "tvn", ["Tavringer Romani"] = "rmu", ["Tawala"] = "tbo", ["Tawandê"] = "xtw", ["Tawang Monpa"] = "twm", ["Tawasa"] = "nai-taw", ["Taworta"] = "tbp", ["Tawoyan"] = "twy", ["Tawr Chin"] = "tcp", ["Tay Khang"] = "tnu", ["Tayabas Ayta"] = "ayy", ["Taymanitic"] = "sem-tay", ["Tayo"] = "cks", ["Taíno"] = "tnq", ["Tboli"] = "tbl", ["Tchitchege"] = "tck", ["Tchumbuli"] = "bqa", ["Te'un"] = "tve", ["Teanu"] = "tkw", ["Tebul Sign Language"] = "tsy", ["Tebul Ure Dogon"] = "dtu", ["Tecpatlán Totonac"] = "tcw", ["Tedaga"] = "tuq", ["Tedim Chin"] = "ctd", ["Tee"] = "tkq", ["Tefaro"] = "tfo", ["Tegali"] = "ras", ["Tehit"] = "kps", ["Tehuelche"] = "teh", ["Teiwa"] = "twe", ["Tejalapan Zapotec"] = "ztt", ["Teke-Fuumu"] = "ifm", ["Teke-Kukuya"] = "kkw", ["Teke-Laali"] = "lli", ["Teke-Tege"] = "teg", ["Teke-Tsaayi"] = "tyi", ["Teke-Tyee"] = "tyx", ["Tektiteko"] = "ttc", ["Tela-Masbuar"] = "tvm", ["Telefol"] = "tlf", ["Telugu"] = "te", ["Teluti"] = "tlt", ["Tem"] = "kdh", ["Temascaltepec Nahuatl"] = "nhv", ["Tembé"] = "tqb", ["Teme"] = "tdo", ["Temein"] = "teq", ["Temi"] = "soz", ["Temiar"] = "tea", ["Temne"] = "tem", ["Temoaya Otomi"] = "ott", ["Temoq"] = "tmo", ["Tempasuk Dusun"] = "tdu", ["Ten'edn"] = "tnz", ["Tenango Otomi"] = "otn", ["Tene Kan Dogon"] = "dtk", ["Tenggarong Kutai Malay"] = "vkt", ["Tengger"] = "tes", ["Tenharim"] = "pah", ["Tenino"] = "tqn", ["Tenis"] = "tns", ["Tennet"] = "tex", ["Teochew"] = "zhx-teo", ["Teojomulco Chatino"] = "omq-teo", ["Teop"] = "tio", ["Teor"] = "tev", ["Tepecano"] = "tep", ["Tepetotutla Chinantec"] = "cnt", ["Tepeuxila Cuicatec"] = "cux", ["Tepinapa Chinantec"] = "cte", ["Tepo Krumen"] = "ted", ["Teposcolula Mixtec"] = "omq-tel", ["Tequistlatec"] = "nai-teq", ["Ter Sami"] = "sjt", ["Tera"] = "ttr", ["Terebu"] = "trb", ["Terei"] = "buo", ["Tereno"] = "ter", ["Teressa"] = "tef", ["Tereweng"] = "twg", ["Teribe"] = "tfr", ["Terik"] = "tec", ["Termanu"] = "twu", ["Ternate"] = "tft", ["Ternateño"] = "tmg", ["Tese"] = "keg", ["Teshenawa"] = "twc", ["Tetela"] = "tll", ["Tetelcingo Nahuatl"] = "nhg", ["Tetete"] = "teb", ["Tetserret"] = "tez", ["Tetum"] = "tet", ["Tetun Dili"] = "tdt", ["Teushen"] = "sai-teu", ["Teutila Cuicatec"] = "cut", ["Tewa"] = "tew", ["Texcatepec Otomi"] = "otx", ["Texistepec Popoluca"] = "poq", ["Texmelucan Zapotec"] = "zpz", ["Tezoatlán Mixtec"] = "mxb", ["Tha"] = "thy", ["Thachanadan"] = "thn", ["Thado Chin"] = "tcz", ["Thai"] = "th", ["Thai Mon"] = "mnw-tha", ["Thai Sign Language"] = "tsq", ["Thai Song"] = "soa", ["Thaiphum Chin"] = "cth", ["Thakali"] = "ths", ["Thamudic"] = "sem-tha", ["Thangal Naga"] = "nki", ["Thangmi"] = "thf", ["Thao"] = "ssf", ["Tharaka"] = "thk", ["Tharrgari"] = "dhr", ["Thavung"] = "thm", ["Thawa"] = "xtv", ["Tho"] = "tou", ["Thompson"] = "thp", ["Thopho"] = "ytp", ["Thracian"] = "txh", ["Thu Lao"] = "tyl", ["Thulung"] = "tdh", ["Thurawal"] = "tbh", ["Thuri"] = "thu", ["Tiagbamrin Aizi"] = "ahi", ["Tiale"] = "mnl", ["Tiang"] = "tbj", ["Tibea"] = "ngy", ["Tibetan"] = "bo", ["Ticuna"] = "tca", ["Tidaá Mixtec"] = "mtx", ["Tidore"] = "tvo", ["Tiemacèwè Bozo"] = "boo", ["Tiene"] = "tii", ["Tifal"] = "tif", ["Tigak"] = "tgc", ["Tigon Mbembe"] = "nza", ["Tigre"] = "tig", ["Tigrinya"] = "ti", ["Tii"] = "txq", ["Tijaltepec Mixtec"] = "xtl", ["Tikar"] = "tik", ["Tikopia"] = "tkp", ["Tilapa Otomi"] = "otl", ["Tillamook"] = "til", ["Tilquiapan Zapotec"] = "zts", ["Tilung"] = "tij", ["Tima"] = "tms", ["Timbe"] = "tim", ["Timor Pidgin"] = "tvy", ["Timote"] = "sai-tim", ["Timucua"] = "tjm", ["Timugon Murut"] = "tih", ["Tinani"] = "lbf", ["Tindi"] = "tin", ["Tingui-Boto"] = "tgv", ["Tinigua"] = "tit", ["Tinoc Kallahan"] = "tne", ["Tinputz"] = "tpz", ["Tipai"] = "nai-tip", ["Tippera"] = "tpe", ["Tira"] = "tic", ["Tirahi"] = "tra", ["Tiranige Diga Dogon"] = "tde", ["Tircul"] = "pyx", ["Tiri"] = "cir", ["Tiruray"] = "tiy", ["Tita"] = "tdq", ["Titan"] = "ttv", ["Tiv"] = "tiv", ["Tiwa"] = "lax", ["Tiwi"] = "tiw", ["Tiéfo"] = "tiq", ["Tiéyaxo Bozo"] = "boz", ["Tjurruru"] = "tju", ["Tlachichilco Tepehua"] = "tpt", ["Tlacoapa Me'phaa"] = "tpl", ["Tlacoatzintepec Chinantec"] = "ctl", ["Tlacolulita Zapotec"] = "zpk", ["Tlahuica"] = "ocu", ["Tlahuitoltepec Mixe"] = "mxp", ["Tlamacazapa Nahuatl"] = "nuz", ["Tlazoyaltepec Mixtec"] = "mqh", ["Tlingit"] = "tli", ["To"] = "toz", ["To'abaita"] = "mlu", ["Toaripi"] = "tqo", ["Toba"] = "tob", ["Toba Batak"] = "bbc", ["Toba-Maskoy"] = "tmf", ["Tobagonian Creole English"] = "tgh", ["Tobanga"] = "tng", ["Tobati"] = "tti", ["Tobelo"] = "tlb", ["Tobian"] = "tox", ["Tobilung"] = "tgb", ["Tobo"] = "tbv", ["Tocantins Asurini"] = "asu", ["Tocharian A"] = "xto", ["Tocharian B"] = "txb", ["Tocho"] = "taz", ["Toda"] = "tcx", ["Todrah"] = "tdr", ["Tofa"] = "kim", ["Tofanma"] = "tlg", ["Tofin Gbe"] = "tfi", ["Togbo-Vara Banda"] = "tor", ["Togoyo"] = "tgy", ["Tojolabal"] = "toj", ["Tok Pisin"] = "tpi", ["Toka-Leya"] = "dov", ["Tokano"] = "zuh", ["Tokelauan"] = "tkl", ["Toki Pona"] = "tok", ["Toku-No-Shima"] = "tkn", ["Tol"] = "jic", ["Tolai"] = "ksd", ["Tolaki"] = "lbw", ["Tolomako"] = "tlm", ["Tolowa"] = "tol", ["Toma"] = "tod", ["Tomadino"] = "tdi", ["Tombelala"] = "ttp", ["Tombonuo"] = "txa", ["Tombulu"] = "tom", ["Tomini"] = "txm", ["Tommeginne"] = "xpv", ["Tommo So"] = "dto", ["Tomo Kan Dogon"] = "dtm", ["Tomoip"] = "tqp", ["Tondano"] = "tdn", ["Tonga (Malawi)"] = "tog", ["Tonga (Mozambique)"] = "toh", ["Tonga (Zambia)"] = "toi", ["Tongan"] = "to", ["Tongwe"] = "tny", ["Tonjon"] = "tjn", ["Tonkawa"] = "tqw", ["Tonsawang"] = "tnw", ["Tonsea"] = "txs", ["Tontemboan"] = "tnt", ["Toogee"] = "xpx", ["Tooro"] = "ttj", ["Topoiyo"] = "toy", ["Toposa"] = "toq", ["Toraja-Sa'dan"] = "sda", ["Toram"] = "trj", ["Torau"] = "ttu", ["Toro"] = "tdv", ["Toro So Dogon"] = "dts", ["Toro Tegu Dogon"] = "dtt", ["Toromono"] = "tno", ["Torona"] = "tqr", ["Torres Strait Creole"] = "tcs", ["Torricelli"] = "tei", ["Torricelli Yau"] = "yyu", ["Torwali"] = "trw", ["Torá"] = "trz", ["Tosu"] = "sit-tos", ["Totela"] = "ttl", ["Toto"] = "txo", ["Totoli"] = "txe", ["Totomachapan Zapotec"] = "zph", ["Totontepec Mixe"] = "mto", ["Totoro"] = "ttk", ["Touo"] = "tqu", ["Toura"] = "neb", ["Tourangeau"] = "roa-tou", ["Towei"] = "ttn", ["Translingual"] = "mul", ["Transylvanian Saxon"] = "gmw-tsx", ["Traveller Danish"] = "rmd", ["Traveller Norwegian"] = "rmg", ["Traveller Scottish"] = "trl", ["Tregami"] = "trm", ["Tremembé"] = "tme", ["Trieng"] = "stg", ["Trimuris"] = "tip", ["Tring"] = "tgq", ["Tringgus"] = "trx", ["Trinidad and Tobago Sign Language"] = "lst", ["Trinidadian Creole English"] = "trf", ["Trinitario"] = "trn", ["Trió"] = "tri", ["Truká"] = "tka", ["Trumai"] = "tpy", ["Ts'ün-Lao"] = "tsl", ["Tsaangi"] = "tsa", ["Tsafiki"] = "cof", ["Tsakhur"] = "tkr", ["Tsakonian"] = "tsd", ["Tsakwambo"] = "kvz", ["Tsamai"] = "tsb", ["Tsat"] = "huq", ["Tsetsaut"] = "txc", ["Tsez"] = "ddo", ["Tshangla"] = "tsj", ["Tshobdun"] = "sit-tsh", ["Tshwa"] = "hio", ["Tsikimba"] = "kdl", ["Tsimané"] = "cas", ["Tsimshian"] = "tsi", ["Tsishingini"] = "tsw", ["Tso"] = "ldp", ["Tsogo"] = "tsv", ["Tsonga"] = "ts", ["Tsotsitaal"] = "fly", ["Tsou"] = "tsu", ["Tsum"] = "ttz", ["Tsuvadi"] = "tvd", ["Tsuvan"] = "tsh", ["Tswa"] = "tsc", ["Tswana"] = "tn", ["Tswapong"] = "two", ["Tuamotuan"] = "pmt", ["Tuareg"] = "tmh", ["Tubar"] = "tbu", ["Tucano"] = "tuo", ["Tugen"] = "tuy", ["Tugun"] = "tzn", ["Tugutil"] = "tuj", ["Tukang Besi North"] = "khc", ["Tukang Besi South"] = "bhq", ["Tuki"] = "bag", ["Tukpa"] = "tpq", ["Tukudede"] = "tkd", ["Tukumanféd"] = "tkf", ["Tula"] = "tul", ["Tule-Kaweah Yokuts"] = "nai-tky", ["Tulehu"] = "tlu", ["Tulishi"] = "tey", ["Tulu"] = "tcy", ["Tulu-Bohuai"] = "rak", ["Tulua"] = "aus-tul", ["Tuma-Irumu"] = "iou", ["Tumak"] = "tmc", ["Tumbuka"] = "tum", ["Tumi"] = "kku", ["Tumleo"] = "tmq", ["Tumshuqese"] = "xtq", ["Tumtum"] = "tbr", ["Tumulung Sisaala"] = "sil", ["Tundra Enets"] = "enh", ["Tundra Nenets"] = "yrk", ["Tunen"] = "tvu", ["Tungag"] = "lcm", ["Tunggare"] = "trt", ["Tunia"] = "tug", ["Tunica"] = "tun", ["Tunisian Arabic"] = "aeb", ["Tunisian Berber"] = "sds", ["Tunisian Sign Language"] = "tse", ["Tunjung"] = "tjg", ["Tunni"] = "tqq", ["Tunumiisut"] = "esx-tut", ["Tunzu"] = "dza", ["Tuoba"] = "qfa-xgx-tuo", ["Tuotomb"] = "ttf", ["Tuparí"] = "tpr", ["Tupinambá"] = "tpn", ["Tupinikin"] = "tpk", ["Tupuri"] = "tui", ["Turaka"] = "trh", ["Turi"] = "trd", ["Turiwára"] = "twt", ["Turka"] = "tuz", ["Turkana"] = "tuv", ["Turkish"] = "tr", ["Turkish Sign Language"] = "tsm", ["Turkmen"] = "tk", ["Turks and Caicos Creole English"] = "tch", ["Turoyo"] = "tru", ["Turumsa"] = "tqm", ["Turung"] = "try", ["Tuscarora"] = "tus", ["Tutelo"] = "tta", ["Tutong"] = "ttg", ["Tutsa Naga"] = "tvt", ["Tutuba"] = "tmi", ["Tututepec Mixtec"] = "mtu", ["Tututni"] = "tuu", ["Tuvaluan"] = "tvl", ["Tuvan"] = "tyv", ["Tuwali Ifugao"] = "ifk", ["Tuwari"] = "tww", ["Tuwuli"] = "bov", ["Tuxináwa"] = "tux", ["Tuxá"] = "tud", ["Tuyuca"] = "tue", ["Tuyuhun"] = "qfa-xgx-tuh", ["Twana"] = "twa", ["Twendi"] = "twn", ["Tyap"] = "kcg", ["Tyaraity"] = "woa", ["Tyerrernotepanner"] = "xph", ["Tz'utujil"] = "tzj", ["Tzeltal"] = "tzh", ["Tzotzil"] = "tzo", ["Tày"] = "tyz", ["Tày Tac"] = "tyt", ["Tây Bồi"] = "tas", ["Téén"] = "lor", ["Tübatulabal"] = "tub", ["U"] = "uuu", ["Uab Meto"] = "aoz", ["Uamué"] = "uam", ["Uare"] = "ksj", ["Ubaghara"] = "byc", ["Ubang"] = "uba", ["Ubi"] = "ubi", ["Ubir"] = "ubr", ["Ubykh"] = "uby", ["Ucayali-Yurúa Ashéninka"] = "cpb", ["Uda"] = "uda", ["Udi"] = "udi", ["Udihe"] = "ude", ["Udmurt"] = "udm", ["Uduk"] = "udu", ["Ufim"] = "ufi", ["Ugandan Sign Language"] = "ugn", ["Ugaritic"] = "uga", ["Ughele"] = "uge", ["Uhami"] = "uha", ["Uisai"] = "uis", ["Ujir"] = "udj", ["Ukaan"] = "kcf", ["Ukhwejo"] = "ukh", ["Ukit"] = "umi", ["Ukpe-Bayobiri"] = "ukp", ["Ukpet-Ehom"] = "akd", ["Ukrainian"] = "uk", ["Ukrainian Sign Language"] = "ukl", ["Ukue"] = "uku", ["Ukuriguma"] = "ukg", ["Ukwa"] = "ukq", ["Ukwuani-Aboh-Ndoni"] = "ukw", ["Ulau-Suain"] = "svb", ["Ulch"] = "ulc", ["Uldeme"] = "udl", ["Ulithian"] = "uli", ["Ullatan"] = "ull", ["Ulumanda'"] = "ulm", ["Ulwa"] = "ulw", ["Uma"] = "ppk", ["Uma' Lasan"] = "xky", ["Uma' Lung"] = "ulu", ["Umanakaina"] = "gdn", ["Umatilla"] = "uma", ["Umbindhamu"] = "umd", ["Umbrian"] = "xum", ["Umbu-Ungu"] = "ubu", ["Umbugarla"] = "umr", ["Umbundu"] = "umb", ["Umbuygamu"] = "umg", ["Ume Sami"] = "sju", ["Umeda"] = "upi", ["Umiida"] = "xud", ["Umiray Dumaget Agta"] = "due", ["Umon"] = "umm", ["Umotína"] = "umo", ["Umpila"] = "ump", ["Una"] = "mtg", ["Unami"] = "unm", ["Unas"] = "art-una", ["Unde Kaili"] = "unz", ["Undetermined"] = "und", ["Uneapa"] = "bbn", ["Uneme"] = "une", ["Unggaranggu"] = "xun", ["Unggumi"] = "xgu", ["Unserdeutsch"] = "uln", ["Unua"] = "onu", ["Unubahe"] = "unu", ["Uokha"] = "uok", ["Upper Chehalis"] = "cjh", ["Upper Grand Valley Dani"] = "dna", ["Upper Kinabatangan"] = "dmg", ["Upper Kuskokwim"] = "kuu", ["Upper Necaxa Totonac"] = "tku", ["Upper Sorbian"] = "hsb", ["Upper Ta'oih"] = "tth", ["Upper Tanana"] = "tau", ["Upper Taromi"] = "tov", ["Upper Umpqua"] = "xup", ["Ura (New Guinea)"] = "uro", ["Ura (Vanuatu)"] = "uur", ["Uradhi"] = "urf", ["Urak Lawoi'"] = "urk", ["Urali"] = "url", ["Urapmin"] = "urm", ["Urarina"] = "ura", ["Urartian"] = "xur", ["Urat"] = "urt", ["Urdu"] = "ur", ["Urhobo"] = "urh", ["Uri"] = "uvh", ["Urigina"] = "urg", ["Urim"] = "uri", ["Urimo"] = "urx", ["Uripiv-Wala-Rano-Atchin"] = "upv", ["Urningangg"] = "urc", ["Uru"] = "ure", ["Uru-Eu-Wau-Wau"] = "urz", ["Uru-Pa-In"] = "urp", ["Uruangnirin"] = "urn", ["Uruava"] = "urv", ["Urubú-Kaapor"] = "urb", ["Uruguayan Sign Language"] = "ugy", ["Urum"] = "uum", ["Urumi"] = "uru", ["Usaghade"] = "usk", ["Usan"] = "wnu", ["Usarufa"] = "usa", ["Ushojo"] = "ush", ["Usila Chinantec"] = "cuc", ["Uspanteco"] = "usp", ["Usui"] = "usi", ["Utarmbung"] = "omo", ["Ute"] = "ute", ["Utu"] = "utu", ["Uvbie"] = "evh", ["Uwinymil"] = "aus-uwi", ["Uya"] = "usu", ["Uyajitaya"] = "duk", ["Uyghur"] = "ug", ["Uzbek"] = "uz", ["Uzbeki Arabic"] = "auz", ["Uzekwe"] = "eze", ["Vaagri Booli"] = "vaa", ["Vaghri"] = "vgr", ["Vaghua"] = "tva", ["Vagla"] = "vag", ["Vai"] = "vai", ["Vaiphei"] = "vap", ["Vale"] = "vae", ["Valencian Sign Language"] = "vsv", ["Valle Nacional Chinantec"] = "cvn", ["Valley Maidu"] = "vmv", ["Valman"] = "van", ["Valpei"] = "vlp", ["Vamale"] = "mkt", ["Vame"] = "mlr", ["Vandalic"] = "xvn", ["Vangunu"] = "mpr", ["Vanimo"] = "vam", ["Vanji"] = "ira-wnj", ["Vanuma"] = "vau", ["Vao"] = "vao", ["Varhadi"] = "vah", ["Varisi"] = "vrs", ["Varli"] = "vav", ["Vasavi"] = "vas", ["Vayu"] = "vay", ["Veddah"] = "ved", ["Vehes"] = "val", ["Vemgo-Mabas"] = "vem", ["Venda"] = "ve", ["Venetian"] = "vec", ["Venetic"] = "xve", ["Venezuelan Sign Language"] = "vsl", ["Ventureño"] = "veo", ["Veps"] = "vep", ["Vera'a"] = "vra", ["Vestinian"] = "xvs", ["Vidunda"] = "vid", ["Viemo"] = "vig", ["Vietnamese"] = "vi", ["Vilamovian"] = "wym", ["Vilela"] = "vil", ["Vili"] = "vif", ["Villa Viciosa Agta"] = "dyg", ["Vincentian Creole English"] = "svc", ["Virgin Islands Creole"] = "vic", ["Vishavan"] = "vis", ["Viti"] = "vit", ["Vitou"] = "vto", ["Viya"] = "gev", ["Vlax Romani"] = "rmy", ["Volapük"] = "vo", ["Volga German"] = "gmw-vog", ["Volscian"] = "xvo", ["Vono"] = "kch", ["Voro"] = "vor", ["Votic"] = "vot", ["Vracada Apabhramsa"] = "inc-vra", ["Vumbu"] = "vum", ["Vunapu"] = "vnp", ["Vunjo"] = "vun", ["Vurës"] = "msn", ["Vute"] = "vut", ["Võro"] = "vro", ["Wa"] = "wbm", ["Wa'ema"] = "wag", ["Waama"] = "wwa", ["Waamwang"] = "wmn", ["Wab"] = "wab", ["Wabo"] = "wbb", ["Waboda"] = "kmx", ["Waci Gbe"] = "wci", ["Wadaginam"] = "wdg", ["Waddar"] = "wbq", ["Wadi Wadi"] = "xwd", ["Wadiyara Koli"] = "kxp", ["Wadjabangayi"] = "wdy", ["Wadjiginy"] = "wdj", ["Wadjigu"] = "wdu", ["Wae Rana"] = "wrx", ["Waffa"] = "waj", ["Wagawaga"] = "wgb", ["Wagaya"] = "wga", ["Wagdi"] = "wbr", ["Wageman"] = "waq", ["Wagi"] = "fad", ["Wahau Kayan"] = "whu", ["Wahau Kenyah"] = "whk", ["Wahgi"] = "wgi", ["Waigali"] = "wbk", ["Waigeo"] = "wgo", ["Waikuri"] = "nai-wai", ["Wailaki"] = "wlk", ["Wailapa"] = "wlr", ["Waima'a"] = "wmh", ["Waimaha"] = "bao", ["Waimiri-Atroari"] = "atr", ["Wainumá"] = "awd-wai", ["Waioli"] = "wli", ["Waitaká"] = "sai-wai", ["Waiwai"] = "waw", ["Waja"] = "wja", ["Wajarri"] = "wbv", ["Wajuk"] = "xwj", ["Waka"] = "wav", ["Wakawaka"] = "wkw", ["Wakhi"] = "wbl", ["Wakoná"] = "waf", ["Wala"] = "lgl", ["Walak"] = "wlw", ["Walangama"] = "nlw", ["Wali (Ghana)"] = "wlx", ["Wali (Sudan)"] = "wll", ["Waling"] = "wly", ["Walio"] = "wla", ["Walla Walla"] = "waa", ["Wallisian"] = "wls", ["Walloon"] = "wa", ["Walmajarri"] = "wmt", ["Wam"] = "wmo", ["Wamas"] = "wmc", ["Wambaya"] = "wmb", ["Wambon"] = "wms", ["Wambule"] = "wme", ["Wamey"] = "cou", ["Wamin"] = "wmi", ["Wampar"] = "lbq", ["Wampur"] = "waz", ["Wan"] = "wan", ["Wanambre"] = "wnb", ["Wanap"] = "wnp", ["Wancho"] = "nnp", ["Wanda"] = "wbh", ["Wandala"] = "mfi", ["Wandamen"] = "wad", ["Wandarang"] = "wnd", ["Wandji"] = "wdd", ["Waneci"] = "wne", ["Wanga"] = "lwg", ["Wanggamala"] = "wnm", ["Wangganguru"] = "wgg", ["Wanggom"] = "wng", ["Wangkayutyuru"] = "wky", ["Wangkumara"] = "xwk", ["Wanham"] = "sai-wnm", ["Wanji"] = "wbi", ["Wanman"] = "wbt", ["Wannu"] = "jub", ["Wano"] = "wno", ["Wantoat"] = "wnc", ["Wanukaka"] = "wnk", ["Wanyi"] = "wny", ["Wané"] = "hwa", ["Wapan"] = "juk", ["Wapishana"] = "wap", ["Wappo"] = "wao", ["War-Jaintia"] = "aml", ["Wara"] = "wbf", ["Warao"] = "wba", ["Warapu"] = "wra", ["Waray Sorsogon"] = "srv", ["Waray-Waray"] = "war", ["Wardaman"] = "wrr", ["Wardandi"] = "wxw", ["Warekena"] = "gae", ["Warembori"] = "wsa", ["Wari'"] = "pav", ["Waris"] = "wrs", ["Waritai"] = "wbe", ["Wariyangga"] = "wri", ["Warji"] = "wji", ["Warkay-Bipim"] = "bgv", ["Warlmanpa"] = "wrl", ["Warlpiri"] = "wbp", ["Warluwara"] = "wrb", ["Warnang"] = "wrn", ["Waropen"] = "wrp", ["Warray"] = "wrz", ["Warrgamay"] = "wgy", ["Warrwa"] = "wwr", ["Waru"] = "wru", ["Warumungu"] = "wrm", ["Waruna"] = "wrv", ["Warungu"] = "wrg", ["Warwar Feni"] = "hrw", ["Wasa"] = "wss", ["Wasco-Wishram"] = "wac", ["Wasembo"] = "gsp", ["Washo"] = "was", ["Waskia"] = "wsk", ["Wastek"] = "hus", ["Wasu"] = "wsu", ["Watakataui"] = "wtk", ["Watam"] = "wax", ["Wathaurong"] = "wth", ["Watiwa"] = "wtf", ["Watubela"] = "wah", ["Waube"] = "kop", ["Wauja"] = "wau", ["Wauyai"] = "wuy", ["Wawa"] = "www", ["Wawonii"] = "wow", ["Waxianghua"] = "wxa", ["Wayampi"] = "oym", ["Wayana"] = "way", ["Wayanad Chetti"] = "ctt", ["Wayoró"] = "wyr", ["Wayumará"] = "sai-way", ["Wayuu"] = "guc", ["Wedau"] = "wed", ["Weh"] = "weh", ["Welaung"] = "weu", ["Weliki"] = "klh", ["Welsh"] = "cy", ["Welsh Romani"] = "rmw", ["Wemale"] = "weo", ["Wemba-Wemba"] = "xww", ["Weme Gbe"] = "wem", ["Wendat"] = "wdt", ["Weri"] = "wer", ["Wersing"] = "kvw", ["West Albay Bikol"] = "fbl", ["West Ambae"] = "nnd", ["West Central Banda"] = "bbp", ["West Coast Bajau"] = "bdr", ["West Damar"] = "drn", ["West Flemish"] = "vls", ["West Frisian"] = "fy", ["West Greenlandic Pidgin"] = "crp-gep", ["West Lembata"] = "lmj", ["West Makian"] = "mqs", ["West Masela"] = "mss", ["West Tarangan"] = "txn", ["West Uvean"] = "uve", ["West-Central Limba"] = "lia", ["Western Apache"] = "apw", ["Western Arrernte"] = "are", ["Western Bolivian Guaraní"] = "gnw", ["Western Bru"] = "brv", ["Western Bukidnon Manobo"] = "mbb", ["Western Cham"] = "cja", ["Western Dani"] = "dnw", ["Western Durango Nahuatl"] = "azn", ["Western Fijian"] = "wyy", ["Western Gurung"] = "gvr", ["Western Highland Chatino"] = "ctp", ["Western Huasteca Nahuatl"] = "nhw", ["Western Jicaque"] = "und-wji", ["Western Juxtlahuaca Mixtec"] = "jmx", ["Western Karaboro"] = "kza", ["Western Katu"] = "kuf", ["Western Kayah"] = "kyu", ["Western Keres"] = "kjq", ["Western Krahn"] = "krw", ["Western Lalu"] = "ywl", ["Western Lawa"] = "lcp", ["Western Magar"] = "mrd", ["Western Maninkakan"] = "mlq", ["Western Mari"] = "mrj", ["Western Mashan Hmong"] = "hmw", ["Western Meohang"] = "raf", ["Western Muria"] = "mut", ["Western Neo-Aramaic"] = "amw", ["Western Ojibwa"] = "ojw", ["Western Panjabi"] = "pnb", ["Western Penan"] = "pne", ["Western Pwo"] = "pwo", ["Western Sisaala"] = "ssl", ["Western Subanon"] = "suc", ["Western Tamang"] = "tdg", ["Western Tawbuid"] = "twb", ["Western Totonac"] = "tqt", ["Western Tunebo"] = "tnb", ["Western Xiangxi Miao"] = "mmr", ["Western Xwla Gbe"] = "xwl", ["Western Yugur"] = "ybe", ["Wewaw"] = "wea", ["Weyewa"] = "wew", ["White Gelao"] = "giw", ["White Hmong"] = "mww", ["White Lachi"] = "lwh", ["Whitesands"] = "tnp", ["Wiarumus"] = "tua", ["Wichita"] = "wic", ["Wichí Lhamtés Güisnay"] = "mzh", ["Wichí Lhamtés Nocten"] = "mtp", ["Wichí Lhamtés Vejoz"] = "wlv", ["Wik-Epa"] = "wie", ["Wik-Iiyanh"] = "wij", ["Wik-Keyangan"] = "wif", ["Wik-Me'anha"] = "wih", ["Wik-Mungkan"] = "wim", ["Wik-Ngathana"] = "wig", ["Wikalkan"] = "wik", ["Wikngenchera"] = "wua", ["Wilawila"] = "wil", ["Winnebago"] = "win", ["Wintu"] = "wnw", ["Winyé"] = "kst", ["Wipi"] = "gdr", ["Wiradhuri"] = "wrh", ["Wiraféd"] = "wir", ["Wirangu"] = "wgu", ["Wiru"] = "wiu", ["Wirö"] = "wpc", ["Wiwa"] = "mbp", ["Wiyot"] = "wiy", ["Woccon"] = "xwc", ["Wogamusin"] = "wog", ["Wogeo"] = "woc", ["Woi"] = "wbw", ["Woiwurrung"] = "wyi", ["Wojenaka"] = "jod", ["Wolane"] = "wle", ["Wolani"] = "wod", ["Wolaytta"] = "wal", ["Woleaian"] = "woe", ["Wolio"] = "wlo", ["Wolof"] = "wo", ["Womo"] = "wmx", ["Wong-gie"] = "aus-won", ["Wongo"] = "won", ["Woods Cree"] = "cwd", ["Woria"] = "wor", ["Worimi"] = "kda", ["Worodougou"] = "jud", ["Worora"] = "wro", ["Wotapuri-Katarqalai"] = "wsv", ["Wotu"] = "wtw", ["Woun Meu"] = "noa", ["Written Oirat"] = "xwo", ["Wu"] = "wuu", ["Wudu"] = "wud", ["Wuhuan"] = "qfa-xgx-wuh", ["Wulguru"] = "aus-wul", ["Wuliwuli"] = "wlu", ["Wulna"] = "wux", ["Wumboko"] = "bqm", ["Wumbvu"] = "wum", ["Wumeng Nasu"] = "ywu", ["Wunai Bunu"] = "bwn", ["Wunambal"] = "wub", ["Wurrugu"] = "wur", ["Wusa Nasu"] = "yig", ["Wushi"] = "bse", ["Wusi"] = "wsi", ["Wutung"] = "wut", ["Wutunhua"] = "wuh", ["Wuvulu-Aua"] = "wuv", ["Wyandot"] = "wya", ["Wára"] = "tci", ["Wãpha"] = "juw", ["Wè Northern"] = "wob", ["Wè Southern"] = "gxx", ["Wè Western"] = "wec", ["Xadani Zapotec"] = "zax", ["Xakriabá"] = "xkr", ["Xamtanga"] = "xan", ["Xanaguía Zapotec"] = "ztg", ["Xaragure"] = "axx", ["Xavante"] = "xav", ["Xerénte"] = "xer", ["Xetá"] = "xet", ["Xhosa"] = "xh", ["Xianbei"] = "qfa-xgx-xbi", ["Xiang"] = "hsn", ["Xibe"] = "sjo", ["Xicotepec de Juárez Totonac"] = "too", ["Xinca"] = "xin", ["Xingú Asuriní"] = "asn", ["Xipaya"] = "xiy", ["Xiri"] = "xii", ["Xiriâna"] = "xir", ["Xishanba Lalo"] = "ywt", ["Xocó"] = "sai-xoc", ["Xokleng"] = "xok", ["Xukurú"] = "xoo", ["Xwela Gbe"] = "xwe", ["Xârâcùù"] = "ane", ["Yaa"] = "iyx", ["Yaaku"] = "muu", ["Yabarana"] = "yar", ["Yabaâna"] = "ybn", ["Yaben"] = "ybm", ["Yabong"] = "ybo", ["Yabula Yabula"] = "yxy", ["Yace"] = "ekr", ["Yaeyama"] = "rys", ["Yafi"] = "wfg", ["Yagara"] = "yxg", ["Yagaria"] = "ygr", ["Yagnobi"] = "yai", ["Yagomi"] = "ygm", ["Yagua"] = "yad", ["Yagwoia"] = "ygw", ["Yahadian"] = "ner", ["Yahang"] = "rhp", ["Yahuna"] = "ynu", ["Yaka"] = "yaf", ["Yakaikeke"] = "ykk", ["Yakan"] = "yka", ["Yakima"] = "yak", ["Yakkha"] = "ybh", ["Yakoma"] = "yky", ["Yakut"] = "sah", ["Yala"] = "yba", ["Yalahatan"] = "jal", ["Yalakalore"] = "xyl", ["Yalarnnga"] = "ylr", ["Yale"] = "nce", ["Yaleba"] = "ylb", ["Yalunka"] = "yal", ["Yalálag Zapotec"] = "zpu", ["Yamap"] = "ymp", ["Yamba"] = "yam", ["Yambes"] = "ymb", ["Yambeta"] = "yat", ["Yamdena"] = "jmd", ["Yameo"] = "yme", ["Yami"] = "tao", ["Yaminahua"] = "yaa", ["Yamongeri"] = "ymg", ["Yamphu"] = "ybi", ["Yan-nhangu"] = "jay", ["Yana"] = "ynn", ["Yanda"] = "yda", ["Yanda Dogon"] = "dym", ["Yandjibara"] = "xyb", ["Yandruwandha"] = "ynd", ["Yanesha'"] = "ame", ["Yangben"] = "yav", ["Yangkaal"] = "aus-ynk", ["Yangkam"] = "bsx", ["Yangman"] = "jng", ["Yango"] = "yng", ["Yangulam"] = "ynl", ["Yangum Dey"] = "yde", ["Yangum Gel"] = "ygl", ["Yangum Mon"] = "ymo", ["Yankunytjatjara"] = "kdd", ["Yanomamö"] = "guu", ["Yanomámi"] = "wca", ["Yansi"] = "yns", ["Yanyuwa"] = "jao", ["Yao"] = "yao", ["Yao (South America)"] = "sai-yao", ["Yaosakor Asmat"] = "asy", ["Yaouré"] = "yre", ["Yapese"] = "yap", ["Yapunda"] = "yev", ["Yaqay"] = "jaq", ["Yaqui"] = "yaq", ["Yarawata"] = "yrw", ["Yareba"] = "yrb", ["Yareni Zapotec"] = "zae", ["Yarli"] = "yxl", ["Yarluyandi"] = "yry", ["Yaroamë"] = "yro", ["Yarumá"] = "sai-yar", ["Yarí"] = "yri", ["Yasa"] = "yko", ["Yatay"] = "yty", ["Yatee Zapotec"] = "zty", ["Yatzachi Zapotec"] = "zav", ["Yaul"] = "yla", ["Yaur"] = "jau", ["Yautepec Zapotec"] = "zpb", ["Yavitero"] = "yvt", ["Yawa"] = "yva", ["Yawalapití"] = "yaw", ["Yawanawa"] = "ywn", ["Yawarawarga"] = "yww", ["Yaweyuha"] = "yby", ["Yawijibaya"] = "jbw", ["Yawiyo"] = "ybx", ["Yawuru"] = "ywr", ["Yaygir"] = "xya", ["Yazghulami"] = "yah", ["Yei"] = "jei", ["Yekhee"] = "ets", ["Yekora"] = "ykr", ["Yele"] = "yle", ["Yelmek"] = "jel", ["Yelogu"] = "ylg", ["Yemba"] = "ybb", ["Yemeni Arabic"] = "ayn", ["Yemsa"] = "jnj", ["Yendang"] = "yen", ["Yeni"] = "yei", ["Yeniche"] = "yec", ["Yerakai"] = "yra", ["Yeretuar"] = "gop", ["Yerong"] = "yrn", ["Yerukula"] = "yeu", ["Yeskwa"] = "yes", ["Yessan-Mayo"] = "yss", ["Yetfa"] = "yet", ["Yevanic"] = "yej", ["Yeyi"] = "yey", ["Yiddish"] = "yi", ["Yidgha"] = "ydg", ["Yidiny"] = "yii", ["Yil"] = "yll", ["Yilan Creole"] = "ycr", ["Yimas"] = "yee", ["Yimchungru Naga"] = "yim", ["Yinbaw Karen"] = "kvu", ["Yinchia"] = "yin", ["Yindjibarndi"] = "yij", ["Yindjilandji"] = "yil", ["Yine"] = "pib", ["Yinggarda"] = "yia", ["Yinhawangka"] = "ywg", ["Yiningayi"] = "ygi", ["Yintale Karen"] = "kvy", ["Yinwum"] = "yxm", ["Yir-Yoront"] = "yiy", ["Yirandali"] = "ljw", ["Yis"] = "yis", ["Yitha Yitha"] = "xth", ["Yoba"] = "yob", ["Yocoboué Dida"] = "gud", ["Yogad"] = "yog", ["Yoidik"] = "ydk", ["Yoke"] = "yki", ["Yola"] = "yol", ["Yolmo"] = "scp", ["Yolngu Sign Language"] = "ygs", ["Yoloxochitl Mixtec"] = "xty", ["Yom"] = "pil", ["Yombe"] = "yom", ["Yonaguni"] = "yoi", ["Yong"] = "yno", ["Yongkom"] = "yon", ["Yopno"] = "yut", ["Yora"] = "mts", ["Yoron"] = "yox", ["Yorta Yorta"] = "xyy", ["Yoruba"] = "yo", ["Yosondúa Mixtec"] = "mpm", ["Youle Jinuo"] = "jiu", ["Younuo Bunu"] = "buh", ["Yout Wam"] = "ytw", ["Yoy"] = "yoy", ["Yuaga"] = "nua", ["Yucatec Maya"] = "yua", ["Yucatec Maya Sign Language"] = "msd", ["Yuchi"] = "yuc", ["Yucuañe Mixtec"] = "mvg", ["Yucuna"] = "ycn", ["Yug"] = "yug", ["Yugambal"] = "yub", ["Yugoslavian Sign Language"] = "ysl", ["Yugul"] = "ygu", ["Yuhup"] = "yab", ["Yuki"] = "yuk", ["Yukpa"] = "yup", ["Yukuben"] = "ybl", ["Yulu"] = "yul", ["Yuma"] = "yum", ["Yumana"] = "awd-yum", ["Yup'ik"] = "esu", ["Yupiltepeque"] = "nai-yup", ["Yupua"] = "sai-yup", ["Yuqui"] = "yuq", ["Yuracare"] = "yuz", ["Yuri"] = "sai-yri", ["Yurok"] = "yur", ["Yuru"] = "ljx", ["Yurumanguí"] = "sai-yur", ["Yurutí"] = "yui", ["Yutanduchi Mixtec"] = "mab", ["Yuwana"] = "yau", ["Yuyu"] = "yxu", ["Yámana"] = "yag", ["Zaachila Zapotec"] = "ztx", ["Zabana"] = "kji", ["Zacatepec Chatino"] = "ctz", ["Zacatlán-Ahuacatlán-Tepetzintla Nahuatl"] = "nhi", ["Zaghawa"] = "zag", ["Zaiwa"] = "atb", ["Zakhring"] = "zkr", ["Zambian Sign Language"] = "zsl", ["Zan Gula"] = "zna", ["Zanaki"] = "zak", ["Zande"] = "zne", ["Zangskari"] = "zau", ["Zangwal"] = "zah", ["Zaniza Zapotec"] = "zpw", ["Zapotec"] = "zap", ["Zaramo"] = "zaj", ["Zari"] = "zaz", ["Zarma"] = "dje", ["Zauzou"] = "zal", ["Zay"] = "zwa", ["Zayein Karen"] = "kxk", ["Zayse-Zergulla"] = "zay", ["Zazaki"] = "zza", ["Zazao"] = "jaj", ["Zbu"] = "sit-zbu", ["Zealandic"] = "zea", ["Zeem"] = "zua", ["Zemba"] = "dhm", ["Zeme Naga"] = "nzm", ["Zemgalian"] = "xzm", ["Zenag"] = "zeg", ["Zenaga"] = "zen", ["Zenzontepec Chatino"] = "czn", ["Zhaba"] = "zhb", ["Zhang-Zhung"] = "xzh", ["Zhire"] = "zhi", ["Zhoa"] = "zhw", ["Zhuang"] = "za", ["Zhár"] = "jjr", ["Zia"] = "zia", ["Zialo"] = "zil", ["Zigula"] = "ziw", ["Zimakani"] = "zik", ["Zimba"] = "zmb", ["Zimbabwe Sign Language"] = "zib", ["Zinza"] = "zin", ["Zipser German"] = "gmw-zps", ["Zire"] = "sih", ["Zirenkel"] = "zrn", ["Ziriya"] = "zir", ["Zizilivakan"] = "ziz", ["Zo'é"] = "pto", ["Zokhuo"] = "yzk", ["Zoogocho Zapotec"] = "zpq", ["Zotung Chin"] = "czt", ["Zou"] = "zom", ["Zulgo-Gemzek"] = "gnd", ["Zulu"] = "zu", ["Zumaya"] = "zuy", ["Zumbun"] = "jmb", ["Zuni"] = "zun", ["Zuojiang Zhuang"] = "zzj", ["Zuwara"] = "ber-zuw", ["Zyphe"] = "zyp", ["Záparo"] = "zro", ["Àhàn"] = "ahn", ["Áncá"] = "acb", ["Ömie"] = "aom", ["Önge"] = "oon", ["ǀXam"] = "xam", ["ǁAni"] = "hnh", ["ǁGana"] = "gnk", ["ǁXegwi"] = "xeg", ["ǂHoan"] = "huc", ["ǃKung"] = "khi-kun", ["ǃXóõ"] = "nmn", } 0h8o4wim0hplu33tuhdoqj7cdcp2e9x 487553 487547 2026-09-01T15:25:39Z SM7 6218 असमिया, हिंदी, बिहारी 487553 Scribunto text/plain return { ["'Are'are"] = "alu", ["A'ou"] = "aou", ["A-Hmao"] = "hmd", ["A-Pucikwar"] = "apq", ["Aari"] = "aiw", ["Aasax"] = "aas", ["Aba"] = "utp", ["Abaga"] = "abg", ["Abai"] = "poz-abi", ["Abai Sungai"] = "abf", ["Abanyom"] = "abm", ["Abau"] = "aau", ["Abaza"] = "abq", ["Abenaki"] = "abe", ["Abenlen Ayta"] = "abp", ["Abidji"] = "abi", ["Abinomn"] = "bsa", ["Abipon"] = "axb", ["Abishira"] = "ash", ["Abkhaz"] = "ab", ["Abom"] = "aob", ["Abon"] = "abo", ["Abron"] = "abr", ["Abu"] = "ado", ["Abu' Arapesh"] = "aah", ["Abua"] = "abn", ["Abui"] = "abz", ["Abun"] = "kgr", ["Abung"] = "abl", ["Abure"] = "abu", ["Abureni"] = "mgj", ["Abé"] = "aba", ["Acatepec Me'phaa"] = "tpx", ["Acehnese"] = "ace", ["Achagua"] = "aca", ["Achang"] = "acn", ["Ache"] = "yif", ["Acheron"] = "acz", ["Achi"] = "acr", ["Acholi"] = "ach", ["Achuar"] = "acu", ["Achumawi"] = "acv", ["Aché"] = "guq", ["Acroá"] = "acs", ["Adabe"] = "adb", ["Adai"] = "xad", ["Adamorobe Sign Language"] = "ads", ["Adang"] = "adn", ["Adangbe"] = "adq", ["Adangme"] = "ada", ["Adap"] = "adp", ["Adasen"] = "tiu", ["Adele"] = "ade", ["Adhola"] = "adh", ["Adi"] = "adi", ["Adioukrou"] = "adj", ["Adithinngithigh"] = "dth", ["Adivasi Oriya"] = "ort", ["Adiwasi Garasia"] = "gas", ["Adja"] = "ajg", ["Adnyamathanha"] = "adt", ["Adonara"] = "adr", ["Aduge"] = "adu", ["Adyghe"] = "ady", ["Adzera"] = "adz", ["Aeka"] = "aez", ["Aekyom"] = "awi", ["Aequian"] = "xae", ["Aer"] = "aeq", ["Afade"] = "aal", ["Afar"] = "aa", ["Afghan Sign Language"] = "afg", ["Afitti"] = "aft", ["Afra"] = "ulf", ["Afrihili"] = "afh", ["Afrikaans"] = "af", ["Afro-Seminole Creole"] = "afs", ["Agarabi"] = "agd", ["Agariya"] = "agi", ["Agatu"] = "agc", ["Agavotaguerra"] = "avo", ["Agawam"] = "alg-aga", ["Aghem"] = "agq", ["Aghu"] = "ahh", ["Aghu Tharrnggala"] = "gtu", ["Aghul"] = "agx", ["Aghwan"] = "xag", ["Agi"] = "aif", ["Agob"] = "kit", ["Agoi"] = "ibm", ["Aguacateca"] = "agu", ["Aguano"] = "aga", ["Aguaruna"] = "agr", ["Aguna"] = "aug", ["Agusan Manobo"] = "msm", ["Agutaynen"] = "agn", ["Agwagwune"] = "yay", ["Ahanta"] = "aha", ["Ahirani"] = "ahr", ["Ahom"] = "aho", ["Ahtna"] = "aht", ["Ahwai"] = "nfd", ["Ai-Cham"] = "aih", ["Aighon"] = "aix", ["Aikanã"] = "tba", ["Aiklep"] = "mwg", ["Aimele"] = "ail", ["Aimol"] = "aim", ["Ainbai"] = "aic", ["Ainu"] = "ain", ["Aiome"] = "aki", ["Airoran"] = "air", ["Aisi"] = "mmq", ["Aiton"] = "aio", ["Aiwoo"] = "nfl", ["Aja"] = "aja", ["Ajagua"] = "sai-ajg", ["Ajawa"] = "ajw", ["Ajië"] = "aji", ["Ajyíninka Apurucayali"] = "cpc", ["Ak"] = "akq", ["Aka (Central Africa)"] = "axk", ["Aka (Sudan)"] = "soh", ["Aka-Bea"] = "abj", ["Aka-Bo"] = "akm", ["Aka-Cari"] = "aci", ["Aka-Kede"] = "akx", ["Aka-Kol"] = "aky", ["Aka-Kora"] = "ack", ["Akan"] = "ak", ["Akar-Bale"] = "acl", ["Akaselem"] = "aks", ["Akatek"] = "knj", ["Akawaio"] = "ake", ["Ake"] = "aik", ["Akebu"] = "keu", ["Akei"] = "tsr", ["Akeu"] = "aeu", ["Akha"] = "ahk", ["Akhvakh"] = "akv", ["Akkadian"] = "akk", ["Akkala Sami"] = "sia", ["Aklanon"] = "akl", ["Akolet"] = "akt", ["Akoose"] = "bss", ["Akoye"] = "miw", ["Akpa"] = "akf", ["Akpes"] = "ibe", ["Akrukay"] = "afi", ["Akuku"] = "ayk", ["Akum"] = "aku", ["Akuntsu"] = "aqz", ["Akurio"] = "ako", ["Akuwagel"] = "bey", ["Akwa"] = "akw", ["Akyaung Ari"] = "nqy", ["Al-Sayyid Bedouin Sign Language"] = "syy", ["Alaba"] = "alw", ["Alabama"] = "akz", ["Alabat Island Agta"] = "dul", ["Alacatlatzala Mixtec"] = "mim", ["Alago"] = "ala", ["Alagwa"] = "wbj", ["Alak"] = "alk", ["Alamblak"] = "amp", ["Alangan"] = "alj", ["Alapmunte"] = "apv", ["Alas-Kluet Batak"] = "btz", ["Alawa"] = "alh", ["Alazapa"] = "nai-ala", ["Albanian"] = "sq", ["Albanian Sign Language"] = "sqk", ["Alcozauca Mixtec"] = "xta", ["Alege"] = "alf", ["Alekano"] = "gah", ["Alemannic German"] = "gsw", ["Aleut"] = "ale", ["Algerian Arabic"] = "arq", ["Algerian Sign Language"] = "asp", ["Algonquin"] = "alq", ["Ali"] = "aiy", ["Alladian"] = "ald", ["Allar"] = "all", ["Allentiac"] = "sai-all", ["Alngith"] = "aid", ["Alo Phola"] = "ypo", ["Alor"] = "aol", ["Aloápam Zapotec"] = "zaq", ["Alsea"] = "aes", ["Alu"] = "mte", ["Alu Kurumba"] = "xua", ["Alugu"] = "aub", ["Alumu-Tesu"] = "aab", ["Alune"] = "alp", ["Alungul"] = "aus-alu", ["Aluo"] = "yna", ["Alur"] = "alz", ["Alutiiq"] = "ems", ["Alutor"] = "alr", ["Alviri-Vidari"] = "avd", ["Alyawarr"] = "aly", ["Ama"] = "amm", ["Amahai"] = "amq", ["Amahuaca"] = "amc", ["Amaimon"] = "ali", ["Amal"] = "aad", ["Amanab"] = "amn", ["Amanayé"] = "ama", ["Amara"] = "aie", ["Amarakaeri"] = "amr", ["Amarasi"] = "aaz", ["Amarizana"] = "awd-ama", ["Amasi"] = "alv-ama", ["Amatlán Zapotec"] = "zpo", ["Amba"] = "rwm", ["Ambai"] = "amk", ["Ambakich"] = "aew", ["Ambala Ayta"] = "abc", ["Ambelau"] = "amv", ["Ambele"] = "ael", ["Amblong"] = "alm", ["Ambo"] = "amb", ["Ambonese Malay"] = "abs", ["Ambrak"] = "aag", ["Ambul"] = "apo", ["Ambulas"] = "abt", ["Amdang"] = "amj", ["Amele"] = "aey", ["American Sign Language"] = "ase", ["Amganad Ifugao"] = "ifa", ["Amharic"] = "am", ["Ami"] = "amy", ["Amis"] = "ami", ["Ammonite"] = "sem-amm", ["Amo"] = "amo", ["Amol"] = "alx", ["Amoltepec Mixtec"] = "mbz", ["Amondawa"] = "adw", ["Amorite"] = "sem-amo", ["Ampanang"] = "apg", ["Ampari Dogon"] = "aqd", ["Amri Karbi"] = "ajz", ["Amto"] = "amt", ["Amurdag"] = "amg", ["Ana Tinga Dogon"] = "dti", ["Anaang"] = "anw", ["Anakalangu"] = "akg", ["Anal"] = "anm", ["Anam"] = "pda", ["Anambé"] = "aan", ["Anamgura"] = "imi", ["Anasi"] = "bpo", ["Anauyá"] = "awd-ana", ["Ancient Greek"] = "grc", ["Ancient Ligurian"] = "xlg", ["Ancient Macedonian"] = "xmk", ["Ancient North Arabian"] = "xna", ["Ancient Zapotec"] = "xzp", ["Andai"] = "afd", ["Andajin"] = "ajn", ["Andalusian Arabic"] = "xaa", ["अंडमान क्रियोल हिंदी"] = "hca", ["Andaqui"] = "ana", ["Andarum"] = "aod", ["Andegerebinha"] = "adg", ["Andh"] = "anr", ["Andi"] = "ani", ["Andio"] = "bzb", ["Andjingith"] = "aus-and", ["Andoa"] = "anb", ["Andoque"] = "ano", ["Andoquero"] = "sai-and", ["Andra-Hus"] = "anx", ["Aneityum"] = "aty", ["Anem"] = "anz", ["Aneme Wake"] = "aby", ["Anfillo"] = "myo", ["Angaataha"] = "agm", ["Angaité"] = "aqt", ["Angal"] = "age", ["Angal Enen"] = "aoe", ["Angal Heneng"] = "akh", ["Angami"] = "njm", ["Angevin"] = "roa-ang", ["Angguruk Yali"] = "yli", ["Angika"] = "anp", ["Angkamuthi"] = "avm", ["Angkola Batak"] = "akb", ["Angkula"] = "aus-ang", ["Angloromani"] = "rme", ["Angolar"] = "aoa", ["Angor"] = "agg", ["Angoram"] = "aog", ["Angosturas Tunebo"] = "tnd", ["Anguthimri"] = "awg", ["Ani Phowa"] = "ypn", ["Anii"] = "blo", ["Animere"] = "anf", ["Anindilyakwa"] = "aoi", ["Anjam"] = "boj", ["Ankave"] = "aak", ["Anmatyerre"] = "amx", ["Annobonese"] = "fab", ["Anong"] = "nun", ["Anor"] = "anj", ["Anserma"] = "ans", ["Ansus"] = "and", ["Antakarinya"] = "ant", ["Antigua and Barbuda Creole English"] = "aig", ["Antillean Creole"] = "gcf", ["Anu"] = "anl", ["Anuak"] = "anu", ["Anufo"] = "cko", ["Anuki"] = "aui", ["Anus"] = "auq", ["Anuta"] = "aud", ["Anyi"] = "any", ["Anyin Morofo"] = "mtb", ["Ao"] = "njo", ["Aoheng"] = "pni", ["Aore"] = "aor", ["Ap Ma"] = "kbx", ["Apalachee"] = "xap", ["Apalaí"] = "apy", ["Apali"] = "ena", ["Apasco-Apoala Mixtec"] = "mip", ["Apatani"] = "apt", ["Apiaká"] = "api", ["Apinayé"] = "apn", ["Apma"] = "app", ["Apolista"] = "awd-apo", ["Aproumu Aizi"] = "ahp", ["Apurinã"] = "apu", ["Aputai"] = "apx", ["Aquitanian"] = "xaq", ["Arabana"] = "ard", ["Arabela"] = "arl", ["Arabic"] = "ar", ["Aragonese"] = "an", ["Araki"] = "akr", ["Arakwal"] = "rkw", ["Aralle-Tabulahan"] = "atq", ["Aramaic"] = "arc", ["Arammba"] = "stk", ["Aranadan"] = "aaf", ["Aranama-Tamique"] = "xrt", ["Arandai"] = "jbj", ["Araona"] = "aro", ["Arapaho"] = "arp", ["Arapaso"] = "arj", ["Arara-Karo"] = "arr", ["Ararandewára"] = "xaj", ["Arawak"] = "arw", ["Araweté"] = "awt", ["Arawum"] = "awm", ["Arbore"] = "arv", ["Archi"] = "aqc", ["Ardhamagadhi Prakrit"] = "pka", ["Are"] = "mwc", ["Areba"] = "aea", ["Arem"] = "aem", ["Argentine Sign Language"] = "aed", ["Argobba"] = "agj", ["Arguni"] = "agf", ["Arhuaco"] = "arh", ["Arhâ"] = "aqr", ["Arhö"] = "aok", ["Ari"] = "aac", ["Aribwatsa"] = "laz", ["Aribwaung"] = "ylu", ["Arifama-Miniafia"] = "aai", ["Arigidi"] = "aqg", ["Arikapú"] = "ark", ["Arikara"] = "ari", ["Arikem"] = "ait", ["Arin"] = "xrn", ["Aringa"] = "luc", ["Armazic"] = "xrm", ["Armenian"] = "hy", ["Armenian Sign Language"] = "aen", ["Aromanian"] = "rup", ["Arop-Lokep"] = "apr", ["Arop-Sissano"] = "aps", ["Arosi"] = "aia", ["Arritinngithigh"] = "rrt", ["Arta"] = "atz", ["Arua"] = "aru", ["Aruamu"] = "msy", ["Aruek"] = "aur", ["Aruop"] = "lsr", ["Arutani"] = "atx", ["Aruá"] = "arx", ["As"] = "asz", ["Asaro'o"] = "mtv", ["Ashe"] = "ahs", ["Ashkun"] = "ask", ["Asho Chin"] = "csh", ["Ashokan Prakrit"] = "inc-ash", ["Ashraaf"] = "cus-ash", ["Asháninka"] = "cni", ["Ashéninka Pajonal"] = "cjo", ["Ashéninka Perené"] = "prq", ["Asi"] = "bno", ["Asilulu"] = "asl", ["Askopan"] = "eiv", ["Asoa"] = "asv", ["असमिया"] = "as", ["Assan"] = "xss", ["Assangori"] = "sjg", ["Assiniboine"] = "asb", ["Assyrian Neo-Aramaic"] = "aii", ["Asturian"] = "ast", ["Asu"] = "aum", ["Asue Awyu"] = "psa", ["Asumboa"] = "aua", ["Asunción Mixtepec Zapotec"] = "zoo", ["Asuri"] = "asr", ["Ata"] = "atm", ["Ata Manobo"] = "atd", ["Atakapa"] = "aqp", ["Atampaya"] = "amz", ["Atanques"] = "cba-ata", ["Atatláhuca Mixtec"] = "mib", ["Atayal"] = "tay", ["Atemble"] = "ate", ["Ateso"] = "teo", ["Athpare"] = "aph", ["Ati"] = "atk", ["Atikamekw"] = "atj", ["Atohwaim"] = "aqm", ["Atong (Cameroon)"] = "ato", ["Atong (India)"] = "aot", ["Atorada"] = "aox", ["Atsahuaca"] = "atc", ["Atsam"] = "cch", ["Atsugewi"] = "atw", ["Attapady Kurumba"] = "pkr", ["Attié"] = "ati", ["Au"] = "avt", ["Auhelawa"] = "kud", ["Aukan"] = "djk", ["Aulua"] = "aul", ["Aurá"] = "aux", ["Aushi"] = "auh", ["Aushiri"] = "avs", ["Auslan"] = "asf", ["Austral"] = "aut", ["Australian Aboriginal Sign Language"] = "asw", ["Austrian Sign Language"] = "asq", ["Austronesian Mari"] = "hob", ["Auwe"] = "smf", ["Auyana"] = "auy", ["Auye"] = "auu", ["Auyokawa"] = "auo", ["Avar"] = "av", ["Avatime"] = "avn", ["Avau"] = "avb", ["Avava"] = "tmb", ["Avestan"] = "ae", ["Avikam"] = "avi", ["Avokaya"] = "avu", ["Avá-Canoeiro"] = "avv", ["Awa (China)"] = "vwa", ["Awa (New Guinea)"] = "awb", ["Awa-Cuaiquer"] = "kwi", ["Awabakal"] = "awk", ["Awadhi"] = "awa", ["Awak"] = "awo", ["Awar"] = "aya", ["Awara"] = "awx", ["Awbono"] = "awh", ["Aweer"] = "bob", ["Awera"] = "awr", ["Awetí"] = "awe", ["Awing"] = "azo", ["Awjila"] = "auj", ["Awngi"] = "awn", ["Awngthim"] = "gwm", ["Awtuw"] = "kmn", ["Awu"] = "yiu", ["Awun"] = "aww", ["Awutu"] = "afu", ["Awyi"] = "auw", ["Axamb"] = "ahb", ["Axi Yi"] = "yix", ["Ayabadhu"] = "ayd", ["Ayautla Mazatec"] = "vmy", ["Ayere"] = "aye", ["Ayerrerenge"] = "axe", ["Ayi"] = "ayq", ["Ayizi"] = "yyz", ["Ayizo"] = "ayb", ["Aymara"] = "ay", ["Aynu"] = "aib", ["Ayomán"] = "sai-ayo", ["Ayoquesco Zapotec"] = "zaf", ["Ayoreo"] = "ayo", ["Ayu"] = "ayu", ["Ayutla Mixtec"] = "miy", ["Azerbaijani"] = "az", ["Azha"] = "aza", ["Azhe"] = "yiz", ["Azoyú Me'phaa"] = "tpc", ["Baa"] = "kwb", ["Baagandji"] = "drl", ["Baan"] = "bvj", ["Baangi"] = "bqx", ["Baatonum"] = "bba", ["Baba"] = "bbw", ["Baba Malay"] = "mbf", ["Babango"] = "bbm", ["Babanki"] = "bbk", ["Babatana"] = "baa", ["Babine-Witsuwit'en"] = "bcr", ["Babole"] = "bvx", ["Babungo"] = "bav", ["Babuza"] = "bzg", ["Bacama"] = "bcy", ["Bacanese Malay"] = "btj", ["Bactrian"] = "xbc", ["Bada"] = "bhz", ["Badaga"] = "bfq", ["Badanchi"] = "bau", ["Bade"] = "bde", ["Badeshi"] = "bdz", ["Badimaya"] = "bia", ["Badui"] = "bac", ["Badyara"] = "pbp", ["Baeggu"] = "bvd", ["Baekje"] = "pkc", ["Baelelea"] = "bvc", ["Baenan"] = "sai-bae", ["Baetora"] = "btr", ["Bafanji"] = "bfj", ["Bafaw"] = "bwt", ["Bafia"] = "ksf", ["Bafut"] = "bfd", ["Baga Kaloum"] = "bqf", ["Baga Koga"] = "bgo", ["Baga Manduri"] = "bmd", ["Baga Pokur"] = "bcg", ["Baga Sitemu"] = "bsp", ["Baga Sobané"] = "bsv", ["Bagheli"] = "bfy", ["Bagirmi"] = "bmi", ["Bago-Kusuntu"] = "bqg", ["Bagri"] = "bgq", ["Bagua"] = "sai-bag", ["Bagupi"] = "bpi", ["Bagusa"] = "bqb", ["Bagvalal"] = "kva", ["Baha"] = "yha", ["Baham"] = "bdw", ["Bahamian Creole"] = "bah", ["Baharna Arabic"] = "abv", ["Bahau"] = "bhv", ["Bahinemo"] = "bjh", ["Bahing"] = "bhj", ["Bahnar"] = "bdq", ["Bahonsuai"] = "bsu", ["Bai"] = "bdj", ["Baibai"] = "bbf", ["Baikeno"] = "bkx", ["Baima"] = "bqh", ["Baimak"] = "bmx", ["Bainouk-Gunyaamolo"] = "bcz", ["Bainouk-Gunyuño"] = "bab", ["Bainouk-Samik"] = "bcb", ["Baiso"] = "bsw", ["Baissa Fali"] = "fah", ["Bajan"] = "bjs", ["Bajelani"] = "bjm", ["Baka"] = "bkc", ["Bakairí"] = "bkq", ["Bakaka"] = "bqz", ["Bakhtiari"] = "bqi", ["Baki"] = "bki", ["Bakoko"] = "bkh", ["Bakole"] = "kme", ["Bakpinka"] = "bbs", ["Bakulung"] = "bbu", ["Bakumpai"] = "bkr", ["Bakung"] = "xkl", ["Bakwé"] = "bjw", ["Balaesang"] = "bls", ["Balangao"] = "blw", ["Balangingi"] = "sse", ["Balanta-Ganja"] = "bjt", ["Balanta-Kentohe"] = "ble", ["Balantak"] = "blz", ["Balau"] = "blg", ["Baldemu"] = "bdn", ["Bali"] = "bcp", ["Baliledo"] = "poz-bal", ["Balinese"] = "ban", ["Balinese Malay"] = "mhp", ["Balkan Gagauz Turkish"] = "bgx", ["Balkan Romani"] = "rmn", ["Balo"] = "bqo", ["Baloi"] = "biz", ["Balong"] = "bnt-bal", ["Balti"] = "bft", ["Baltic Romani"] = "rml", ["Baluan-Pam"] = "blq", ["Baluchi"] = "bal", ["Bamako Sign Language"] = "bog", ["Bamali"] = "bbq", ["Bambalang"] = "bmo", ["Bambam"] = "ptu", ["Bambara"] = "bm", ["Bambassi"] = "myf", ["Bambili-Bambui"] = "baw", ["Bamenyam"] = "bce", ["Bamu"] = "bcf", ["Bamukumbit"] = "bqt", ["Bamum"] = "bax", ["Bamunka"] = "bvm", ["Bamwe"] = "bmg", ["Ban Khor Sign Language"] = "bfk", ["Bana"] = "bcw", ["Banam Bay"] = "vrt", ["Banao Itneg"] = "bjx", ["Banaro"] = "byz", ["Banda"] = "bnd", ["Banda Malay"] = "bpq", ["Banda-Bambari"] = "liy", ["Banda-Banda"] = "bpd", ["Banda-Mbrès"] = "bqk", ["Banda-Ndélé"] = "bfl", ["Banda-Yangere"] = "yaj", ["Bandi"] = "bza", ["Bandial"] = "bqj", ["Bandjalang"] = "bdy", ["Bangala"] = "bxg", ["Bangandu"] = "bgf", ["Bangba"] = "bbe", ["Banggai"] = "bgz", ["Bangi"] = "bni", ["Bangime"] = "dba", ["Bangka"] = "mfb", ["Bangolan"] = "bgj", ["Bangubangu"] = "bnx", ["Bangwinji"] = "bsj", ["Baniva"] = "bvv", ["Baniwa"] = "bwi", ["Banjarese"] = "bjn", ["Banka"] = "bxw", ["Bankan Tey Dogon"] = "dbw", ["Bankon"] = "abb", ["Banoni"] = "bcm", ["Bantawa"] = "bap", ["Bantayanon"] = "bfx", ["Bantik"] = "bnq", ["Banyumasan"] = "map-bms", ["Baoule"] = "bci", ["Baraamu"] = "brd", ["Barai"] = "bbb", ["Barakai"] = "baj", ["Baram Kayan"] = "kys", ["Barama"] = "bbg", ["Barambu"] = "brm", ["Baramu"] = "bmz", ["Barapasi"] = "brp", ["Baras"] = "brs", ["Barasana"] = "bsn", ["Barbareño"] = "boi", ["Barclayville Grebo"] = "gry", ["Bardi"] = "bcj", ["Barein"] = "bva", ["Bargam"] = "mlp", ["Bari"] = "bfa", ["Bariai"] = "bch", ["Bariji"] = "bjc", ["Barikanchi"] = "bxo", ["Barikewa"] = "jbk", ["Barngarla"] = "bjb", ["Barok"] = "bjk", ["Barombi"] = "bbi", ["Barranbinya"] = "aus-bra", ["Barro Negro Tunebo"] = "tbn", ["Barrow Point"] = "bpt", ["Baruga"] = "bjz", ["Barunggam"] = "aus-brm", ["Baruya"] = "byr", ["Barwe"] = "bwg", ["Barzani Jewish Neo-Aramaic"] = "bjf", ["Baré"] = "bae", ["Barí"] = "mot", ["Basa"] = "bzw", ["Basa-Gumna"] = "bsl", ["Basa-Gurmana"] = "buj", ["Basaa"] = "bas", ["Basap"] = "bdb", ["Basay"] = "byq", ["Bashkardi"] = "bsg", ["Bashkir"] = "ba", ["Basketo"] = "bst", ["Basque"] = "eu", ["Bassa"] = "bsq", ["Bassa-Kontagora"] = "bsr", ["Bassari"] = "bsc", ["Bassossi"] = "bsi", ["Bata"] = "bta", ["Bataan Ayta"] = "ayt", ["Batad Ifugao"] = "ifb", ["Batanga"] = "bnm", ["Batek"] = "btq", ["Bateri"] = "btv", ["Bathari"] = "bhm", ["Bati (Cameroon)"] = "btc", ["Bati (Indonesia)"] = "bvt", ["Bats"] = "bbl", ["Batu"] = "btu", ["Batui"] = "zbt", ["Batuley"] = "bay", ["Bau"] = "bbd", ["Bau Bidayuh"] = "sne", ["Bauchi"] = "bsf", ["Baure"] = "brg", ["Bauria"] = "bge", ["Bauro"] = "bxa", ["Bauwaki"] = "bwk", ["Bauzi"] = "bvz", ["Bavarian"] = "bar", ["Bawm Chin"] = "bgr", ["Bay Miwok"] = "mkq", ["Bayali"] = "bjy", ["Baybayanon"] = "bvy", ["Baygo"] = "byg", ["Bayogoula"] = "nai-bay", ["Bayono"] = "byl", ["Bayot"] = "bda", ["Bayungu"] = "bxj", ["Bazigar"] = "bfr", ["Baïnounk Gubëeher"] = "alv-bgu", ["Beami"] = "beo", ["Beaver"] = "bea", ["Beba"] = "bfp", ["Bebe"] = "bzv", ["Bebele"] = "beb", ["Bebeli"] = "bek", ["Bebil"] = "bxp", ["Bedik"] = "tnr", ["Bedjond"] = "bjv", ["Bedoanas"] = "bed", ["Beeke"] = "bkf", ["Beele"] = "bxq", ["Beembe"] = "beq", ["Beezen"] = "bnz", ["Befang"] = "bby", ["Begbere-Ejar"] = "bqv", ["Beja"] = "bej", ["Bekati'"] = "bei", ["Bekwarra"] = "bkv", ["Bekwel"] = "bkw", ["Belait"] = "beg", ["Belanda Bor"] = "bxb", ["Belanda Viri"] = "bvi", ["Belarusian"] = "be", ["Belhariya"] = "byw", ["Beli"] = "blm", ["Belizean Creole"] = "bzj", ["Bella Coola"] = "blc", ["Bellari"] = "brw", ["Bemba"] = "bem", ["Bembe"] = "bmb", ["Ben Tey"] = "dbt", ["Bena"] = "yun", ["Benabena"] = "bef", ["Bench"] = "bcq", ["Bende"] = "bdp", ["Bendi"] = "bct", ["Beneraf"] = "bnv", ["Beng"] = "nhb", ["Benga"] = "bng", ["बंगाली"] = "bn", ["Benggoi"] = "bgy", ["Bengkala Sign Language"] = "bqy", ["Bentong"] = "bnu", ["Benyadu'"] = "byd", ["Beothuk"] = "bue", ["Bepour"] = "bie", ["Bera"] = "brf", ["Berakou"] = "bxv", ["Berau Malay"] = "bve", ["Berawan"] = "lod", ["Berbice Creole Dutch"] = "brc", ["Bergish"] = "gmw-bgh", ["Berik"] = "bkl", ["Berinomo"] = "bit", ["Berom"] = "bom", ["Berta"] = "wti", ["Berti"] = "byt", ["Besisi"] = "mhe", ["Besme"] = "bes", ["Besoa"] = "bep", ["Betaf"] = "bfe", ["Betawi"] = "bew", ["Bete"] = "byf", ["Bete-Bendi"] = "btt", ["Betoi"] = "sai-bet", ["Betta Kurumba"] = "xub", ["Bezhta"] = "kap", ["Bhadrawahi"] = "bhd", ["Bhalay"] = "bhx", ["Bharia"] = "bha", ["Bhatri"] = "bgw", ["Bhattiyali"] = "bht", ["Bhaya"] = "bhe", ["Bhele"] = "bhy", ["Bhilali"] = "bhi", ["Bhili"] = "bhb", ["भोजपुरी"] = "bho", ["Bhoti Kinnauri"] = "nes", ["Bhunjia"] = "bhu", ["Biafada"] = "bif", ["Biage"] = "bdf", ["Biak"] = "bhw", ["Biali"] = "beh", ["Bian Marind"] = "bpv", ["Biangai"] = "big", ["Biao"] = "byk", ["Biao Mon"] = "bmt", ["Biao-Jiao Mien"] = "bje", ["Biatah Bidayuh"] = "bth", ["Bibaali"] = "bcn", ["Bibbulman"] = "xbp", ["Bidiyo"] = "bid", ["Bidyara"] = "bym", ["Bidyogo"] = "bjg", ["Biem"] = "bmc", ["Bierebo"] = "bnk", ["Bieria"] = "brj", ["Biete"] = "biu", ["Big Nambas"] = "nmb", ["Biga"] = "bhc", ["Bigambal"] = "xbe", ["Bih"] = "ibh", ["बिहारी"] = "bh", ["Bijori"] = "bix", ["Bikaru"] = "bic", ["Bikol Central"] = "bcl", ["Bikya"] = "byb", ["Bila"] = "bip", ["Bilakura"] = "bql", ["Bilaspuri"] = "kfs", ["Bilba"] = "bpz", ["Bilbil"] = "brz", ["Bile"] = "bil", ["Biliau"] = "bcu", ["Biloxi"] = "bll", ["Bilua"] = "blb", ["Bilur"] = "bxf", ["Bima"] = "bhp", ["Bimin"] = "bhl", ["Bimoba"] = "bim", ["Bina"] = "bmn", ["Binahari"] = "bxz", ["Binandere"] = "bhg", ["Binawa"] = "byj", ["Bindal"] = "xbd", ["Bine"] = "bon", ["Binji"] = "bpj", ["Binongan Itneg"] = "itb", ["Bintauna"] = "bne", ["Bintulu"] = "bny", ["Binukid"] = "bkd", ["Binumarien"] = "bjr", ["Bipi"] = "biq", ["Birao"] = "brr", ["Birgid"] = "brk", ["Birgit"] = "btf", ["Birhor"] = "biy", ["Biri"] = "bzr", ["Biritai"] = "bqq", ["Birri"] = "bvq", ["Birrpayi"] = "xbj", ["Birwa"] = "brl", ["Biseni"] = "ije", ["Bishnupriya Manipuri"] = "bpy", ["Bishuo"] = "bwh", ["Bisis"] = "bnw", ["Bislama"] = "bi", ["Bisorio"] = "bir", ["Bissa"] = "bib", ["Bisu"] = "bzi", ["Bit"] = "bgk", ["Bitare"] = "brt", ["Bitur"] = "mcc", ["Biwat"] = "bwm", ["Biyo"] = "byo", ["Biyom"] = "bpm", ["Blablanga"] = "blp", ["Black Speech"] = "art-bsp", ["Blackfoot"] = "bla", ["Blafe"] = "bfh", ["Blagar"] = "beu", ["Blang"] = "blr", ["Blin"] = "byn", ["Bo"] = "bgl", ["Bo-Rukul"] = "mae", ["Bo-Ung"] = "mux", ["Boano (Maluku)"] = "bzn", ["Boano (Sulawesi)"] = "bzl", ["Bobongko"] = "bgb", ["Bobot"] = "bty", ["Bodo (Central Africa)"] = "boy", ["Bodo (India)"] = "brx", ["Bodo Gadaba"] = "gbj", ["Bodo Parja"] = "bdv", ["Bofi"] = "bff", ["Boga"] = "bvw", ["Bogaya"] = "boq", ["Boghom"] = "bux", ["Boguru"] = "bqu", ["Bohtan Neo-Aramaic"] = "bhn", ["Boikin"] = "bzf", ["Bokar"] = "sit-bok", ["Bokha"] = "ybk", ["Boko"] = "bqc", ["Bokobaru"] = "bus", ["Bokoto"] = "bdt", ["Bokyi"] = "bky", ["Bola"] = "bnp", ["Bolak"] = "art-blk", ["Bolango"] = "bld", ["Bole"] = "bol", ["Bolgo"] = "bvo", ["Bolia"] = "bli", ["Bolinao"] = "smk", ["Bolivian Sign Language"] = "bvl", ["Boloki"] = "bkt", ["Bolon"] = "bof", ["Bolondo"] = "bzm", ["Bolongan"] = "blj", ["Bolyu"] = "ply", ["Bom"] = "bmf", ["Boma Nkuu"] = "bnt-bon", ["Boma Yumu"] = "bnt-boy", ["Bomboli"] = "bml", ["Bomboma"] = "bws", ["Bomitaba"] = "zmx", ["Bomu"] = "bmq", ["Bomwali"] = "bmw", ["Bon Gula"] = "glc", ["Bonan"] = "peh", ["Bondei"] = "bou", ["Bondo"] = "bfw", ["Bondoukou Kulango"] = "kzc", ["Bondum Dom Dogon"] = "dbu", ["Bonerate"] = "bna", ["Bonggi"] = "bdg", ["Bonggo"] = "bpg", ["Bongili"] = "bui", ["Bongo"] = "bot", ["Bongu"] = "bpu", ["Bonjo"] = "bok", ["Bonkeng"] = "bvg", ["Bonkiman"] = "bop", ["Bookan"] = "bnb", ["Boon"] = "bnl", ["Boor"] = "bvf", ["Bora"] = "boa", ["Border Kuna"] = "kvn", ["Borei"] = "gai", ["Boro"] = "xxb", ["Borong"] = "ksr", ["Boruca"] = "brn", ["Borôro"] = "bor", ["Boselewa"] = "bwf", ["Bosngun"] = "bqs", ["Bote-Majhi"] = "bmj", ["Botlikh"] = "bph", ["Botolan Sambal"] = "sbl", ["Bouna Kulango"] = "nku", ["Bourbonnais-Berrichon"] = "roa-bbn", ["Bourguignon"] = "roa-brg", ["Bouyei"] = "pcc", ["Bozaba"] = "bzo", ["Bragat"] = "aof", ["Brahui"] = "brh", ["Braj"] = "bra", ["Brazilian Sign Language"] = "bzs", ["Brek Karen"] = "kvl", ["Brem"] = "buq", ["Breri"] = "brq", ["Breton"] = "br", ["Bribri"] = "bzd", ["British Sign Language"] = "bfi", ["Brokkat"] = "bro", ["Brokpake"] = "sgt", ["Brokskat"] = "bkk", ["Brooke's Point Palawano"] = "plw", ["Broome Pearling Lugger Pidgin"] = "bpl", ["Brunei Bisaya"] = "bsb", ["Brunei Malay"] = "kxd", ["Bruny Island"] = "xpz", ["Bu"] = "jid", ["Bu-Nao Bunu"] = "bwx", ["Bua"] = "bub", ["Bualkhaw Chin"] = "cbl", ["Buamu"] = "box", ["Bube"] = "bvb", ["Bubi"] = "buw", ["Bubia"] = "bbx", ["Budeh Stieng"] = "stt", ["Budibud"] = "btp", ["Budong-Budong"] = "bdx", ["Budu"] = "buu", ["Budukh"] = "bdk", ["Buduma"] = "bdm", ["Budza"] = "bja", ["Buena Vista Yokuts"] = "nai-bvy", ["Bugan"] = "bbh", ["Bughotu"] = "bgt", ["Buginese"] = "bug", ["Buglere"] = "sab", ["Bugun"] = "bgg", ["Buhi'non Bikol"] = "ubl", ["Buhid"] = "bku", ["Buhutu"] = "bxh", ["Bujhyal"] = "byh", ["Bukar-Sadung Bidayuh"] = "sdo", ["Bukat"] = "bvk", ["Bukawa"] = "buk", ["Bukhari"] = "bhh", ["Bukit Malay"] = "bvu", ["Bukitan"] = "bkn", ["Bukiyip"] = "ape", ["Buksa"] = "tkb", ["Bukusu"] = "bxk", ["Bulgar"] = "xbo", ["Bulgarian"] = "bg", ["Bulgarian Sign Language"] = "bqn", ["Bulgebi"] = "bmp", ["Buli (Ghana)"] = "bwu", ["Buli (Indonesia)"] = "bzq", ["Bulo Stieng"] = "sti", ["Bulu (Cameroon)"] = "bum", ["Bulu (New Guinea)"] = "bjl", ["Bum"] = "bmv", ["Bumaji"] = "byp", ["Bumang"] = "bvp", ["Bumbita Arapesh"] = "aon", ["Bumthangkha"] = "kjz", ["Bun"] = "buv", ["Buna"] = "bvn", ["Bunaba"] = "bck", ["Bunak"] = "bfn", ["Bunama"] = "bdd", ["Bundeli"] = "bns", ["Bung"] = "bqd", ["Bungain"] = "but", ["Bunganditj"] = "xbg", ["Bungku"] = "bkz", ["Bungu"] = "wun", ["Bunoge"] = "dgb", ["Bunun"] = "bnn", ["Buol"] = "blf", ["Bura"] = "bwr", ["Bura Mabang"] = "mde", ["Burak"] = "bys", ["Buraka"] = "bkg", ["Burarra"] = "bvr", ["Burate"] = "bti", ["Burduna"] = "bxn", ["Bure"] = "bvh", ["Burgundian"] = "gem-bur", ["Burji"] = "bji", ["Burmese"] = "my", ["Burmeso"] = "bzu", ["Buru (Indonesia)"] = "mhs", ["Buru (Nigeria)"] = "bqw", ["Burui"] = "bry", ["Burumakok"] = "aip", ["Burun"] = "bdi", ["Burunge"] = "bds", ["Burushaski"] = "bsk", ["Burusu"] = "bqr", ["Buruwai"] = "asi", ["Buryat"] = "bua", ["Busa"] = "bqp", ["Busam"] = "bxs", ["Busami"] = "bsm", ["Busang Kayan"] = "bfg", ["Bushoong"] = "buf", ["Buso"] = "bso", ["Busoa"] = "bup", ["Bussa"] = "dox", ["Busuu"] = "bju", ["Butbut Kalinga"] = "kyb", ["Butchulla"] = "xby", ["Butmas-Tur"] = "bnr", ["Butuanon"] = "btw", ["Buwal"] = "bhs", ["Buyeo"] = "xpy", ["Buyu"] = "byi", ["Buyuan Jinuo"] = "jiy", ["Bwa"] = "bww", ["Bwaidoka"] = "bwd", ["Bwala"] = "bnt-bwa", ["Bwanabwana"] = "tte", ["Bwatoo"] = "bwa", ["Bwe Karen"] = "bwe", ["Bwela"] = "bwl", ["Bwile"] = "bwc", ["Bwisi"] = "bwz", ["Byangsi"] = "bee", ["Byep"] = "mkk", ["Bädi Kanum"] = "khd", ["Caac"] = "msq", ["Cabiyarí"] = "cbb", ["Cabécar"] = "cjp", ["Cacaloxtepec Mixtec"] = "miu", ["Cacaopera"] = "ccr", ["Cacgia Roglai"] = "roc", ["Cacua"] = "cbv", ["Cacán"] = "sai-cac", ["Caddo"] = "cad", ["Cafundó"] = "ccd", ["Cahuarano"] = "cah", ["Cahuilla"] = "chl", ["Cajonos Zapotec"] = "zad", ["Caka"] = "ckx", ["Cakchiquel-Quiché Mixed Language"] = "ckz", ["Cakfem-Mushere"] = "cky", ["Calabrian Greek"] = "grk-cal", ["Calamian Tagbanwa"] = "tbk", ["Callawalla"] = "caw", ["Calusa"] = "nai-cal", ["Caluyanun"] = "clu", ["Caló"] = "rmq", ["Camarines Norte Agta"] = "abd", ["Cameroon Mambila"] = "mcu", ["Cameroon Pidgin"] = "wes", ["Campalagian"] = "cml", ["Camsá"] = "kbh", ["Camtho"] = "cmt", ["Camunic"] = "xcc", ["Candoshi-Shapra"] = "cbu", ["Canela"] = "ram", ["Canichana"] = "caz", ["Cantonese"] = "yue", ["Cao Miao"] = "cov", ["Caolan"] = "mlc", ["Capanahua"] = "kaq", ["Capiznon"] = "cps", ["Cappadocian Greek"] = "cpg", ["Caquinte"] = "cot", ["Car Nicobarese"] = "caq", ["Cara"] = "cfd", ["Carabayo"] = "cby", ["Caramanta"] = "crf", ["Caranqui"] = "sai-caq", ["Carapana"] = "cbc", ["Carian"] = "xcr", ["Cariay"] = "awd-kar", ["Caribbean Hindustani"] = "hns", ["Caribbean Javanese"] = "jvn", ["Carijona"] = "cbd", ["Carolina Algonquian"] = "crr", ["Carolinian"] = "cal", ["Carpathian Romani"] = "rmc", ["Carrier"] = "crx", ["Cashibo-Cacataibo"] = "cbr", ["Cashinahua"] = "cbs", ["Casiguran Dumagat Agta"] = "dgc", ["Casuarina Coast Asmat"] = "asc", ["Catacao"] = "sai-cat", ["Catalan"] = "ca", ["Catalan Sign Language"] = "csc", ["Catawba"] = "chc", ["Catuquinaru"] = "sai-ctq", ["Catío Chibcha"] = "cba-cat", ["Cauca"] = "cca", ["Cavere"] = "awd-cav", ["Cavineña"] = "cav", ["Cayubaba"] = "cyb", ["Cayuga"] = "cay", ["Cayuse"] = "xcy", ["Cazcan"] = "azc-caz", ["Cañari"] = "sai-cnr", ["Cebaara Senoufo"] = "sef", ["Cebuano"] = "ceb", ["Celtiberian"] = "xce", ["Cemuhî"] = "cam", ["Cen"] = "cen", ["Central Asmat"] = "cns", ["Central Atlas Tamazight"] = "tzm", ["Central Awyu"] = "awu", ["Central Bai"] = "bca", ["Central Bontoc"] = "lbk", ["Central Cagayan Agta"] = "agt", ["Central Dusun"] = "dtp", ["Central Franconian"] = "gmw-cfr", ["Central Grebo"] = "grv", ["Central Huasteca Nahuatl"] = "nch", ["Central Huishui Hmong"] = "hmc", ["Central Kurdish"] = "ckb", ["Central Maewo"] = "mwo", ["Central Mahuatlán Zapoteco"] = "zam", ["Central Malay"] = "pse", ["Central Masela"] = "mxz", ["Central Mashan Hmong"] = "hmm", ["Central Mazahua"] = "maz", ["Central Melanau"] = "mel", ["Central Mnong"] = "cmo", ["Central Nahuatl"] = "nhn", ["Central Nicobarese"] = "ncb", ["Central Ojibwa"] = "ojc", ["Central Palawano"] = "plc", ["Central Pame"] = "pbs", ["Central Pomo"] = "poo", ["Central Puebla Nahuatl"] = "ncx", ["Central Sama"] = "sml", ["Central Siberian Yupik"] = "ess", ["Central Sierra Miwok"] = "csm", ["Central Subanen"] = "syb", ["Central Tagbanwa"] = "tgt", ["Central Tarahumara"] = "tar", ["Central Teke"] = "nzu", ["Central Tunebo"] = "tuf", ["Centúúm"] = "cet", ["Cerma"] = "cme", ["Ch'olti'"] = "myn-chl", ["Ch'orti'"] = "caa", ["Chaap Wuurong"] = "tjw", ["Chachi"] = "cbi", ["Chadian Arabic"] = "shu", ["Chadian Sign Language"] = "cds", ["Chadong"] = "cdy", ["Chagatai"] = "chg", ["Chaha"] = "sem-cha", ["Chaima"] = "ciy", ["Chairel"] = "sit-cha", ["Chak"] = "ckh", ["Chakali"] = "cli", ["Chakma"] = "ccp", ["Chala"] = "cll", ["Chaldean Neo-Aramaic"] = "cld", ["Chali"] = "tgf", ["Chamacoco"] = "ceg", ["Chamalal"] = "cji", ["Chamba Daka"] = "ccg", ["Chamba Leko"] = "ndi", ["Chambeali"] = "cdh", ["Chambri"] = "can", ["Chamicuro"] = "ccc", ["Chamling"] = "rab", ["Chamorro"] = "ch", ["Champenois"] = "roa-cha", ["Chang"] = "nbc", ["Changriwa"] = "cga", ["Changthang"] = "cna", ["Chantyal"] = "chx", ["Chaná"] = "sai-chn", ["Chané"] = "caj", ["Chapacura"] = "sai-chp", ["Chara"] = "cra", ["Charrua"] = "sai-chr", ["Chaudangsi"] = "cdn", ["Chaura"] = "crv", ["Chavacano"] = "cbk", ["Chayahuita"] = "cbt", ["Chayuco Mixtec"] = "mih", ["Chazumba Mixtec"] = "xtb", ["Che"] = "ruk", ["Chechen"] = "ce", ["Cheke Holo"] = "mrn", ["Chemakum"] = "xch", ["Chenapian"] = "cjn", ["Chenchu"] = "cde", ["Chenoua"] = "cnu", ["Chepang"] = "cdm", ["Chepya"] = "ycp", ["Cherepon"] = "cpn", ["Cherokee"] = "chr", ["Chesu"] = "ych", ["Chetco-Tolowa"] = "ctc", ["Chewong"] = "cwg", ["Cheyenne"] = "chy", ["Chhattisgarhi"] = "hne", ["Chhintange"] = "ctn", ["Chhulung"] = "cur", ["Chiangmai Sign Language"] = "csd", ["Chiapanec"] = "cip", ["Chibcha"] = "chb", ["Chicahuaxtla Triqui"] = "trs", ["Chichewa"] = "ny", ["Chichicapan Zapotec"] = "zpv", ["Chichimeca-Jonaz"] = "pei", ["Chichonyi-Chidzihana-Chikauma"] = "coh", ["Chickasaw"] = "cic", ["Chicomuceltec"] = "cob", ["Chiduruma"] = "dug", ["Chigmecatitlán Mixtec"] = "mii", ["Chilcotin"] = "clc", ["Chilean Sign Language"] = "csg", ["Chilisso"] = "clh", ["Chiltepec Chinantec"] = "csa", ["Chimalapa Zoque"] = "zoh", ["Chimariko"] = "cid", ["Chimila"] = "cbg", ["Chimwiini"] = "bnt-cmw", ["Chinali"] = "cih", ["Chinbon Chin"] = "cnb", ["Chinese"] = "zh", ["Chinese Pidgin English"] = "cpi", ["Chinese Sign Language"] = "csl", ["Chinook"] = "chh", ["Chinook Jargon"] = "chn", ["Chipaya"] = "cap", ["Chipewyan"] = "chp", ["Chiquihuitlán Mazatec"] = "maq", ["Chiquimulilla"] = "nai-chi", ["Chiquitano"] = "cax", ["Chiricahua"] = "apm", ["Chirino"] = "sai-chi", ["Chiripá"] = "nhd", ["Chiru"] = "cdf", ["Chitimacha"] = "ctm", ["Chitkuli Kinnauri"] = "cik", ["Chittagonian"] = "ctg", ["Chitwania Tharu"] = "the", ["Chiwere"] = "iow", ["Choapan Zapotec"] = "zpc", ["Chocangaca"] = "cgk", ["Chochotec"] = "coz", ["Choctaw"] = "cho", ["Chodri"] = "cdi", ["Chokri Naga"] = "nri", ["Chokwe"] = "cjk", ["Chol"] = "ctu", ["Cholón"] = "cht", ["Chong"] = "cog", ["Choni"] = "cda", ["Chono"] = "sai-cno", ["Chopi"] = "cce", ["Chothe Naga"] = "nct", ["Chrau"] = "crw", ["Chru"] = "cje", ["Chuabo"] = "chw", ["Chuanqiandian Cluster Miao"] = "cqd", ["Chuave"] = "cjv", ["Chug"] = "cvg", ["Chuj"] = "cac", ["Chuka"] = "cuh", ["Chukchi"] = "ckt", ["Chukwa"] = "cuw", ["Chulym"] = "clw", ["Chumburung"] = "ncu", ["Churahi"] = "cdj", ["Churuya"] = "sai-chu", ["Chut"] = "scb", ["Chuukese"] = "chk", ["Chuvan"] = "xcv", ["Chuvash"] = "cv", ["Chácobo"] = "cao", ["Ci Gbe"] = "cib", ["Cia-Cia"] = "cia", ["Cibak"] = "ckl", ["Cicipu"] = "awc", ["Ciguayo"] = "nai-cig", ["Cimbrian"] = "cim", ["Cinamiguin Manobo"] = "mkx", ["Cinda-Regi-Tiyal"] = "cdr", ["Cineni"] = "cie", ["Cinta Larga"] = "cin", ["Cishingini"] = "asg", ["Citak"] = "txt", ["Ciwogai"] = "tgd", ["Classical Guaraní"] = "gn-cls", ["Classical Mandaic"] = "myz", ["Classical Mongolian"] = "cmg", ["Classical Nahuatl"] = "nci", ["Classical Newar"] = "nwc", ["Classical Quechua"] = "qwc", ["Classical Syriac"] = "syc", ["Classical Tibetan"] = "xct", ["Coahuilteco"] = "xcw", ["Coast Miwok"] = "csi", ["Coastal Kadazan"] = "kzj", ["Coastal Konjo"] = "kjc", ["Coatecas Altas Zapotec"] = "zca", ["Coatepec Nahuatl"] = "naz", ["Coatlán Mixe"] = "mco", ["Coatlán Zapotec"] = "zps", ["Coatzospan Mixtec"] = "miz", ["Cocama"] = "cod", ["Cochimi"] = "coj", ["Cocopa"] = "coc", ["Cocos Islands Malay"] = "coa", ["Coeruna"] = "sai-coe", ["Coeur d'Alene"] = "crd", ["Cofán"] = "con", ["Cogui"] = "kog", ["Col"] = "liw", ["Colombian Sign Language"] = "csn", ["Colonia Tovar German"] = "gct", ["Columbia-Wenatchi"] = "col", ["Colán"] = "sai-col", ["Comaltepec Chinantec"] = "cco", ["Comanche"] = "com", ["Comechingon"] = "sai-cmg", ["Comecrudo"] = "xcm", ["Communicationssprache"] = "art-com", ["Como Karim"] = "cfg", ["Comox"] = "coo", ["Con"] = "cno", ["Coos"] = "csz", ["Copainalá Zoque"] = "zoc", ["Copala Triqui"] = "trc", ["Copallén"] = "sai-cop", ["Coptic"] = "cop", ["Coquille"] = "coq", ["Cora"] = "crn", ["Cori"] = "cry", ["Cornish"] = "kw", ["Coroado Puri"] = "sai-crd", ["Corsican"] = "co", ["Cosoleacaque Nahuatl"] = "nhk", ["Costa Rican Sign Language"] = "csr", ["Cotabato Manobo"] = "mta", ["Cotoname"] = "xcn", ["Cowlitz"] = "cow", ["Coyaima"] = "coy", ["Coyotepec Popoloca"] = "pbf", ["Coyutla Totonac"] = "toc", ["Cree"] = "cr", ["Creek"] = "mus", ["Crimean Gothic"] = "gme-cgo", ["Crimean Tatar"] = "crh", ["Croatian Sign Language"] = "csq", ["Cross River Mbembe"] = "mfn", ["Crow"] = "cro", ["Cruzeño"] = "crz", ["Cua"] = "cua", ["Cuban Sign Language"] = "csf", ["Cubeo"] = "cub", ["Cueva"] = "sai-cva", ["Cuiba"] = "cui", ["Cuitlatec"] = "cuy", ["Culina"] = "cul", ["Culli"] = "sai-cul", ["Cumanagoto"] = "cuo", ["Cumbric"] = "xcb", ["Cun"] = "cuq", ["Cung"] = "cug", ["Cupeño"] = "cup", ["Curonian"] = "xcu", ["Curripaco"] = "kpc", ["Cutchi-Swahili"] = "ccl", ["Cuvok"] = "cuv", ["Cuyamecalco Mixtec"] = "xtu", ["Cuyunon"] = "cyo", ["Cwi Bwamu"] = "bwy", ["Cypriot Arabic"] = "acy", ["Czech"] = "cs", ["Czech Sign Language"] = "cse", ["Côông"] = "cnc", ["Da'a Kaili"] = "kzf", ["Daai Chin"] = "dao", ["Daantanai'"] = "lni", ["Daasanach"] = "dsh", ["Daba"] = "dbq", ["Dabarre"] = "dbr", ["Dabe"] = "dbe", ["Dacian"] = "xdc", ["Dadanitic"] = "sem-dad", ["Dadi Dadi"] = "dda", ["Dadibi"] = "mps", ["Dadiya"] = "dbd", ["Daga"] = "dgz", ["Dagaari Dioula"] = "dgd", ["Dagba"] = "dgk", ["Dagbani"] = "dag", ["Dagik"] = "dec", ["Dagoman"] = "dgn", ["Dahalik"] = "dlk", ["Dahalo"] = "dal", ["Daho-Doo"] = "das", ["Dai"] = "dij", ["Dair"] = "drb", ["Dairi Batak"] = "btd", ["Dakaka"] = "bpa", ["Dakka"] = "dkk", ["Dakota"] = "dak", ["Dakpa"] = "dka", ["Dalmatian"] = "dlm", ["Daloa Bété"] = "bev", ["Dama (Nigeria)"] = "dmm", ["Dama (Sierra Leone)"] = "dmn-dam", ["Damakawa"] = "dam", ["Damal"] = "uhn", ["Dambi"] = "dac", ["Dameli"] = "dml", ["Dampelas"] = "dms", ["Dan"] = "dnj", ["Danaru"] = "dnr", ["Danau"] = "dnu", ["Dandami Maria"] = "daq", ["Dangaléat"] = "daa", ["Dangaura Tharu"] = "thl", ["Danish"] = "da", ["Danish Sign Language"] = "dsl", ["Dano"] = "aso", ["Danu"] = "dnv", ["Danuwar"] = "dhw", ["Dao"] = "daz", ["Daonda"] = "dnd", ["Dar Daju Daju"] = "djc", ["Dar Fur Daju"] = "daj", ["Dar Sila Daju"] = "dau", ["Darai"] = "dry", ["Dargwa"] = "dar", ["Darkinjung"] = "xda", ["Darlong"] = "dln", ["Darmiya"] = "drd", ["Daro-Matu Melanau"] = "dro", ["Darumbal"] = "xgm", ["Dass"] = "dot", ["Datooga"] = "tcc", ["Daungwurrung"] = "dgw", ["Daur"] = "dta", ["Davawenyo"] = "daw", ["Dawawa"] = "dww", ["Dawera-Daweloor"] = "ddw", ["Dawro"] = "dwr", ["Day"] = "dai", ["Dayi"] = "dax", ["Dazaga"] = "dzg", ["Deccani"] = "dcc", ["Dedua"] = "ded", ["Defaka"] = "afn", ["Defi Gbe"] = "gbh", ["Deg"] = "mzw", ["Deg Xinag"] = "ing", ["Degema"] = "deg", ["Degenan"] = "dge", ["Dehwari"] = "deh", ["Dek"] = "dek", ["Dela-Oenale"] = "row", ["Delo"] = "ntr", ["Delta Yokuts"] = "nai-dly", ["Dem"] = "dem", ["Dema"] = "dmx", ["Demisa"] = "dei", ["Demotic"] = "egx-dem", ["Demta"] = "dmy", ["Dena'ina"] = "tfn", ["Dendi"] = "ddn", ["Dengese"] = "dez", ["Dengka"] = "dnk", ["Deno"] = "dbb", ["Denya"] = "anv", ["Dení"] = "dny", ["Deori"] = "der", ["Desano"] = "des", ["Desiya"] = "dso", ["Dewas Rai"] = "dwz", ["Dewoin"] = "dee", ["Dezfuli"] = "def", ["Dghwede"] = "dgh", ["Dhaiso"] = "dhs", ["Dhalandji"] = "dhl", ["Dhangu"] = "dhg", ["Dhanki"] = "dhn", ["Dhao"] = "nfa", ["Dharug"] = "xdk", ["Dhatki"] = "mki", ["Dhimal"] = "dhi", ["Dhivehi"] = "dv", ["Dhodia"] = "dho", ["Dhofari Arabic"] = "adf", ["Dhudhuroa"] = "ddr", ["Dhungaloo"] = "dhx", ["Dhurga"] = "dhu", ["Dhuwal"] = "dwu", ["Dhuwaya"] = "dwy", ["Dia"] = "dia", ["Dibabawon Manobo"] = "mbd", ["Dibiyaso"] = "dby", ["Dibo"] = "dio", ["Dicamay Agta"] = "duy", ["Didinga"] = "did", ["Dieri"] = "dif", ["Digo"] = "dig", ["Dii"] = "dur", ["Dijim-Bwilim"] = "cfa", ["Dilling"] = "dil", ["Dima"] = "jma", ["Dimasa"] = "dis", ["Dimbong"] = "dii", ["Dime"] = "dim", ["Dinapigue Agta"] = "phi-din", ["Dineor"] = "mrx", ["Ding"] = "diz", ["Dinka"] = "din", ["Diodio"] = "ddi", ["Dirasha"] = "gdl", ["Diri"] = "dwa", ["Dirim"] = "dir", ["Disa"] = "dsi", ["Ditammari"] = "tbz", ["Ditidaht"] = "dtd", ["Diuwe"] = "diy", ["Diuxi-Tilantongo Mixtec"] = "xtd", ["Dixon Reef"] = "dix", ["Dizin"] = "mdx", ["Djadjawurrung"] = "dja", ["Djambarrpuyngu"] = "djr", ["Djangun"] = "djf", ["Djauan"] = "djn", ["Djawi"] = "djw", ["Djimini"] = "dyi", ["Djinang"] = "dji", ["Djinba"] = "djb", ["Djiwarli"] = "djl", ["Dobel"] = "kvo", ["Dobu"] = "dob", ["Doe"] = "doe", ["Doga"] = "dgg", ["Doghoro"] = "dgx", ["Dogoso"] = "dgs", ["Dogosé"] = "dos", ["Dogri"] = "doi", ["Dogrib"] = "dgr", ["Dogul Dom"] = "dbg", ["Doka"] = "dbi", ["Doko-Uyanga"] = "uya", ["Dolgan"] = "dlg", ["Dom"] = "doa", ["Domaaki"] = "dmk", ["Domari"] = "rmt", ["Dominican Sign Language"] = "doq", ["Dompo"] = "doy", ["Domu"] = "dof", ["Domung"] = "dev", ["Dondo"] = "dok", ["Dong"] = "doh", ["Dongo"] = "doo", ["Dongolawi"] = "kzh", ["Dongotono"] = "ddd", ["Dongshanba Lalo"] = "yik", ["Dongxiang"] = "sce", ["Donno So Dogon"] = "dds", ["Doondo"] = "dde", ["Dorasque"] = "cba-dor", ["Dori'o"] = "dor", ["Dorig"] = "wwo", ["Doromu-Koki"] = "kqc", ["Dorze"] = "doz", ["Doso"] = "dol", ["Doteli"] = "dty", ["Dothraki"] = "art-dtk", ["Doura"] = "don", ["Doutai"] = "tds", ["Doyayo"] = "dow", ["Drehu"] = "dhv", ["Drung"] = "duu", ["Duala"] = "dua", ["Duano"] = "dup", ["Duau"] = "dva", ["Dubli"] = "dub", ["Dubu"] = "dmu", ["Dugun"] = "ndu", ["Duguri"] = "dbm", ["Dugwor"] = "dme", ["Duhwa"] = "kbz", ["Duit"] = "cba-dui", ["Duke"] = "nke", ["Dukhan"] = "trk-dkh", ["Dulbu"] = "dbo", ["Duli"] = "duz", ["Duma"] = "dma", ["Dumaitic"] = "sem-dum", ["Dumbea"] = "duf", ["Dumi"] = "dus", ["Dumpas"] = "dmv", ["Dumun"] = "dui", ["Duna"] = "duc", ["Dungan"] = "dng", ["Dungmali"] = "raa", ["Dungra Bhil"] = "duh", ["Dungu"] = "dbv", ["Dupaningan Agta"] = "duo", ["Dura"] = "drq", ["Duri"] = "mvp", ["Duriankere"] = "dbn", ["Duruwa"] = "pci", ["Dusner"] = "dsn", ["Dusun Deyah"] = "dun", ["Dusun Malang"] = "duq", ["Dusun Witu"] = "duw", ["Dutch"] = "nl", ["Dutch Low Saxon"] = "nds-nl", ["Dutch Sign Language"] = "dse", ["Duun"] = "dux", ["Duupa"] = "dae", ["Duvle"] = "duv", ["Duwai"] = "dbp", ["Duwet"] = "gve", ["Dwang"] = "nnu", ["Dyaabugay"] = "dyy", ["Dyaberdyaber"] = "dyb", ["Dyan"] = "dya", ["Dyangadi"] = "dyn", ["Dyirbal"] = "dbl", ["Dyugun"] = "dyd", ["Dyula"] = "dyu", ["Dza"] = "jen", ["Dzala"] = "dzl", ["Dzando"] = "dzn", ["Dzao Min"] = "bpn", ["Dzodinka"] = "add", ["Dzongkha"] = "dz", ["Dzuun"] = "dnn", ["Dâw"] = "kwa", ["E"] = "eee", ["E'ma Buyang"] = "yzg", ["प्रारंभिक असमिया"] = "inc-oas", ["Early Modern Korean"] = "ko-ear", ["Early Tripuri"] = "xtr", ["East Central German"] = "gmw-ecg", ["East Damar"] = "dmr", ["East Franconian"] = "vmf", ["East Futuna"] = "fud", ["East Kewa"] = "kjs", ["East Limba"] = "lma", ["East Makian"] = "mky", ["East Masela"] = "vme", ["East Nyala"] = "nle", ["East Tarangan"] = "tre", ["East Yugur"] = "yuy", ["Eastern Acipa"] = "acp", ["Eastern Arrernte"] = "aer", ["Eastern Bolivian Guaraní"] = "gui", ["Eastern Bontoc"] = "ebk", ["Eastern Bru"] = "bru", ["Eastern Canadian Inuktitut"] = "ike", ["Eastern Cham"] = "cjm", ["Eastern Durango Nahuatl"] = "azd", ["Eastern Gorkha Tamang"] = "tge", ["Eastern Gurung"] = "ggn", ["Eastern Highland Chatino"] = "cly", ["Eastern Highland Otomi"] = "otm", ["Eastern Huasteca Nahuatl"] = "nhe", ["Eastern Huishui Hmong"] = "hme", ["Eastern Karaboro"] = "xrb", ["Eastern Katu"] = "ktv", ["Eastern Kayah"] = "eky", ["Eastern Keres"] = "kee", ["Eastern Krahn"] = "kqo", ["Eastern Lalu"] = "yit", ["Eastern Lawa"] = "lwl", ["Eastern Magar"] = "mgp", ["Eastern Maninkakan"] = "emk", ["Eastern Mari"] = "mhr", ["Eastern Meohang"] = "emg", ["Eastern Mnong"] = "mng", ["Eastern Muria"] = "emu", ["Eastern Ngad'a"] = "nea", ["Eastern Nisu"] = "nos", ["Eastern Ojibwa"] = "ojg", ["Eastern Parbate Kham"] = "kif", ["Eastern Penan"] = "pez", ["Eastern Pomo"] = "peb", ["Eastern Pwo"] = "kjp", ["Eastern Qiandong Miao"] = "hmq", ["Eastern Tamang"] = "taj", ["Eastern Tawbuid"] = "bnj", ["Eastern Xiangxi Miao"] = "muq", ["Eastern Xwla Gbe"] = "gbx", ["Ebira"] = "igb", ["Eblaite"] = "xeb", ["Ebrié"] = "ebr", ["Ebughu"] = "ebg", ["Ecuadorian Sign Language"] = "ecs", ["Ede Cabe"] = "cbj", ["Ede Ica"] = "ica", ["Ede Idaca"] = "idd", ["Ede Ije"] = "ijj", ["Ede Nago"] = "nqg", ["Edera Awyu"] = "awy", ["Edo"] = "bin", ["Edolo"] = "etr", ["Edomite"] = "xdm", ["Edopi"] = "dbf", ["Efai"] = "efa", ["Efe"] = "efe", ["Efik"] = "efi", ["Efutop"] = "ofu", ["Ega"] = "ega", ["Eggon"] = "ego", ["Egyptian"] = "egy", ["Egyptian Arabic"] = "arz", ["Egyptian Sign Language"] = "esl", ["Ehueun"] = "ehu", ["Eipomek"] = "eip", ["Eitiep"] = "eit", ["Ejagham"] = "etu", ["Ejamat"] = "eja", ["Ekajuk"] = "eka", ["Ekari"] = "ekg", ["Ekele"] = "khy", ["Eki"] = "eki", ["Ekit"] = "eke", ["Ekpeye"] = "ekp", ["El Alto Zapotec"] = "zpp", ["El Hugeirat"] = "elh", ["El Molo"] = "elo", ["Elamite"] = "elx", ["Eleme"] = "elm", ["Elepi"] = "ele", ["Elfdalian"] = "ovd", ["Elip"] = "ekm", ["Elkei"] = "elk", ["Eloi"] = "art-elo", ["Elotepec Zapotec"] = "zte", ["Eloyi"] = "afo", ["Elseng"] = "mrf", ["Elu"] = "elu", ["Elymian"] = "xly", ["Emae"] = "mmw", ["Emai"] = "ema", ["Eman"] = "emn", ["Embaloh"] = "emb", ["Emberá-Baudó"] = "bdc", ["Emberá-Catío"] = "cto", ["Emberá-Chamí"] = "cmi", ["Emberá-Tadó"] = "tdc", ["Embu"] = "ebu", ["Emem"] = "enr", ["Emerillon"] = "eme", ["Emilian"] = "egl", ["Emplawas"] = "emw", ["En"] = "enc", ["Enawené-Nawé"] = "unk", ["Ende"] = "end", ["Enga"] = "enq", ["Engenni"] = "enn", ["Enggano"] = "eno", ["अंग्रेज़ी"] = "en", ["Enlhet"] = "enl", ["Enrekang"] = "ptt", ["Enu"] = "enu", ["Enwan"] = "env", ["Enwang"] = "enw", ["Enxet"] = "enx", ["Enya"] = "gey", ["Eotile"] = "eot", ["Epena"] = "sja", ["Epi-Olmec"] = "xep", ["Epie"] = "epi", ["Epigraphic Mayan"] = "emy", ["Eravallan"] = "era", ["Erave"] = "kjy", ["Ere"] = "twp", ["Erie"] = "iro-ere", ["Eritai"] = "ert", ["Erokwanas"] = "erw", ["Erre"] = "err", ["Erromintxela"] = "emx", ["Ersu"] = "ers", ["Eruwa"] = "erh", ["Erzya"] = "myv", ["Esan"] = "ish", ["Ese"] = "mcq", ["Ese Ejja"] = "ese", ["Eshtehardi"] = "esh", ["Esimbi"] = "ags", ["Eskayan"] = "esy", ["Esmeralda"] = "sai-esm", ["Esperanto"] = "eo", ["Esselen"] = "esq", ["Estado de México Otomi"] = "ots", ["Estonian"] = "et", ["Estonian Sign Language"] = "eso", ["Esuma"] = "esm", ["Etchemin"] = "etc", ["Etebi"] = "etb", ["Eten"] = "etx", ["Eteocretan"] = "ecr", ["Eteocypriot"] = "ecy", ["Ethiopian Sign Language"] = "eth", ["Etkywan"] = "ich", ["Eton (Cameroon)"] = "eto", ["Eton (Vanuatu)"] = "etn", ["Etruscan"] = "ett", ["Etulo"] = "utr", ["Evant"] = "bzz", ["Even"] = "eve", ["Evenki"] = "evn", ["Ewage-Notu"] = "nou", ["Ewarhuyana"] = "sai-ewa", ["Ewe"] = "ee", ["Ewondo"] = "ewo", ["Extremaduran"] = "ext", ["Eyak"] = "eya", ["Ezaa"] = "eza", ["Fagani"] = "faf", ["Faire Atta"] = "azt", ["Faita"] = "faj", ["Faiwol"] = "fai", ["Fakkanci"] = "gel", ["Fala"] = "fax", ["Falam Chin"] = "cfm", ["Fali"] = "fli", ["Faliscan"] = "xfa", ["Fam"] = "fam", ["Fanagalo"] = "fng", ["Fanamaket"] = "bjp", ["Fang (Bantu)"] = "fan", ["Fang (Beboid)"] = "fak", ["Fania"] = "fni", ["Far Western Muria"] = "fmu", ["Farefare"] = "gur", ["Faroese"] = "fo", ["Fas"] = "fqs", ["Fasu"] = "faa", ["Fataleka"] = "far", ["Fataluku"] = "ddg", ["Fayu"] = "fau", ["Fe'fe'"] = "fmp", ["Fedan"] = "pdn", ["Fembe"] = "agl", ["Fer"] = "kah", ["Feroge"] = "fer", ["फिजी हिंदी"] = "hif", ["Fijian"] = "fj", ["Filomena Mata-Coahuitlán Totonac"] = "tlp", ["Finisterre Yau"] = "yuw", ["Finnish"] = "fi", ["Finnish Sign Language"] = "fse", ["Finnish-Swedish Sign Language"] = "fss", ["Finongan"] = "fag", ["Fipa"] = "fip", ["Firan"] = "fir", ["Fiwaga"] = "fiw", ["Flemish Sign Language"] = "vgt", ["Flinders Island"] = "fln", ["Foau"] = "flh", ["Fogaha"] = "ber-fog", ["Foi"] = "foi", ["Foia Foia"] = "ffi", ["Folopa"] = "ppo", ["Foma"] = "fom", ["Fon"] = "fon", ["Fongoro"] = "fgr", ["Foodo"] = "fod", ["Forak"] = "frq", ["Fordata"] = "frd", ["Fore"] = "for", ["Forest Enets"] = "enf", ["Forest Nenets"] = "syd-fne", ["Fortsenal"] = "frt", ["Fox"] = "sac", ["Franc-Comtois"] = "roa-fcm", ["Francisco León Zoque"] = "zos", ["Franco-Provençal"] = "frp", ["फ़्रांसीसी"] = "fr", ["French Belgian Sign Language"] = "sfb", ["French Sign Language"] = "fsl", ["Friulian"] = "fur", ["Fula"] = "ff", ["Fuliiru"] = "flr", ["Fulniô"] = "fun", ["Fum"] = "fum", ["Fungwa"] = "ula", ["Fur"] = "fvr", ["Furu"] = "fuu", ["Futuna-Aniwa"] = "fut", ["Fuyug"] = "fuy", ["Fwe"] = "fwe", ["Fwâi"] = "fwa", ["Fyam"] = "pym", ["Fyer"] = "fie", ["Ga"] = "gaa", ["Ga'anda"] = "gqa", ["Ga'dang"] = "gdg", ["Gaa"] = "ttb", ["Gaam"] = "tbi", ["Gabadi"] = "kbt", ["Gabi"] = "gbw", ["Gabri"] = "gab", ["Gabrielino-Fernandeño"] = "xgf", ["Gadang"] = "gdk", ["Gaddang"] = "gad", ["Gaddi"] = "gbk", ["Gade"] = "ged", ["Gadjerawang"] = "gdh", ["Gadsup"] = "gaj", ["Gafat"] = "gft", ["Gagadu"] = "gbu", ["Gagauz"] = "gag", ["Gagnoa Bété"] = "btg", ["Gahri"] = "bfu", ["Gaikundi"] = "gbf", ["Gaina"] = "gcn", ["Gal"] = "gap", ["Galambu"] = "glo", ["Galatian"] = "xga", ["Galela"] = "gbi", ["Galeya"] = "gar", ["Galibi Carib"] = "car", ["Galice"] = "gce", ["Galician"] = "gl", ["Galindan"] = "xgl", ["Gallaecian"] = "cel-gal", ["Gallo"] = "roa-gal", ["Gallurese"] = "sdn", ["Galo"] = "adl", ["Galoli"] = "gal", ["Gamale Kham"] = "kgj", ["Gambera"] = "gma", ["Gamela"] = "sai-gam", ["Gamilaraay"] = "kld", ["Gamit"] = "gbl", ["Gamkonora"] = "gak", ["Gamo"] = "gmv", ["Gamo-Ningi"] = "bte", ["Gan"] = "gan", ["Gana"] = "gnq", ["Ganang"] = "gne", ["Gandhari"] = "pgd", ["Gane"] = "gzn", ["Ganggalida"] = "gcd", ["Ganglau"] = "ggl", ["Gangte"] = "gnb", ["Gangulu"] = "gnl", ["Gants"] = "gao", ["Ganza"] = "gza", ["Ganzi"] = "gnz", ["Gao"] = "gga", ["Gapapaiwa"] = "pwg", ["Garawa"] = "wrk", ["Garhwali"] = "gbm", ["Garifuna"] = "cab", ["Garingbal"] = "xgi", ["Garo"] = "grt", ["Garre"] = "gex", ["Garus"] = "gyb", ["Garza"] = "xgr", ["Gashowu"] = "nai-gsy", ["Gata'"] = "gaq", ["Gaulish"] = "cel-gau", ["Gavak"] = "dmc", ["Gavar"] = "gou", ["Gavião do Jiparaná"] = "gvo", ["Gawar-Bati"] = "gwt", ["Gawwada"] = "gwd", ["Gayil"] = "gyl", ["Gayo"] = "gay", ["Gayón"] = "sai-gay", ["Gbagyi"] = "gbr", ["Gban"] = "ggu", ["Gbanu"] = "gbv", ["Gbanziri"] = "gbg", ["Gbari"] = "gby", ["Gbaya"] = "gba", ["Gbaya-Bossangoa"] = "gbp", ["Gbaya-Bozoum"] = "gbq", ["Gbaya-Mbodomo"] = "gmm", ["Gbayi"] = "gyg", ["Gbesi Gbe"] = "gbs", ["Gbii"] = "ggb", ["Gbin"] = "xgb", ["Gbiri-Niragu"] = "grh", ["Gboloo Grebo"] = "gec", ["Gciriku"] = "diu", ["Gcwi"] = "gwj", ["Ge"] = "hmj", ["Ge'ez"] = "gez", ["Geba Karen"] = "kvq", ["Gebe"] = "gei", ["Gedaged"] = "gdd", ["Gedeo"] = "drs", ["Geji"] = "gji", ["Geko Karen"] = "ghk", ["Gela"] = "nlg", ["Gelao"] = "gio", ["Gele'"] = "sbc", ["Geme"] = "geq", ["Gen"] = "gej", ["Gende"] = "gaf", ["Gengle"] = "geg", ["Georgian"] = "ka", ["Gepo"] = "ygp", ["Gera"] = "gew", ["Gerka"] = "gek", ["जर्मन"] = "de", ["German Low German"] = "nds-de", ["German Sign Language"] = "gsg", ["Geruma"] = "gea", ["Geser-Gorom"] = "ges", ["Gey"] = "guv", ["Ghadames"] = "gha", ["Ghanaian Sign Language"] = "gse", ["Ghandruk Sign Language"] = "gds", ["Ghanongga"] = "ghn", ["Ghari"] = "gri", ["Ghayavi"] = "bmk", ["Ghera"] = "ghr", ["Ghomala'"] = "bbj", ["Ghomara"] = "gho", ["Ghotuo"] = "aaa", ["Ghulfan"] = "ghl", ["Giangan"] = "bgi", ["Gibanawa"] = "gib", ["Gidar"] = "gid", ["Gikyode"] = "acd", ["Gilaki"] = "glk", ["Gilbertese"] = "gil", ["Gilima"] = "gix", ["Gimi (Austronesian)"] = "gip", ["Gimi (Goroka)"] = "gim", ["Gimme"] = "kmp", ["Gimnime"] = "gmn", ["Ginuman"] = "gnm", ["Girawa"] = "bbr", ["Girirra"] = "gii", ["Giryama"] = "nyf", ["Githabul"] = "gih", ["Gitua"] = "ggt", ["Gitxsan"] = "git", ["Giyug"] = "giy", ["Gizrra"] = "tof", ["Glaro-Twabo"] = "glr", ["Glavda"] = "glw", ["Glio-Oubi"] = "oub", ["Glosa"] = "igs", ["Gnau"] = "gnu", ["Goa'uld"] = "art-gld", ["Goaria"] = "gig", ["Gobasi"] = "goi", ["Gobu"] = "gox", ["Godié"] = "god", ["Godoberi"] = "gdo", ["Godwari"] = "gdx", ["Goemai"] = "ank", ["Gofa"] = "gof", ["Gogo"] = "gog", ["Gogodala"] = "ggw", ["Goguryeo"] = "zkg", ["Gojri"] = "gju", ["Gokana"] = "gkn", ["Gokhy"] = "sit-gkh", ["Gola"] = "gol", ["Golin"] = "gvf", ["Golpa"] = "lja", ["Gondi"] = "gon", ["Gone Dau"] = "goo", ["Gong"] = "ugo", ["Gongduk"] = "goe", ["Gonja"] = "gjn", ["Goo"] = "gov", ["Gooniyandi"] = "gni", ["Gor"] = "gqr", ["Gorakor"] = "goc", ["Gorap"] = "goq", ["Goreng"] = "xgg", ["Gorontalo"] = "gor", ["Gorovu"] = "grq", ["Gorowa"] = "gow", ["Gothic"] = "got", ["Gottscheerish"] = "gmw-gts", ["Goundo"] = "goy", ["Gourmanchéma"] = "gux", ["Gowlan"] = "goj", ["Gowro"] = "gwf", ["Gozarkhani"] = "goz", ["Grangali"] = "nli", ["Grass Koiari"] = "kbk", ["Grebo"] = "grb", ["Greek"] = "el", ["Greek Sign Language"] = "gss", ["Green Gelao"] = "giq", ["Green Hmong"] = "hnj", ["Greenlandic"] = "kl", ["Grenadian Creole English"] = "gcl", ["Gresi"] = "grs", ["Groma"] = "gro", ["Gros Ventre"] = "ats", ["Gua"] = "gwx", ["Guahibo"] = "guh", ["Guajajára"] = "gub", ["Guajá"] = "gvj", ["Guambiano"] = "gum", ["Guamo"] = "sai-gmo", ["Guanano"] = "gvc", ["Guanche"] = "gnc", ["Guaraní"] = "gn", ["Guarayu"] = "gyr", ["Guatemalan Sign Language"] = "gsm", ["Guató"] = "gta", ["Guayabero"] = "guo", ["Guazacapán"] = "nai-guz", ["Gudang"] = "xgd", ["Gudanji"] = "nji", ["Gude"] = "gde", ["Gudu"] = "gdu", ["Guduf-Gava"] = "gdf", ["Guerrero Amuzgo"] = "amu", ["Guerrero Nahuatl"] = "ngu", ["Guevea de Humboldt Zapotec"] = "zpg", ["Gugadj"] = "ggd", ["Gugu Badhun"] = "gdc", ["Gugu Warra"] = "wrw", ["Guhu-Samane"] = "ghs", ["Guianese Creole"] = "gcr", ["Guiberoua Bété"] = "bet", ["Guinau"] = "awd-gnu", ["Guinea Kpelle"] = "gkp", ["Guinea-Bissau Creole"] = "pov", ["Guinea-Bissau Sign Language"] = "lgs", ["Guinean Sign Language"] = "gus", ["Guiqiong"] = "gqi", ["गुजराती"] = "gu", ["Gula"] = "glu", ["Gula'alaa"] = "gmb", ["Gulay"] = "gvl", ["Gule"] = "gly", ["Gulf Arabic"] = "afb", ["Gullah"] = "gul", ["Gumalu"] = "gmu", ["Gumatj"] = "gnn", ["Gumawana"] = "gvs", ["Gumuz"] = "guk", ["Gun"] = "guw", ["Gundi"] = "gdi", ["Gunditjmara"] = "gjm", ["Gundungurra"] = "xrd", ["Gungabula"] = "gyf", ["Gungu"] = "rub", ["Guntai"] = "gnt", ["Gunu"] = "yas", ["Gunwinggu"] = "gup", ["Gunya"] = "gyy", ["Gupa-Abawa"] = "gpa", ["Gupapuyngu"] = "guf", ["Gur Lama"] = "las", ["Guragone"] = "gge", ["Guramalum"] = "grz", ["Gurani"] = "hac", ["Gureng Gureng"] = "gnr", ["Gurgula"] = "ggg", ["Guriaso"] = "grx", ["Gurindji"] = "gue", ["Gurjar Apabhramsa"] = "inc-gup", ["Gurmana"] = "gvm", ["Guro"] = "goa", ["Guruntum"] = "grd", ["Gusan"] = "gsn", ["Gusii"] = "guz", ["Gusilay"] = "gsl", ["Gutnish"] = "gmq-gut", ["Guugu Yimidhirr"] = "kky", ["Guwa"] = "xgw", ["Guwamu"] = "gwu", ["Guwar"] = "aus-guw", ["Guya"] = "gka", ["Guyanese Creole English"] = "gyn", ["Guyani"] = "gvy", ["Guébie"] = "gie", ["Gvoko"] = "ngs", ["Gwa"] = "gwb", ["Gwahatike"] = "dah", ["Gwak"] = "jgk", ["Gwamhi-Wuri"] = "bga", ["Gwandara"] = "gwn", ["Gwara"] = "alv-gwa", ["Gweda"] = "grw", ["Gweno"] = "gwe", ["Gwere"] = "gwr", ["Gwich'in"] = "gwi", ["Gyalsumdo"] = "gyo", ["Gyele"] = "gyi", ["Gyem"] = "gye", ["Güenoa"] = "sai-gue", ["Habu"] = "hbu", ["Hadiyya"] = "hdy", ["Hadothi"] = "hoj", ["Hadrami"] = "xhd", ["Hadza"] = "hts", ["Haeke"] = "aek", ["Hahon"] = "hah", ["Haida"] = "hai", ["Haigwai"] = "hgw", ["Hainyaxo Bozo"] = "bzx", ["Haiphong Sign Language"] = "haf", ["Haisla"] = "has", ["Haitian Creole"] = "ht", ["Haitian Vodoun Culture Language"] = "hvc", ["Haiǁom"] = "hgm", ["Haji"] = "hji", ["Hajong"] = "haj", ["Hakka"] = "hak", ["Hakö"] = "hao", ["Halang"] = "hal", ["Halang Doan"] = "hld", ["Halbi"] = "hlb", ["Halia"] = "hla", ["Halkomelem"] = "hur", ["Hamap"] = "hmu", ["Hamba"] = "hba", ["Hamer-Banna"] = "amf", ["Hamtai"] = "hmt", ["Hanga"] = "hag", ["Hanga Hundi"] = "wos", ["Hani"] = "hni", ["Hanoi Sign Language"] = "hab", ["Hanunoo"] = "hnn", ["Harami"] = "xha", ["Harari"] = "har", ["Haraza"] = "nub-har", ["Harijan Kinnauri"] = "kjo", ["Haroi"] = "hro", ["Harsusi"] = "hss", ["Haruai"] = "tmd", ["Haruku"] = "hrk", ["Haryanvi"] = "bgc", ["Harzani"] = "hrz", ["Hasaitic"] = "sem-has", ["Hasha"] = "ybj", ["Hassaniya"] = "mey", ["Hatam"] = "had", ["Hattic"] = "xht", ["Hausa"] = "ha", ["Hausa Sign Language"] = "hsl", ["Haush"] = "sai-hau", ["Havasupai-Walapai-Yavapai"] = "yuf", ["Haveke"] = "hvk", ["Havu"] = "hav", ["Hawai'i Pidgin Sign Language"] = "hps", ["Hawaiian"] = "haw", ["Hawaiian Creole"] = "hwc", ["Haya"] = "hay", ["Hazaragi"] = "haz", ["Hdi"] = "xed", ["हिब्रू"] = "he", ["Hehe"] = "heh", ["Heiban"] = "hbn", ["Heiltsuk"] = "hei", ["Helong"] = "heg", ["Helu"] = "elu-prk", ["Hema"] = "nix", ["Hemba"] = "hem", ["Herdé"] = "hed", ["Herero"] = "hz", ["Hermit"] = "llf", ["Hernican"] = "xhr", ["Hewa"] = "ham", ["Heyo"] = "auk", ["Hibito"] = "hib", ["Hidatsa"] = "hid", ["Higaonon"] = "mba", ["Highland Konjo"] = "kjk", ["Highland Oaxaca Chontal"] = "chd", ["Highland Popoluca"] = "poi", ["Highland Puebla Nahuatl"] = "azz", ["Highland Totonac"] = "tos", ["Hijazi Arabic"] = "acw", ["Hijuk"] = "hij", ["Hiligaynon"] = "hil", ["Hill Maria"] = "mrr", ["Himarimã"] = "hir", ["Himyaritic"] = "sem-him", ["हिंदी"] = "hi", ["हिंदी डोगरी"] = "dgo", ["Hinduri"] = "hii", ["Hinukh"] = "gin", ["Hiri Motu"] = "ho", ["Hismaic"] = "sem-his", ["Hitchiti"] = "nai-hit", ["Hittite"] = "hit", ["Hitu"] = "htu", ["Hiw"] = "hiw", ["Hixkaryana"] = "hix", ["Hlai"] = "lic", ["Hlepho Phowa"] = "yhl", ["Hlersu"] = "hle", ["Hmar"] = "hmr", ["Hmong Don"] = "hmf", ["Hmong Dô"] = "hmv", ["Hmong Shua"] = "hmz", ["Hmwaveke"] = "mrk", ["Ho"] = "hoc", ["Ho Chi Minh City Sign Language"] = "hos", ["Hoava"] = "hoa", ["Hobyót"] = "hoh", ["Hoia Hoia"] = "hhi", ["Holikachuk"] = "hoi", ["Holiya"] = "hoy", ["Holma"] = "hod", ["Holoholo"] = "hoo", ["Holu"] = "hol", ["Homa"] = "hom", ["Honduran Lenca"] = "len", ["Honduras Sign Language"] = "hds", ["Hone"] = "juh", ["Hong Kong Sign Language"] = "hks", ["Honi"] = "how", ["Hopi"] = "hop", ["Horned Miao"] = "hrm", ["Horo"] = "hor", ["Horom"] = "hoe", ["Horpa"] = "ero", ["Hote"] = "hot", ["Hoti"] = "hti", ["Hovongan"] = "hov", ["Hoyahoya"] = "hhy", ["Hozo"] = "hoz", ["Hpon"] = "hpo", ["Hrangkhol"] = "hra", ["Hre"] = "hre", ["Hruso"] = "hru", ["Hu"] = "huo", ["Huachipaeri"] = "hug", ["Huambisa"] = "hub", ["Huaorani"] = "auc", ["Huarijio"] = "var", ["Huaulu"] = "hud", ["Huautla Mazatec"] = "mau", ["Huave"] = "huv", ["Huaxcaleca Nahuatl"] = "nhq", ["Huba"] = "hbb", ["Huehuetla Tepehua"] = "tee", ["Huetar"] = "cba-hue", ["Huichol"] = "hch", ["Huilliche"] = "huh", ["Huitepec Mixtec"] = "mxs", ["Huizhou"] = "czh", ["Hukumina"] = "huw", ["Hula"] = "hul", ["Hulaulá"] = "huy", ["Huli"] = "hui", ["Hulung"] = "huk", ["Humburi Senni"] = "hmb", ["Humene"] = "huf", ["Hun"] = "uth", ["Hunde"] = "hke", ["Hung"] = "hnu", ["Hungana"] = "hum", ["Hungarian"] = "hu", ["Hungarian Sign Language"] = "hsh", ["Hungworo"] = "nat", ["Hunjara-Kaina Ke"] = "hkk", ["Hunnic"] = "xhc", ["Hunsrik"] = "hrx", ["Hunzib"] = "huz", ["Hupa"] = "hup", ["Hupdë"] = "jup", ["Hupla"] = "hap", ["Hurrian"] = "xhu", ["Hutterisch"] = "geh", ["Hwana"] = "hwo", ["Hya"] = "hya", ["Hyam"] = "jab", ["Hän"] = "haa", ["Hértevin"] = "hrt", ["I-Wak"] = "iwk", ["Iaai"] = "iai", ["Iamalele"] = "yml", ["Iatmul"] = "ian", ["Iau"] = "tmu", ["Ibali Teke"] = "tek", ["Ibaloi"] = "ibl", ["Iban"] = "iba", ["Ibanag"] = "ibg", ["Ibani"] = "iby", ["Ibatan"] = "ivb", ["Iberian"] = "xib", ["Ibibio"] = "ibb", ["Ibino"] = "ibn", ["Iboko"] = "bkp", ["Ibu"] = "ibu", ["Ibuoro"] = "ibr", ["Icelandic"] = "is", ["Icelandic Sign Language"] = "icl", ["Iceve-Maci"] = "bec", ["Ida'an"] = "dbj", ["Idakho-Isukha-Tiriki"] = "ida", ["Idaté"] = "idt", ["Idere"] = "ide", ["Idesa"] = "ids", ["Idi"] = "idi", ["Ido"] = "io", ["Idoma"] = "idu", ["Idon"] = "idc", ["Idu"] = "clk", ["Idun"] = "ldb", ["Iduna"] = "viv", ["Ifo"] = "iff", ["Ifè"] = "ife", ["Igala"] = "igl", ["Igana"] = "igg", ["Igbo"] = "ig", ["Igede"] = "ige", ["Ignaciano"] = "ign", ["Igo"] = "ahl", ["Iguta"] = "nar", ["Igwe"] = "igw", ["Iha"] = "ihp", ["Ihievbe"] = "ihi", ["Ija-Zuba"] = "vki", ["Ik"] = "ikx", ["Ika"] = "ikk", ["Ikaranggal"] = "ikr", ["Ikizu"] = "ikz", ["Iko"] = "iki", ["Ikobi-Mena"] = "meb", ["Ikoma"] = "ntk", ["Ikpeng"] = "txi", ["Ikpeshi"] = "ikp", ["Ikposo"] = "kpo", ["Iku-Gora-Ankwa"] = "ikv", ["Ikulu"] = "ikl", ["Ikwere"] = "ikw", ["Ikwo"] = "iqw", ["Ila"] = "ilb", ["Ile Ape"] = "ila", ["Ilgar"] = "ilg", ["Ili Turki"] = "ili", ["Ili'uun"] = "ilu", ["Ilianen Manobo"] = "mbi", ["Illyrian"] = "xil", ["Ilocano"] = "ilo", ["Ilongot"] = "ilk", ["Ilue"] = "ilv", ["Ilwana"] = "mlk", ["Imbongu"] = "imo", ["Imonda"] = "imn", ["Imroing"] = "imr", ["Inabaknon"] = "abx", ["Inapang"] = "mzu", ["Inari Sami"] = "smn", ["Indanga"] = "bnt-ind", ["Indian Sign Language"] = "ins", ["Indo-Portuguese"] = "idb", ["Indonesian"] = "id", ["Indonesian Bajau"] = "bdl", ["Indonesian Sign Language"] = "inl", ["Indri"] = "idr", ["Indus Kohistani"] = "mvy", ["Indus Valley Language"] = "xiv", ["Inebu One"] = "oin", ["Ineseño"] = "inz", ["Inga"] = "inb", ["Ingrian"] = "izh", ["Ingush"] = "inh", ["Inlaod Itneg"] = "iti", ["Inoke-Yate"] = "ino", ["Inonhan"] = "loc", ["Inor"] = "ior", ["Inpui Naga"] = "nkf", ["Interlingua"] = "ia", ["Interlingue"] = "ie", ["International Sign"] = "ils", ["Intha"] = "int", ["Inuinnaqtun"] = "esx-inq", ["Inuit Sign Language"] = "iks", ["Inuktitut"] = "iu", ["Inuktun"] = "esx-ink", ["Inupiaq"] = "ik", ["Inuvialuktun"] = "ikt", ["Ipai"] = "nai-ipa", ["Ipalapa Amuzgo"] = "azm", ["Ipiko"] = "ipo", ["Ipili"] = "ipi", ["Ipulo"] = "ass", ["Iquito"] = "iqu", ["Ir"] = "irr", ["Irantxe"] = "irn", ["Iranun"] = "ill", ["Iraqi Arabic"] = "acm", ["Iraqw"] = "irk", ["Irarutu"] = "irh", ["Iraya"] = "iry", ["Iresim"] = "ire", ["Iriga Bicolano"] = "bto", ["Irish"] = "ga", ["Irish Sign Language"] = "isg", ["Irula"] = "iru", ["Isabi"] = "isa", ["Isan"] = "tts", ["Isanzu"] = "isn", ["Isarog Agta"] = "agk", ["Isaurian"] = "und-isa", ["Isconahua"] = "isc", ["Isebe"] = "igo", ["Ishkashimi"] = "isk", ["Isinai"] = "inn", ["Isirawa"] = "srl", ["Island Carib"] = "crb", ["Islander Creole English"] = "icr", ["Isnag"] = "isd", ["Isoko"] = "iso", ["Israeli Sign Language"] = "isr", ["Isthmus Mixe"] = "mir", ["Isthmus Zapotec"] = "zai", ["Istriot"] = "ist", ["Istro-Romanian"] = "ruo", ["Isu"] = "isu", ["Isubu"] = "szv", ["इतालवी"] = "it", ["Italian Sign Language"] = "ise", ["Italiot Greek"] = "grk-ita", ["Itawit"] = "itv", ["Itelmen"] = "itl", ["Itene"] = "ite", ["Iteri"] = "itr", ["Itik"] = "itx", ["Ito"] = "itw", ["Itonama"] = "ito", ["Itsekiri"] = "its", ["Itu Mbon Uzo"] = "itm", ["Itundujia Mixtec"] = "mce", ["Itzá"] = "itz", ["Iu Mien"] = "ium", ["Ivatan"] = "ivv", ["Iwaidja"] = "ibd", ["Iwal"] = "kbm", ["Iwam"] = "iwm", ["Iwur"] = "iwo", ["Ixcatec"] = "ixc", ["Ixcatlán Mazatec"] = "mzi", ["Ixil"] = "ixl", ["Ixtayutla Mixtec"] = "vmj", ["Ixtenco Otomi"] = "otz", ["Iyayu"] = "iya", ["Iyive"] = "uiv", ["Iyo"] = "nca", ["Iyo'wujwa Chorote"] = "crq", ["Iyojwa'ja Chorote"] = "crt", ["Izere"] = "izr", ["Izi"] = "izz", ["Izi-Ezaa-Ikwo-Mgbo"] = "izi", ["Izon"] = "ijc", ["Izora"] = "cbo", ["Iñapari"] = "inp", ["Jabem"] = "jae", ["Jabutí"] = "jbt", ["Jad"] = "jda", ["Jadgali"] = "jdg", ["Jah Hut"] = "jah", ["Jahanka"] = "jad", ["Jair Awyu"] = "awv", ["Jakaltek"] = "jac", ["Jakati"] = "jat", ["Jalapa de Díaz Mazatec"] = "maj", ["Jalkunan"] = "bxl", ["Jamaican Country Sign Language"] = "jcs", ["Jamaican Creole"] = "jam", ["Jamaican Sign Language"] = "jls", ["Jamamadí"] = "jaa", ["Jambi Malay"] = "jax", ["Jamiltepec Mixtec"] = "mxt", ["Jaminjung"] = "djd", ["Jamsay"] = "djm", ["Jamtish"] = "gmq-jmk", ["Jandavra"] = "jnd", ["Janday"] = "jan", ["Jangkang"] = "djo", ["Jangshung"] = "jna", ["Janji"] = "jni", ["जापानी"] = "ja", ["Japanese Sign Language"] = "jsl", ["Japhug"] = "sit-jap", ["Japrería"] = "jru", ["Jaqaru"] = "jqr", ["Jara"] = "jaf", ["Jarai"] = "jra", ["Jarawa"] = "anq", ["Jaru"] = "ddj", ["Jassic"] = "ysc", ["Jaunsari"] = "jns", ["Javanese"] = "jv", ["Javindo"] = "jvd", ["Jawe"] = "jaz", ["Jaya"] = "jyy", ["Jebero"] = "jeb", ["Jeh"] = "jeh", ["Jehai"] = "jhi", ["Jeikó"] = "sai-jko", ["Jeju"] = "jje", ["Jemez"] = "tow", ["Jenaama Bozo"] = "bze", ["Jeng"] = "jeg", ["Jennu Kurumba"] = "xuj", ["Jere"] = "jer", ["Jeri Kuo"] = "jek", ["Jersey Dutch"] = "gmw-jdt", ["Jeru"] = "akj", ["Jerung"] = "jee", ["Jhankot Sign Language"] = "jhs", ["Jiamao"] = "jio", ["Jiba"] = "juo", ["Jibu"] = "jib", ["Jicarilla"] = "apj", ["Jiiddu"] = "jii", ["Jilbe"] = "jie", ["Jili"] = "mgi", ["Jilim"] = "jil", ["Jimi"] = "jmi", ["Jimjimen"] = "jim", ["Jin"] = "cjy", ["Jina"] = "jia", ["Jingpho"] = "kac", ["Jingulu"] = "jig", ["Jiongnai Bunu"] = "pnu", ["Jirajara"] = "sai-jrj", ["Jirel"] = "jul", ["Jiru"] = "jrr", ["Jita"] = "jit", ["Jju"] = "kaj", ["Joba"] = "job", ["Jofotek-Bromnya"] = "jbr", ["Jola-Fonyi"] = "dyo", ["Jola-Kasa"] = "csk", ["Jonkor Bourmataguil"] = "jeu", ["Jordanian Sign Language"] = "jos", ["Jorá"] = "jor", ["Jowulu"] = "jow", ["Ju"] = "juu", ["Juang"] = "jun", ["Juba Arabic"] = "pga", ["Judeo-Italian"] = "itk", ["Judeo-Persian"] = "jpr", ["Judeo-Tat"] = "jdt", ["Jukun Takum"] = "jbu", ["Jumaytepeque"] = "nai-jum", ["Jumjum"] = "jum", ["Jumla Sign Language"] = "jus", ["Jumli"] = "jml", ["Jungle Inga"] = "inj", ["Juquila Mixe"] = "mxq", ["Jur Modo"] = "bex", ["Juray"] = "juy", ["Jurchen"] = "juc", ["Jurúna"] = "jur", ["Jutiapa"] = "nai-jtp", ["Jutish"] = "jut", ["Juwal"] = "mwb", ["Juxtlahuaca Mixtec"] = "vmc", ["Juǀ'hoan"] = "ktz", ["Jwira-Pepesa"] = "jwi", ["Júma"] = "jua", ["K'iche'"] = "quc", ["Kaamba"] = "xku", ["Kaan"] = "ldl", ["Kaang Chin"] = "ckn", ["Kaansa"] = "gna", ["Kaapor Sign Language"] = "uks", ["Kaba"] = "ksp", ["Kabalai"] = "kvf", ["Kabardian"] = "kbd", ["Kabatei"] = "xkp", ["Kabba-Laka"] = "lap", ["Kabishiana"] = "tup-kab", ["Kabiyé"] = "kbp", ["Kabola"] = "klz", ["Kabore One"] = "onk", ["Kabras"] = "lkb", ["Kaburi"] = "uka", ["Kabutra"] = "kbu", ["Kabuverdianu"] = "kea", ["Kabwa"] = "cwa", ["Kabwari"] = "kcw", ["Kabyle"] = "kab", ["Kachama-Ganjule"] = "kcx", ["Kachari"] = "xac", ["Kachchi"] = "kfr", ["Kachi Koli"] = "gjk", ["Kacipo-Balesi"] = "koe", ["Kaco'"] = "xkk", ["Kadai"] = "kzd", ["Kadar"] = "kej", ["Kadara"] = "kad", ["Kadaru"] = "kdu", ["Kadiwéu"] = "kbc", ["Kado"] = "kdv", ["Kadugli"] = "xtc", ["Kaduo"] = "ktp", ["Kaera"] = "jka", ["Kafa"] = "kbr", ["Kafoa"] = "kpu", ["Kagan Kalagan"] = "kll", ["Kagate"] = "syw", ["Kagayanen"] = "cgc", ["Kagoma"] = "kdm", ["Kagoro"] = "xkg", ["Kagulu"] = "kki", ["Kahe"] = "hka", ["Kahua"] = "agw", ["Kaian"] = "kct", ["Kaibobo"] = "kzb", ["Kaidipang"] = "kzp", ["Kaiep"] = "kbw", ["Kaikadi"] = "kep", ["Kaike"] = "kzq", ["Kaiku"] = "kkq", ["Kaimbulawa"] = "zka", ["Kaimbé"] = "xai", ["Kaingang"] = "kgp", ["Kairak"] = "ckr", ["Kairiru"] = "kxa", ["Kairui-Midiki"] = "krd", ["Kais"] = "kzm", ["Kaivi"] = "kce", ["Kaiwá"] = "kgk", ["Kaiy"] = "tcq", ["Kajakse"] = "ckq", ["Kajali"] = "xkj", ["Kajaman"] = "kag", ["Kakabai"] = "kqf", ["Kakabe"] = "kke", ["Kakanda"] = "kka", ["Kaki Ae"] = "tbd", ["Kakihum"] = "kxe", ["Kako"] = "kkj", ["Kakwa"] = "keo", ["Kala"] = "kcl", ["Kala Lagaw Ya"] = "mwp", ["Kalaamaya"] = "lkm", ["Kalabakan"] = "kve", ["Kalabari"] = "ijn", ["Kalabra"] = "kzz", ["Kalagan"] = "kqe", ["Kalaktang Monpa"] = "kkf", ["Kalam"] = "kmh", ["Kalami"] = "gwc", ["Kalamsé"] = "knz", ["Kalanadi"] = "wkl", ["Kalanga"] = "kck", ["Kalao"] = "kly", ["Kalapuya"] = "kyl", ["Kalarko"] = "kba", ["Kalasha"] = "kls", ["Kalasuri"] = "xme-kls", ["Kalenjin"] = "kln", ["Kalkatungu"] = "ktg", ["Kalkoti"] = "xka", ["Kalmyk"] = "xal", ["Kalo Finnish Romani"] = "rmf", ["Kalou"] = "ywa", ["Kaluli"] = "bco", ["Kalumpang"] = "kli", ["Kam"] = "kdx", ["Kamakan"] = "vkm", ["Kamang"] = "woi", ["Kamano"] = "kbq", ["Kamantan"] = "kci", ["Kamar"] = "keq", ["Kamara"] = "jmr", ["Kamarian"] = "kzx", ["Kamaru"] = "kgx", ["Kamarupi Prakrit"] = "inc-kam", ["Kamasa"] = "klp", ["Kamasau"] = "kms", ["Kamassian"] = "xas", ["Kamayo"] = "kyk", ["Kamayurá"] = "kay", ["Kamba"] = "kam", ["Kambaata"] = "ktb", ["Kambaira"] = "kyy", ["Kambera"] = "xbr", ["Kamberataro"] = "kbv", ["Kamberau"] = "irx", ["Kambiwá"] = "xbw", ["Kami"] = "kmi", ["Kamkata-viri"] = "bsh", ["Kamo"] = "kcq", ["Kamoro"] = "kgq", ["Kamta"] = "rkt", ["Kamu"] = "xmu", ["Kamula"] = "xla", ["Kamwe"] = "hig", ["Kanakanabu"] = "xnb", ["Kanakuru"] = "kna", ["Kanamari"] = "knm", ["Kanashi"] = "xns", ["Kanasi"] = "soq", ["Kandas"] = "kqw", ["Kandawo"] = "gam", ["Kande"] = "kbs", ["Kang"] = "kyp", ["Kanga"] = "kcp", ["Kangean"] = "kkv", ["Kanggape"] = "igm", ["Kangjia"] = "kxs", ["Kango"] = "kty", ["Kango-Sua"] = "kzy", ["Kangri"] = "xnr", ["Kaniet"] = "ktk", ["Kanikkaran"] = "kev", ["Kaningdon-Nindem"] = "kdp", ["Kaningi"] = "kzo", ["Kaningra"] = "knr", ["Kaninuwa"] = "wat", ["Kanite"] = "kmu", ["Kanjari"] = "kft", ["Kanju"] = "kbe", ["Kankanaey"] = "kne", ["Kannada"] = "kn", ["Kannada Kurumba"] = "kfi", ["Kannauji"] = "bjj", ["Kanowit"] = "kxn", ["Kanoé"] = "kxo", ["Kansa"] = "ksk", ["Kantosi"] = "xkt", ["Kanu"] = "khx", ["Kanufi"] = "kni", ["Kanuri"] = "kr", ["Kanyok"] = "kny", ["Kao"] = "kax", ["Kaonde"] = "kqn", ["Kap"] = "ykm", ["Kapampangan"] = "pam", ["Kapauri"] = "khp", ["Kapin"] = "tbx", ["Kapinawá"] = "xpn", ["Kapingamarangi"] = "kpg", ["Kapriman"] = "dju", ["Kaptiau"] = "kbi", ["Kapya"] = "klo", ["Kaqchikel"] = "cak", ["Kara (New Guinea)"] = "leu", ["Kara (Tanzania)"] = "reg", ["Karachay-Balkar"] = "krc", ["Karadjeri"] = "gbd", ["Karaga Mandaya"] = "mry", ["Karaim"] = "kdr", ["Karajá"] = "kpj", ["Karakalpak"] = "kaa", ["Karakhanid"] = "xqa", ["Karami"] = "xar", ["Karamojong"] = "kdj", ["Karang"] = "kzr", ["Karanga"] = "kth", ["Karankawa"] = "zkk", ["Karao"] = "kyj", ["Karas"] = "kgv", ["Karata"] = "kpt", ["Karawa"] = "xrw", ["Karbi"] = "mjw", ["Kare (Africa)"] = "kbn", ["Kare (New Guinea)"] = "kmf", ["Karekare"] = "kai", ["Karelian"] = "krl", ["Karey"] = "kyd", ["Kari"] = "kbj", ["Karingani"] = "kgn", ["Karipuna"] = "kuq", ["Karipúna"] = "kgm", ["Karipúna Creole French"] = "kmv", ["Kariri"] = "kzw", ["Karitiâna"] = "ktn", ["Kariya"] = "kil", ["Kariyarra"] = "vka", ["Karkar-Yuri"] = "yuj", ["Karkin"] = "krb", ["Karko"] = "kko", ["Karnai"] = "bbv", ["Karo"] = "kxh", ["Karo Batak"] = "btx", ["Karok"] = "kyh", ["Karolanos"] = "kyn", ["Karon"] = "krx", ["Karon Dori"] = "kgw", ["Karore"] = "xkx", ["Karranga"] = "xrq", ["Karuwali"] = "rxw", ["Kasanga"] = "ccj", ["Kasem"] = "xsm", ["Kashaya"] = "kju", ["Kashmiri"] = "ks", ["Kashubian"] = "csb", ["Kasiguranin"] = "ksn", ["Kaska"] = "kkz", ["Kaskean"] = "zsk", ["Kaskihá"] = "gva", ["Kassite"] = "und-kas", ["Kassonke"] = "kao", ["Kasua"] = "khs", ["Kataang"] = "kgd", ["Katabaga"] = "ktq", ["Katawixi"] = "xat", ["Katembri"] = "sai-kat", ["Kathlamet"] = "nai-kat", ["Kathoriya Tharu"] = "tkt", ["Kathu"] = "ykt", ["Katkari"] = "kfu", ["Katla"] = "kcr", ["Kato"] = "ktw", ["Katso"] = "kaf", ["Katua"] = "kta", ["Katukina"] = "knt", ["Kaulong"] = "pss", ["Kaur"] = "vkk", ["Kaure"] = "bpp", ["Kaurna"] = "zku", ["Kauwera"] = "xau", ["Kavalan"] = "ckv", ["Kavet"] = "krv", ["Kawacha"] = "kcb", ["Kawaiisu"] = "xaw", ["Kawe"] = "kgb", ["Kawishana"] = "awd-kaw", ["Kawésqar"] = "alc", ["Kaxararí"] = "ktx", ["Kaxuyana"] = "kbb", ["Kaya"] = "zra", ["Kayabí"] = "kyz", ["Kayagar"] = "kyt", ["Kayan"] = "pdu", ["Kayan Mahakam"] = "xay", ["Kayan River Kayan"] = "xkn", ["Kayapa Kallahan"] = "kak", ["Kayapó"] = "txu", ["Kayardild"] = "gyd", ["Kayeli"] = "kzl", ["Kayong"] = "kxy", ["Kayort"] = "kyv", ["Kaytetye"] = "gbb", ["Kayupulau"] = "kzu", ["Kazakh"] = "kk", ["Kazukuru"] = "kzk", ["Ke'o"] = "xxk", ["Keak"] = "keh", ["Keapara"] = "khz", ["Kedah Malay"] = "meo", ["Kedang"] = "ksx", ["Keder"] = "kdy", ["Kehu"] = "khh", ["Kei"] = "kei", ["Keiga"] = "kec", ["Kein"] = "bmh", ["Keiyo"] = "eyo", ["Kela-Yela"] = "kel", ["Kelabit"] = "kzi", ["Keley-I Kallahan"] = "ify", ["Keliko"] = "kbo", ["Kelo"] = "xel", ["Kelon"] = "kyo", ["Kemak"] = "kem", ["Kembayan"] = "xem", ["Kemberano"] = "bzp", ["Kembra"] = "xkw", ["Kemezung"] = "dmo", ["Kemi Sami"] = "sjk", ["Kemiehua"] = "kfj", ["Kemtuik"] = "kmt", ["Kenaboi"] = "xbn", ["Kenati"] = "gat", ["Kendayan"] = "knx", ["Kendeje"] = "klf", ["Kendem"] = "kvm", ["Kenga"] = "kyq", ["Keningau Murut"] = "kxi", ["Keninjal"] = "knl", ["Kensiu"] = "kns", ["Kenswei Nsei"] = "ndb", ["Kenyan Sign Language"] = "xki", ["Kenyang"] = "ken", ["Kenyi"] = "lke", ["Keoru-Ahia"] = "xeu", ["Kepkiriwát"] = "kpn", ["Kepo'"] = "kuk", ["Kera"] = "ker", ["Kerak"] = "hhr", ["Kereho"] = "xke", ["Kerek"] = "krk", ["Kerewe"] = "ked", ["Kerewo"] = "kxz", ["Kerinci"] = "kvr", ["Kermanic"] = "xme-ker", ["Kesawai"] = "xes", ["Ket"] = "ket", ["Ketangalan"] = "kae", ["Kete"] = "kcv", ["Ketengban"] = "xte", ["Ketum"] = "ktt", ["Kewa"] = "kew", ["Keyagana"] = "kyg", ["Kgalagadi"] = "xkv", ["Khakas"] = "kjh", ["Khalaj"] = "klj", ["Khaling"] = "klr", ["Kham"] = "kjl", ["Khamnigan Mongol"] = "ykh", ["Khamti"] = "kht", ["Khamyang"] = "ksu", ["Khana"] = "ogo", ["Khandeshi"] = "khn", ["Khanty"] = "kca", ["Khao"] = "xao", ["Kharam Naga"] = "kfw", ["Kharia"] = "khr", ["Kharia Thar"] = "ksy", ["Khasa Prakrit"] = "inc-kha", ["Khasi"] = "kha", ["Khayo"] = "lko", ["Khazar"] = "zkz", ["Khe"] = "kqg", ["Khehek"] = "tlx", ["Khengkha"] = "xkf", ["Khetrani"] = "xhe", ["Khezha Naga"] = "nkh", ["Khiamniungan Naga"] = "kix", ["Khinalug"] = "kjj", ["Khirwar"] = "kwx", ["Khisa"] = "kqm", ["Khitan"] = "zkt", ["Khlor"] = "llo", ["Khlula"] = "ykl", ["Khmer"] = "km", ["Khmu"] = "kjg", ["Khoekhoe"] = "naq", ["Khoibu Naga"] = "nkb", ["Khoini"] = "xkc", ["Kholok"] = "ktc", ["Kholosi"] = "inc-kho", ["Khonso"] = "kxc", ["Khorasani Turkish"] = "kmz", ["Khorezmian Turkic"] = "zkh", ["Khotanese"] = "kho", ["Khowar"] = "khw", ["Khroskyabs"] = "jiq", ["Khua"] = "xhv", ["Khuen"] = "khf", ["Khumi Chin"] = "cnk", ["Khvarshi"] = "khv", ["Khwarezmian"] = "xco", ["Khwe"] = "xuu", ["Kháng"] = "kjm", ["Khün"] = "kkh", ["Kibala"] = "blv", ["Kibena"] = "bez", ["Kibet"] = "kie", ["Kibiri"] = "prm", ["Kichwa"] = "qwe-kch", ["Kickapoo"] = "kic", ["Kikai"] = "kzg", ["Kikami"] = "kcu", ["Kikuyu"] = "ki", ["Kildin Sami"] = "sjd", ["Kilit"] = "xme-klt", ["Kilivila"] = "kij", ["Kiliwa"] = "klb", ["Kilmeri"] = "kih", ["Kim"] = "kia", ["Kim Mun"] = "mji", ["Kimaama"] = "kig", ["Kimaragang"] = "kqr", ["Kimbu"] = "kiv", ["Kimbundu"] = "kmb", ["Kimki"] = "sbt", ["Kimré"] = "kqp", ["Kinabalian"] = "cbw", ["Kinalakna"] = "kco", ["Kinaray-a"] = "krj", ["Kinga"] = "zga", ["Kings River Yokuts"] = "nai-kry", ["Kinikinao"] = "gqn", ["Kinnauri"] = "kfk", ["Kintaq"] = "knq", ["Kinuku"] = "kkd", ["Kioko"] = "ues", ["Kiong"] = "kkm", ["Kiorr"] = "xko", ["Kiowa"] = "kio", ["Kipchak"] = "qwm", ["Kipfokomo"] = "pkb", ["Kipsigis"] = "sgc", ["Kiput"] = "kyi", ["Kir-Balar"] = "kkr", ["Kire"] = "geb", ["Kirfi"] = "kks", ["Kirike"] = "okr", ["Kirikiri"] = "kiy", ["Kirya-Konzel"] = "fkk", ["Kis"] = "kis", ["Kisa"] = "lks", ["Kisan"] = "xis", ["Kisankasa"] = "kqh", ["Kisar"] = "kje", ["Kisi"] = "kiz", ["Kistane"] = "gru", ["Kita Maninkakan"] = "mwk", ["Kitanemuk"] = "azc-ktn", ["Kitembo"] = "tbt", ["Kitja"] = "gia", ["Kitsai"] = "kii", ["Kituba"] = "ktu", ["Kiunum"] = "wei", ["Kla"] = "lda", ["Klallam"] = "clm", ["Klamath-Modoc"] = "kla", ["Klao"] = "klu", ["Klias River Kadazan"] = "kqt", ["Klingon"] = "tlh", ["Knaanic"] = "czk", ["Ko"] = "fuj", ["Koalib"] = "kib", ["Koasati"] = "cku", ["Koba"] = "kpd", ["Kobiana"] = "kcj", ["Kobol"] = "kgu", ["Kobon"] = "kpw", ["Koch"] = "kdq", ["Kochila Tharu"] = "thq", ["Koda"] = "cdz", ["Kodaku"] = "ksz", ["Kodava"] = "kfa", ["Kodeoha"] = "vko", ["Kodi"] = "kod", ["Kodia"] = "kwp", ["Koenoem"] = "kcs", ["Kofa"] = "kso", ["Kofei"] = "kpi", ["Kofyar"] = "kwl", ["Kohin"] = "kkx", ["Kohistani Shina"] = "plk", ["Koho"] = "kpm", ["Kohumono"] = "bcs", ["Koi"] = "kkt", ["Koibal"] = "zkb", ["Koireng"] = "nkd", ["Koitabu"] = "kqi", ["Koiwat"] = "kxt", ["Kok-Nar"] = "gko", ["Kok-Paponk"] = "okg", ["Kokata"] = "ktd", ["Kokborok"] = "trp", ["Koke"] = "kou", ["Koko-Bera"] = "kkp", ["Kokoda"] = "xod", ["Kokola"] = "kzn", ["Kokota"] = "kkk", ["Kol (Cameroon)"] = "biw", ["Kol (New Guinea)"] = "kol", ["Kola"] = "kvv", ["Kolami"] = "kfb", ["Kolbila"] = "klc", ["Kolhe"] = "ekl", ["Kolibugan Subanon"] = "skn", ["Kolom"] = "klm", ["Koluwawa"] = "klx", ["Kom (Cameroon)"] = "bkm", ["Kom (India)"] = "kmm", ["Koma"] = "kmy", ["Komba"] = "kpf", ["Kombai"] = "tyn", ["Kombio"] = "xbi", ["Komering"] = "kge", ["Komi-Permyak"] = "koi", ["Komi-Yazva"] = "urj-kya", ["Komi-Zyrian"] = "kpv", ["Kominimung"] = "xoi", ["Komo"] = "xom", ["Komodo"] = "kvh", ["Kompane"] = "kvp", ["Komyandaret"] = "kzv", ["Kon Keu"] = "kkn", ["Konabéré"] = "bbo", ["Konai"] = "kxw", ["Konda"] = "knd", ["Konda-Dora"] = "kfc", ["Kondekor"] = "gau", ["Koneraw"] = "kdw", ["Kongo"] = "kg", ["Konkani"] = "kok", ["Konkomba"] = "xon", ["Konni"] = "kma", ["Kono (Guinea)"] = "knu", ["Kono (Nigeria)"] = "klk", ["Kono (Sierra Leone)"] = "kno", ["Konomala"] = "koa", ["Konomihu"] = "nai-knm", ["Konongo"] = "kcz", ["Konyak Naga"] = "nbe", ["Konyanka Maninka"] = "mku", ["Konzo"] = "koo", ["Koonzime"] = "ozm", ["Koorete"] = "kqy", ["Kopar"] = "xop", ["Kopkaka"] = "opk", ["Korafe-Yegha"] = "kpr", ["Korak"] = "koz", ["Korana"] = "kqz", ["Korandje"] = "kcy", ["Korean"] = "ko", ["Korean Sign Language"] = "kvk", ["Koreguaje"] = "coe", ["Koresh-e Rostam"] = "okh", ["Korku"] = "kfq", ["Korlai Creole Portuguese"] = "vkp", ["Koro (India)"] = "jkr", ["Koro (New Guinea)"] = "kxr", ["Koro (Vanuatu)"] = "krf", ["Koro (West Africa)"] = "kfo", ["Koromfé"] = "kfz", ["Koromira"] = "kqj", ["Koronadal Blaan"] = "bpr", ["Koroni"] = "xkq", ["Korop"] = "krp", ["Koropó"] = "xxr", ["Koroshi"] = "ktl", ["Korowai"] = "khe", ["Korra Koraga"] = "kfd", ["Korubo"] = "xor", ["Korupun-Sela"] = "kpq", ["Korwa"] = "kfp", ["Koryak"] = "kpy", ["Kosadle"] = "kiq", ["Kosarek Yale"] = "kkl", ["Kosena"] = "kze", ["Koshin"] = "kid", ["Kosraean"] = "kos", ["Kota (Gabon)"] = "koq", ["Kota (India)"] = "kfe", ["Kota Bangun Kutai Malay"] = "mqg", ["Kota Marudu Talantang"] = "grm", ["Kota Marudu Tinagas"] = "ktr", ["Kotafon Gbe"] = "kqk", ["Kotava"] = "avk", ["Koti"] = "eko", ["Kott"] = "zko", ["Kou"] = "snz", ["Kouya"] = "kyf", ["Kovai"] = "kqb", ["Kove"] = "kvc", ["Kowaki"] = "xow", ["Kowiai"] = "kwh", ["Koy Sanjaq Surat"] = "kqd", ["Koya"] = "kff", ["Koyaga"] = "kga", ["Koyo"] = "koh", ["Koyra Chiini"] = "khq", ["Koyraboro Senni"] = "ses", ["Koyukon"] = "koy", ["Kpagua"] = "kuw", ["Kpala"] = "kpl", ["Kpan"] = "kpk", ["Kpasam"] = "pbn", ["Kpati"] = "koc", ["Kpatili"] = "kym", ["Kpee"] = "cpo", ["Kpelle"] = "kpe", ["Kpessi"] = "kef", ["Kplang"] = "kph", ["Krache"] = "kye", ["Krahô"] = "xra", ["Kraol"] = "rka", ["Krenak"] = "kqq", ["Kresh"] = "krs", ["Krevinian"] = "zkv", ["Kreye"] = "xre", ["Krikati-Timbira"] = "xri", ["Krim"] = "krm", ["Krio"] = "kri", ["Kriol"] = "rop", ["Krisa"] = "ksi", ["Kristang"] = "mcm", ["Krobu"] = "kxb", ["Krongo"] = "kgo", ["Kru'ng"] = "krr", ["Krymchak"] = "jct", ["Kryts"] = "kry", ["Kua"] = "tyu", ["Kua-nsi"] = "ykn", ["Kuamasi"] = "yku", ["Kuan"] = "uan", ["Kuanhua"] = "xnh", ["Kube"] = "kgf", ["Kubi"] = "kof", ["Kubo"] = "jko", ["Kubu"] = "kvb", ["Kucong"] = "lkc", ["Kudiya"] = "kfg", ["Kudmali"] = "kyw", ["Kudu-Camo"] = "kov", ["Kugama"] = "kow", ["Kugbo"] = "kes", ["Kugu-Muminh"] = "xmh", ["Kui (India)"] = "kxu", ["Kui (Indonesia)"] = "kvd", ["Kuijau"] = "dkr", ["Kuikúro"] = "kui", ["Kujarge"] = "vkj", ["Kuk"] = "kfn", ["Kukatja"] = "kux", ["Kukele"] = "kez", ["Kukkuzi"] = "urj-kuk", ["Kukna"] = "kex", ["Kuku-Mangk"] = "xmq", ["Kuku-Mu'inh"] = "xmp", ["Kuku-Thaypan"] = "typ", ["Kuku-Ugbanh"] = "ugb", ["Kuku-Uwanh"] = "uwa", ["Kuku-Yalanji"] = "gvn", ["Kula"] = "tpg", ["Kulaal"] = "glj", ["Kulere"] = "kul", ["Kulfa"] = "kxj", ["Kulina"] = "xpk", ["Kulisusu"] = "vkl", ["Kullu Pahari"] = "kfx", ["Kulon"] = "uon", ["Kulon-Pazeh"] = "uun", ["Kulung"] = "kle", ["Kumak"] = "nee", ["Kumalu"] = "ksl", ["Kumam"] = "kdi", ["Kuman"] = "kue", ["Kumaoni"] = "kfy", ["Kumarbhag Paharia"] = "kmj", ["Kumba"] = "ksm", ["Kumbainggar"] = "kgs", ["Kumbaran"] = "wkb", ["Kumbewaha"] = "xks", ["Kumeyaay"] = "nai-kum", ["Kumhali"] = "kra", ["Kumu"] = "kmw", ["Kumukio"] = "kuo", ["Kumyk"] = "kum", ["Kumzari"] = "zum", ["Kuna"] = "cuk", ["Kunama"] = "kun", ["Kunbarlang"] = "wlg", ["Kunda"] = "kdn", ["Kundal Shahi"] = "shd", ["Kunduvadi"] = "wku", ["Kung"] = "kfl", ["Kungarakany"] = "ggk", ["Kungardutyi"] = "gdt", ["Kunggari"] = "kgl", ["Kungkari"] = "lku", ["Kuni"] = "kse", ["Kuni-Boazi"] = "kvg", ["Kunigami"] = "xug", ["Kunimaipa"] = "kup", ["Kunja"] = "pep", ["Kunjen"] = "kjn", ["Kunyi"] = "njx", ["Kunza"] = "kuz", ["Kuo"] = "xuo", ["Kuot"] = "kto", ["Kupa"] = "kug", ["Kupang Malay"] = "mkn", ["Kupia"] = "key", ["Kupsabiny"] = "kpz", ["Kur"] = "kuv", ["Kura Ede Nago"] = "nqk", ["Kurama"] = "krh", ["Kuranko"] = "knk", ["Kuri"] = "nbn", ["Kuria"] = "kuj", ["Kurichiya"] = "kfh", ["Kurmukar"] = "kfv", ["Kurnai"] = "unn", ["Kurrama"] = "vku", ["Kurti"] = "ktm", ["Kurtjar"] = "gdj", ["Kurtöp"] = "xkz", ["Kurudu"] = "kjr", ["Kurukh"] = "kru", ["Kuruáya"] = "kyr", ["Kusaal"] = "kus", ["Kusaghe"] = "ksg", ["Kushi"] = "kuh", ["Kustenau"] = "awd-kus", ["Kusu"] = "ksv", ["Kusunda"] = "kgg", ["Kutang Ghale"] = "ght", ["Kutenai"] = "kut", ["Kutep"] = "kub", ["Kuthant"] = "xut", ["Kutto"] = "kpa", ["Kutu"] = "kdc", ["Kuturmi"] = "khj", ["Kuuk Thaayorre"] = "thd", ["Kuuk Yak"] = "uky", ["Kuuku-Ya'u"] = "kuy", ["Kuvale"] = "olu", ["Kuvi"] = "kxv", ["Kuwaa"] = "blh", ["Kuwaataay"] = "cwt", ["Kuwani"] = "paa-kwn", ["Kuy"] = "kdt", ["Kven"] = "fkv", ["Kw'adza"] = "wka", ["Kwa'"] = "bko", ["Kwaami"] = "ksq", ["Kwadi"] = "kwz", ["Kwaio"] = "kwd", ["Kwaja"] = "kdz", ["Kwak"] = "kwq", ["Kwak'wala"] = "kwk", ["Kwakum"] = "kwu", ["Kwalhioqua-Tlatskanai"] = "qwt", ["Kwama"] = "kmq", ["Kwambi"] = "kwm", ["Kwamera"] = "tnk", ["Kwami"] = "ktf", ["Kwamtim One"] = "okk", ["Kwang"] = "kvi", ["Kwanga"] = "kwj", ["Kwangali"] = "kwn", ["Kwanja"] = "knp", ["Kwanka"] = "bij", ["Kwanyama"] = "kj", ["Kwara'ae"] = "kwf", ["Kwasio"] = "nmg", ["Kwaya"] = "kya", ["Kwaza"] = "xwa", ["Kwegu"] = "xwg", ["Kwer"] = "kwr", ["Kwerba"] = "kwe", ["Kwerba Mamberamo"] = "xwr", ["Kwere"] = "cwe", ["Kwerisa"] = "kkb", ["Kwese"] = "kws", ["Kwesten"] = "kwt", ["Kwini"] = "gww", ["Kwinsu"] = "kuc", ["Kwinti"] = "kww", ["Kwoma"] = "kmo", ["Kwomtari"] = "kwo", ["Kyak"] = "bka", ["Kyaka"] = "kyc", ["Kyakala"] = "tuw-kkl", ["Kyan-Karyaw Naga"] = "nqq", ["Kyenele"] = "kql", ["Kyenga"] = "tye", ["Kyerung"] = "kgy", ["Kyrgyz"] = "ky", ["Kâte"] = "kmg", ["Kélé"] = "keb", ["Kómnzo"] = "paa-kom", ["La'bi"] = "lbi", ["Laal"] = "gdm", ["Laalaa"] = "cae", ["Laba"] = "lau", ["Label"] = "lbb", ["Labir"] = "jku", ["Labo"] = "mwi", ["Labo Phowa"] = "ypb", ["Laboya"] = "lmy", ["Labu"] = "lbu", ["Labuk-Kinabatangan Kadazan"] = "dtb", ["Lacandon"] = "lac", ["Lachi"] = "lbt", ["Lachiguiri Zapotec"] = "zpa", ["Lachixío Zapotec"] = "zpl", ["Ladakhi"] = "lbj", ["Ladin"] = "lld", ["Ladino"] = "lad", ["Ladji-Ladji"] = "llj", ["Laeko-Libuat"] = "lkl", ["Lafofa"] = "laf", ["Laghu"] = "lgb", ["Laghuu"] = "lgh", ["Lagwan"] = "kot", ["Laha (Indonesia)"] = "lhh", ["Laha (Vietnam)"] = "lha", ["Lahanan"] = "lhn", ["Lahnda"] = "lah", ["Lahta Karen"] = "kvt", ["Lahu"] = "lhu", ["Lahu Shi"] = "lhi", ["Lahul Lohar"] = "lhl", ["Lai"] = "cnh", ["Laimbue"] = "lmx", ["Laitu Chin"] = "clj", ["Laiyolo"] = "lji", ["Lak"] = "lbe", ["Laka"] = "lak", ["Lakalei"] = "lka", ["Lake Miwok"] = "lmw", ["Lakha"] = "lkh", ["Laki"] = "lki", ["Lakkia"] = "lbc", ["Lakon"] = "lkn", ["Lakondê"] = "lkd", ["Lakota"] = "lkt", ["Lakota Dida"] = "dic", ["Lala (New Guinea)"] = "nrz", ["Lala (South Africa)"] = "bnt-lal", ["Lala-Bisa"] = "leb", ["Lala-Roba"] = "lla", ["Lalana Chinantec"] = "cnl", ["Lama Bai"] = "lay", ["Lamaholot"] = "slp", ["Lamalera"] = "lmr", ["Lamang"] = "hia", ["Lamatuka"] = "lmq", ["Lamba"] = "lam", ["Lambadi"] = "lmn", ["Lambichhong"] = "lmh", ["Lambya"] = "lai", ["Lame"] = "bma", ["Lamenu"] = "lmu", ["Lamet"] = "lbn", ["Lamja-Dengsa-Tola"] = "ldh", ["Lamkang"] = "lmk", ["Lamma"] = "lev", ["Lamnso'"] = "lns", ["Lamogai"] = "lmg", ["Lampung Api"] = "ljp", ["Lamu"] = "llh", ["Lamu-Lamu"] = "lby", ["Lanas Lobu"] = "ruu", ["Landoma"] = "ldm", ["Lang'e"] = "yne", ["Langam"] = "lnm", ["Langbashe"] = "lna", ["Langi"] = "lag", ["Langnian Buyang"] = "yln", ["Lango (Sudan)"] = "lno", ["Lango (Uganda)"] = "laj", ["Lanima"] = "lnw", ["Lanoh"] = "lnh", ["Lao"] = "lo", ["Lao Naga"] = "nlq", ["Laomian"] = "lwm", ["Laopang"] = "lbg", ["Laos Sign Language"] = "lso", ["Lapaguía-Guivini Zapotec"] = "ztl", ["Lapine"] = "art-lap", ["Lapuyan Subanun"] = "laa", ["Laragia"] = "lrg", ["Larantuka Malay"] = "lrt", ["Lardil"] = "lbz", ["Larestani"] = "lrl", ["Larevat"] = "lrv", ["Larike-Wakasihu"] = "alo", ["Laro"] = "lro", ["Larteh"] = "lar", ["Laru"] = "lan", ["Lasalimu"] = "llm", ["Lasgerdi"] = "lsa", ["Lashi"] = "lsi", ["Lasi"] = "lss", ["Latgalian"] = "ltg", ["Latin"] = "la", ["Latu"] = "ltu", ["Latundê"] = "ltn", ["Latvian"] = "lv", ["Latvian Sign Language"] = "lsl", ["Lau"] = "llu", ["Laua"] = "luf", ["Lauan"] = "llx", ["Lauje"] = "law", ["Laura"] = "lur", ["Laurentian"] = "lre", ["Lautu Chin"] = "clt", ["Lavatbura-Lamusong"] = "lbv", ["Lave"] = "brb", ["Laven"] = "lbo", ["Lavukaleve"] = "lvk", ["Lawangan"] = "lbx", ["Lawi"] = "lvi", ["Lawu"] = "lwu", ["Lawunuia"] = "tgi", ["Layakha"] = "lya", ["Laz"] = "lzz", ["Laze"] = "tbq-laz", ["Lealao Chinantec"] = "cle", ["Leco"] = "lec", ["Ledo Kaili"] = "lew", ["Leelau"] = "ldk", ["Lefa"] = "lfa", ["Lega-Mwenga"] = "lgm", ["Lega-Shabunda"] = "lea", ["Legbo"] = "agb", ["Legenyem"] = "lcc", ["Lehali"] = "tql", ["Lehalurup"] = "urr", ["Leinong Naga"] = "lzn", ["Leipon"] = "lek", ["Lela"] = "dri", ["Lelak"] = "llk", ["Lele (Chad)"] = "lln", ["Lele (Congo)"] = "lel", ["Lele (Guinea)"] = "llc", ["Lele (New Guinea)"] = "lle", ["Lelemi"] = "lef", ["Lelepa"] = "lpa", ["Lembena"] = "leq", ["Lemerig"] = "lrz", ["Lemio"] = "lei", ["Lemnian"] = "xle", ["Lemolang"] = "ley", ["Lemoro"] = "ldj", ["Lenakel"] = "tnl", ["Lendu"] = "led", ["Lengilu"] = "lgi", ["Lengo"] = "lgr", ["Lengola"] = "lej", ["Lenje"] = "leh", ["Lenkau"] = "ler", ["Lenyima"] = "ldg", ["Leonese"] = "roa-leo", ["Lepcha"] = "lep", ["Lepki"] = "lpe", ["Lepontic"] = "xlp", ["Lere"] = "gnh", ["Lese"] = "les", ["Lesing-Gelimi"] = "let", ["Letemboi"] = "nms", ["Leti (Cameroon)"] = "leo", ["Leti (Indonesia)"] = "lti", ["Levuka"] = "lvu", ["Lewo"] = "lww", ["Lewo Eleng"] = "lwe", ["Lewotobi"] = "lwt", ["Leyigha"] = "ayi", ["Lezgi"] = "lez", ["Lhao Vo"] = "mhx", ["Lhokpu"] = "lhp", ["Li'o"] = "ljl", ["Liabuku"] = "lix", ["Liana-Seti"] = "ste", ["Liangmai Naga"] = "njn", ["Liberia Kpelle"] = "xpe", ["Liberian English"] = "lir", ["Libido"] = "liq", ["Libinza"] = "liz", ["Libon Bikol"] = "lbl", ["Liburnian"] = "xli", ["Libyan Arabic"] = "ayl", ["Libyan Sign Language"] = "lbs", ["Ligbi"] = "lig", ["Ligenza"] = "lgz", ["Ligurian"] = "lij", ["Lihir"] = "lih", ["Lika"] = "lik", ["Liki"] = "lio", ["Likila"] = "lie", ["Likuba"] = "kxx", ["Likum"] = "lib", ["Likwala"] = "kwc", ["Lilau"] = "lll", ["Lillooet"] = "lil", ["Limassa"] = "bme", ["Limbu"] = "lif", ["Limbum"] = "lmp", ["Limburgish"] = "li", ["Limi"] = "ylm", ["Limilngan"] = "lmc", ["Limos Kalinga"] = "kmk", ["Lindu"] = "klw", ["Linear A"] = "lab", ["Lingala"] = "ln", ["Lingao"] = "onb", ["Lingkhim"] = "lii", ["Lingua Franca Nova"] = "lfn", ["Linngithigh"] = "lnj", ["Lipan"] = "apl", ["Lipo"] = "lpo", ["Lisabata-Nuniali"] = "lcs", ["Lisela"] = "lcl", ["Lish"] = "lsh", ["Lishana Deni"] = "lsd", ["Lishanid Noshan"] = "aij", ["Lishán Didán"] = "trg", ["Lisu"] = "lis", ["Literary Chinese"] = "lzh", ["Lithuanian"] = "lt", ["Lithuanian Sign Language"] = "lls", ["Little Swanport"] = "aus-lsw", ["Litzlitz"] = "lzl", ["Livonian"] = "liv", ["Livvi"] = "olo", ["Lizu"] = "sit-liz", ["Lo-Toga"] = "lht", ["Loarki"] = "lrk", ["Lobala"] = "loq", ["Lobi"] = "lob", ["Lodhi"] = "lbm", ["Logba"] = "lgq", ["Logo"] = "log", ["Logol"] = "lof", ["Logooli"] = "rag", ["Logorik"] = "liu", ["Lojban"] = "jbo", ["Lokaa"] = "yaz", ["Loko"] = "lok", ["Lokoya"] = "lky", ["Lola"] = "lcd", ["Lolak"] = "llq", ["Lole"] = "llg", ["Lolo"] = "llb", ["Loloda"] = "loa", ["Lolopo"] = "ycl", ["Lomaiviti"] = "lmv", ["Lomakka"] = "loi", ["Lomavren"] = "rmi", ["Lombard"] = "lmo", ["Lombi"] = "lmi", ["Lombo"] = "loo", ["Lomwe"] = "ngl", ["Loncong"] = "lce", ["Long Phuri Naga"] = "lpn", ["Long Wat"] = "ttw", ["Longgu"] = "lgu", ["Longto"] = "wok", ["Longuda"] = "lnu", ["Loniu"] = "los", ["Lonwolwol"] = "crc", ["Loo"] = "ldo", ["Looma"] = "lom", ["Lopa"] = "lop", ["Lopi"] = "lov", ["Lopit"] = "lpx", ["Lorang"] = "lrn", ["Lorediakarkar"] = "lnn", ["Lorrain"] = "roa-lor", ["Lote"] = "uvl", ["Lotha Naga"] = "njh", ["Lotud"] = "dtr", ["Lotuko"] = "lot", ["Lou"] = "loj", ["Louisiana Creole"] = "lou", ["Loun"] = "lox", ["Loup A"] = "xlo", ["Loup B"] = "xlb", ["Lovono"] = "vnk", ["Low German"] = "nds", ["Lower Burdekin"] = "xbb", ["Lower Chehalis"] = "cea", ["Lower Grand Valley Dani"] = "dni", ["Lower Nossob"] = "nsb", ["Lower Sorbian"] = "dsb", ["Lower Southern Aranda"] = "axl", ["Lower Ta'oih"] = "tto", ["Lower Tanana"] = "taa", ["Lowland Oaxaca Chontal"] = "clo", ["Lowland Tarahumara"] = "tac", ["Loxicha Zapotec"] = "ztp", ["Lozi"] = "loz", ["Luang"] = "lex", ["Luba-Kasai"] = "lua", ["Luba-Katanga"] = "lu", ["Lubila"] = "kcc", ["Lubu"] = "lcf", ["Lubuagan Kalinga"] = "knb", ["Luchazi"] = "lch", ["Lucumí"] = "luq", ["Ludian"] = "lud", ["Lufu"] = "ldq", ["Luganda"] = "lg", ["Lugbara"] = "lgg", ["Luguru"] = "ruf", ["Luhu"] = "lcq", ["Luhya"] = "luy", ["Luimbi"] = "lum", ["Luiseño"] = "lui", ["Lukpa"] = "dop", ["Lule"] = "ule", ["Lule Sami"] = "smj", ["Lumba-Yakkha"] = "luu", ["Lumbee"] = "lmz", ["Lumbu"] = "lup", ["Lumun"] = "lmd", ["Lun Bawang"] = "lnd", ["Luna"] = "luj", ["Lunanakha"] = "luk", ["Lunda"] = "lun", ["Lungga"] = "lga", ["Luo"] = "luo", ["Luopohe Hmong"] = "hml", ["Luri (Nigeria)"] = "ldd", ["Lusengo"] = "lse", ["Lushootseed"] = "lut", ["Lusi"] = "khl", ["Lusitanian"] = "xls", ["Lutachoni"] = "lts", ["Lutos"] = "ndy", ["Luvale"] = "lue", ["Luwati"] = "luv", ["Luwian"] = "xlu", ["Luwo"] = "lwo", ["Luxembourgish"] = "lb", ["Luyana"] = "lyn", ["Lwalu"] = "lwa", ["Lwel"] = "bnt-lwl", ["Lycian"] = "xlc", ["Lydian"] = "xld", ["Lyngngam"] = "lyg", ["Lyélé"] = "lee", ["Láadan"] = "ldn", ["Láá Láá Bwamu"] = "bwj", ["Lü"] = "khb", ["Ma"] = "msj", ["Ma Manda"] = "skc", ["Ma'anyan"] = "mhy", ["Ma'di"] = "mhi", ["Ma'ya"] = "slz", ["Maa"] = "cma", ["Maaka"] = "mew", ["Maale"] = "mdy", ["Maasai"] = "mas", ["Maay"] = "ymm", ["Maba"] = "mqa", ["Mabaale"] = "mmz", ["Mabaan"] = "mfz", ["Mabaka Valley Kalinga"] = "kkg", ["Mabire"] = "muj", ["Maca"] = "mca", ["Macaguaje"] = "mcl", ["Macaguán"] = "mbn", ["Macanese"] = "mzs", ["Macau Pidgin Portuguese"] = "crp-mpp", ["Macedonian"] = "mk", ["Machame"] = "jmc", ["Machiguenga"] = "mcb", ["Machinere"] = "mpd", ["Machinga"] = "mvw", ["Macoris"] = "nai-mac", ["Macuna"] = "myy", ["Macushi"] = "mbc", ["Mada (Cameroon)"] = "mxu", ["Mada (Nigeria)"] = "mda", ["Madagascar Sign Language"] = "mzc", ["Madak"] = "mmx", ["Maden"] = "xmx", ["Madhi Madhi"] = "dmd", ["Madi"] = "grg", ["Madngele"] = "zml", ["Madukayang Kalinga"] = "kmd", ["Madurese"] = "mad", ["Mae"] = "mme", ["Maek"] = "hmk", ["Maeng Itneg"] = "itt", ["Mafa"] = "maf", ["Mafea"] = "mkv", ["Mag-Anchi Ayta"] = "sgb", ["Mag-Indi Ayta"] = "blx", ["Magadhi Prakrit"] = "inc-mgd", ["Magahat"] = "mtw", ["Magahi"] = "mag", ["Magdalena Peñasco Mixtec"] = "xtm", ["Magiyi"] = "gmg", ["Magoma"] = "gmx", ["Magori"] = "zgr", ["Maguindanao"] = "mdh", ["Magɨ"] = "gkd", ["Mahali"] = "mjx", ["Maharastri Prakrit"] = "pmh", ["Mahasu Pahari"] = "bfz", ["Mahican"] = "mjy", ["Mahongwe"] = "mhb", ["Mahou"] = "mxx", ["Maia"] = "sks", ["Maiadomu"] = "mzz", ["Maiani"] = "tnh", ["Maii"] = "mmm", ["Mailu"] = "mgu", ["Maindo"] = "cwb", ["Mairasi"] = "zrs", ["Maisin"] = "mbq", ["मैथिली"] = "mai", ["Maiwa (Indonesia)"] = "wmm", ["Maiwa (New Guinea)"] = "mti", ["Maiwala"] = "mum", ["Majang"] = "mpe", ["Majera"] = "xmj", ["Majhi"] = "mjz", ["Majhwar"] = "mmj", ["Mak (China)"] = "mkg", ["Mak (Nigeria)"] = "pbl", ["Makaa"] = "mcp", ["Makah"] = "myh", ["Makalero"] = "mjb", ["Makasae"] = "mkz", ["Makasar"] = "mak", ["Makassar Malay"] = "mfp", ["Makayam"] = "aup", ["Makhuwa"] = "vmw", ["Makhuwa-Marrevone"] = "xmc", ["Makhuwa-Meetto"] = "mgh", ["Makhuwa-Moniga"] = "mhm", ["Makhuwa-Saka"] = "xsq", ["Makhuwa-Shirima"] = "vmk", ["Maklew"] = "mgf", ["Makolkol"] = "zmh", ["Makonde"] = "kde", ["Maku"] = "xak", ["Maku'a"] = "lva", ["Makuri Naga"] = "jmn", ["Makuráp"] = "mpu", ["Makwe"] = "ymk", ["Makyan Naga"] = "umn", ["Mal"] = "mlf", ["Mal Paharia"] = "mkb", ["Mala (New Guinea)"] = "ped", ["Mala (Nigeria)"] = "ruy", ["Mala Malasar"] = "ima", ["Malaccan Creole Malay"] = "ccm", ["Malagasy"] = "mg", ["Malalamai"] = "mmt", ["Malalí"] = "sai-mal", ["Malango"] = "mln", ["Malankuravan"] = "mjo", ["Malapandaram"] = "mjp", ["Malaryan"] = "mjq", ["Malas"] = "mkr", ["Malasanga"] = "mqz", ["Malasar"] = "ymr", ["Malavedan"] = "mjr", ["Malawi Lomwe"] = "lon", ["Malawian Sign Language"] = "lws", ["Malay"] = "ms", ["Malayalam"] = "ml", ["Malayic Dayak"] = "xdy", ["Malaynon"] = "mlz", ["Malaysian Sign Language"] = "xml", ["Malba Birifor"] = "bfo", ["Male"] = "mdc", ["Malecite-Passamaquoddy"] = "pqm", ["Maleng"] = "pkt", ["Maleu-Kilenge"] = "mgl", ["Malfaxal"] = "mlx", ["Malgana"] = "vml", ["Malgbe"] = "mxf", ["Mali"] = "gcc", ["Malibu"] = "sai-mlb", ["Malila"] = "mgq", ["Malimba"] = "mzd", ["Malimpung"] = "mli", ["Malinaltepec Tlapanec"] = "tcf", ["Malol"] = "mbk", ["Maltese"] = "mt", ["Maltese Sign Language"] = "mdl", ["Malua Bay"] = "mll", ["Malvi"] = "mup", ["Maléku Jaíka"] = "gut", ["Mam"] = "mam", ["Mama"] = "mma", ["Mamaa"] = "mhf", ["Mamaindé"] = "wmd", ["Mamanwa"] = "mmn", ["Mamara Senoufo"] = "myk", ["Mamasa"] = "mqj", ["Mambae"] = "mgm", ["Mambai"] = "mcs", ["Mamboru"] = "mvd", ["Mambwe-Lungu"] = "mgr", ["Mampruli"] = "maw", ["Mamuju"] = "mqx", ["Mamulique"] = "emm", ["Mamusi"] = "kdf", ["Mamvu"] = "mdi", ["Man Met"] = "mml", ["Manado Malay"] = "xmm", ["Manam"] = "mva", ["Manambu"] = "mle", ["Manangba"] = "nmm", ["Manangkari"] = "znk", ["Manao"] = "awd-man", ["Manchu"] = "mnc", ["Manda (Australia)"] = "zma", ["Manda (India)"] = "mha", ["Manda (Tanzania)"] = "mgs", ["Mandahuaca"] = "mht", ["Mandaic"] = "mid", ["Mandailing Batak"] = "btm", ["Mandalorian"] = "art-man", ["Mandan"] = "mhq", ["Mandandanyi"] = "zmk", ["Mandar"] = "mdr", ["Mandara"] = "tbf", ["Mandari"] = "mqu", ["Mandarin"] = "cmn", ["Mandeali"] = "mjl", ["Mander"] = "mqr", ["Mandingo"] = "man", ["Mandinka"] = "mnk", ["Mandjak"] = "mfv", ["Mandobo Atas"] = "aax", ["Mandobo Bawah"] = "bwp", ["Manem"] = "jet", ["Mang"] = "zng", ["Mangala"] = "mem", ["Mangarayi"] = "mpc", ["Mangarevan"] = "mrv", ["Mangas"] = "zns", ["Mangayat"] = "myj", ["Mangbetu"] = "mdj", ["Mangbutu"] = "mdk", ["Mangerr"] = "zme", ["Mangga Buang"] = "mmo", ["Manggarai"] = "mqy", ["Mangghuer"] = "xgn-mgr", ["Mango"] = "mge", ["Mangole"] = "mqc", ["Mangseng"] = "mbh", ["Manigri-Kambolé Ede Nago"] = "xkb", ["Manikion"] = "mnx", ["Manipa"] = "mqp", ["Manipuri"] = "mni", ["Mankanya"] = "knf", ["Mankiyali"] = "nlm", ["Manna-Dora"] = "mju", ["Mannan"] = "mjv", ["Mano"] = "mev", ["Manombai"] = "woo", ["Mansaka"] = "msk", ["Mansi"] = "mns", ["Mansoanka"] = "msw", ["Manta"] = "myg", ["Mantsi"] = "nty", ["Manumanaw Karen"] = "kxf", ["Manusela"] = "wha", ["Manx"] = "gv", ["Manya"] = "mzj", ["Manyawa"] = "mny", ["Manza"] = "mzv", ["Mao Naga"] = "nbi", ["Maonan"] = "mmd", ["Maore Comorian"] = "swb", ["Maori"] = "mi", ["Mape"] = "mlh", ["Mapena"] = "mnm", ["Mapia"] = "mpy", ["Mapidian"] = "mpw", ["Mapos Buang"] = "bzh", ["Mapoyo"] = "mcg", ["Mapudungun"] = "arn", ["Mapun"] = "sjm", ["Maquiritari"] = "mch", ["Mara"] = "mec", ["Mara Chin"] = "mrh", ["Marachi"] = "lri", ["Maraghei"] = "vmh", ["Maragus"] = "mrs", ["Maram Naga"] = "nma", ["Marama"] = "lrm", ["Maranao"] = "mrw", ["Maranungku"] = "zmr", ["Mararit"] = "mgb", ["Marathi"] = "mr", ["Maratino"] = "sai-mar", ["Marau"] = "mvr", ["Marawan"] = "awd-mar", ["Marba"] = "mpg", ["Marenje"] = "vmr", ["Marfa"] = "mvu", ["Margany"] = "zmc", ["Marghi South"] = "mfm", ["Margi"] = "mrt", ["Margu"] = "mhg", ["Maria"] = "mds", ["Mariaté"] = "awd-mrt", ["Maricopa"] = "mrc", ["Maridan"] = "zmd", ["Maridjabin"] = "zmj", ["Marik"] = "dad", ["Marimanindji"] = "zmm", ["Marind"] = "mrz", ["Maring"] = "mbw", ["Maring Naga"] = "nng", ["Maringarr"] = "zmt", ["Marino"] = "mrb", ["Mariri"] = "mqi", ["Maritime Sign Language"] = "nsr", ["Maritsauá"] = "msp", ["Mariupol Greek"] = "grk-mar", ["Mariyedi"] = "zmy", ["Marka"] = "rkm", ["Markweeta"] = "enb", ["Marma"] = "rmz", ["Maroon Spirit Language"] = "cpe-mar", ["Marovo"] = "mvo", ["Marriammu"] = "xru", ["Marrithiyel"] = "mfr", ["Marrucinian"] = "umc", ["Marshallese"] = "mh", ["Marsian"] = "ims", ["Martha's Vineyard Sign Language"] = "mre", ["Marti Ke"] = "zmg", ["Martu Wangka"] = "mpj", ["Martuthunira"] = "vma", ["Marwari"] = "mwr", ["Marúbo"] = "mzr", ["Masaba"] = "myx", ["Masadiit Itneg"] = "tis", ["Masakará"] = "sai-msk", ["Masalit"] = "mls", ["Masana"] = "mcn", ["Masbate Sorsogon"] = "bks", ["Masbatenyo"] = "msb", ["Mashco Piro"] = "cuj", ["Mashi"] = "mho", ["Masimasi"] = "ism", ["Masiwang"] = "bnf", ["Maskelynes"] = "klv", ["Maslam"] = "msv", ["Masmaje"] = "mes", ["Massachusett"] = "wam", ["Massalat"] = "mdg", ["Massep"] = "mvs", ["Matagalpa"] = "mtn", ["Matal"] = "mfh", ["Matanawi"] = "sai-mat", ["Matbat"] = "xmt", ["Matengo"] = "mgv", ["Matepi"] = "mqe", ["Matigsalug Manobo"] = "mbt", ["Matipuhy"] = "mzo", ["Matlatzinca"] = "mat", ["Mato"] = "met", ["Mato Grosso Arára"] = "axg", ["Mator"] = "mtm", ["Matsés"] = "mcf", ["Mattole"] = "mvb", ["Matukar"] = "mjk", ["Matumbi"] = "mgw", ["Matya Samo"] = "stj", ["Matís"] = "mpq", ["Maung"] = "mph", ["Mauritian Creole"] = "mfe", ["Mauritian Sign Language"] = "lsy", ["Mauwake"] = "mhl", ["Mawa"] = "mcw", ["Mawak"] = "mjj", ["Mawan"] = "mcz", ["Mawayana"] = "mzx", ["Mawchi"] = "mke", ["Mawes"] = "mgk", ["Maxakalí"] = "mbl", ["Maxi Gbe"] = "mxl", ["Maya Samo"] = "sym", ["Mayaguduna"] = "xmy", ["Mayangna"] = "yan", ["Mayawali"] = "yxa", ["Maybrat"] = "ayz", ["Mayeka"] = "myc", ["Mayi-Thakurti"] = "xyt", ["Maykulan"] = "mnt", ["Maynas"] = "sai-mys", ["Mayo"] = "mfy", ["Mayogo"] = "mdm", ["Mayoyao Ifugao"] = "ifu", ["Maypure"] = "awd-mpr", ["Mazagway"] = "dkx", ["Mazaltepec Zapotec"] = "zpy", ["Mazanderani"] = "mzn", ["Mazatlán Mazatec"] = "vmz", ["Mazatlán Mixe"] = "mzl", ["Mba"] = "mfc", ["Mbabaram"] = "vmb", ["Mbala"] = "mdp", ["Mbalanhu"] = "lnb", ["Mbandja"] = "zmz", ["Mbangala"] = "mxg", ["Mbangi"] = "mgn", ["Mbangwe"] = "zmn", ["Mbara (Australia)"] = "mvl", ["Mbara (Chad)"] = "mpk", ["Mbariman-Gudhinma"] = "zmv", ["Mbati"] = "mdn", ["Mbato"] = "gwa", ["Mbay"] = "myb", ["Mbe"] = "mfo", ["Mbe'"] = "mtk", ["Mbelime"] = "mql", ["Mbere"] = "mdt", ["Mbesa"] = "zms", ["Mbiywom"] = "aus-mbi", ["Mbo (Cameroon)"] = "mbo", ["Mbo (Congo)"] = "zmw", ["Mboi"] = "moi", ["Mboko"] = "mdu", ["Mbole"] = "mdq", ["Mbonga"] = "xmb", ["Mbongno"] = "bgu", ["Mbosi"] = "mdw", ["Mbowe"] = "mxo", ["Mbre"] = "mka", ["Mbu'"] = "muc", ["Mbudum"] = "xmd", ["Mbugu"] = "mhd", ["Mbugwe"] = "mgz", ["Mbuko"] = "mqb", ["Mbukushu"] = "mhw", ["Mbula"] = "mna", ["Mbula-Bwazza"] = "mbu", ["Mbule"] = "mlb", ["Mbulungish"] = "mbv", ["Mbum"] = "mdd", ["Mbunda"] = "mck", ["Mbunga"] = "mgy", ["Mburku"] = "bbt", ["Mbuun"] = "zmp", ["Mbwela"] = "mfu", ["Mbyá Guaraní"] = "gun", ["Me'en"] = "mym", ["Mea"] = "meg", ["Mebu"] = "mjn", ["Mecayapan Nahuatl"] = "nhx", ["Medebur"] = "mjm", ["Medefaidrin"] = "dmf", ["Media Lengua"] = "mue", ["Mednyj Aleut"] = "mud", ["Medumba"] = "byv", ["Mefele"] = "mfj", ["Megam"] = "mef", ["Megleno-Romanian"] = "ruq", ["Mehek"] = "nux", ["Mehináku"] = "mmh", ["Mehri"] = "gdq", ["Mekeo"] = "mek", ["Mekmek"] = "mvk", ["Mekwei"] = "msf", ["Mel-Khaonh"] = "hkn", ["Mele-Fila"] = "mxe", ["Melo"] = "mfx", ["Melpa"] = "med", ["Memoni"] = "mby", ["Mendalam Kayan"] = "xkd", ["Mendankwe-Nkwen"] = "mfd", ["Mende"] = "men", ["Mengaka"] = "xmg", ["Mengen"] = "mee", ["Menien"] = "sai-men", ["Menka"] = "mea", ["Menominee"] = "mez", ["Mentawai"] = "mwv", ["Menya"] = "mcr", ["Meoswar"] = "mvx", ["Mer"] = "mnu", ["Meramera"] = "mxm", ["Merei"] = "lmb", ["Merey"] = "meq", ["Meriam"] = "ulk", ["Merlav"] = "mrm", ["Meroitic"] = "xmr", ["Meru"] = "mer", ["Mesaka"] = "iyo", ["Mese"] = "mci", ["Mesme"] = "zim", ["Mesmes"] = "mys", ["Mesqan"] = "mvz", ["Messapic"] = "cms", ["Meta'"] = "mgo", ["Metlatónoc Mixtec"] = "mxv", ["Mewari"] = "mtr", ["Mewati"] = "wtm", ["Mexican Sign Language"] = "mfs", ["Meyah"] = "mej", ["Mezontla Popoloca"] = "pbe", ["Mezquital Otomi"] = "ote", ["Meänkieli"] = "fit", ["Mfinu"] = "zmf", ["Mfumte"] = "nfu", ["Mgbo"] = "gmz", ["Mi'kmaq"] = "mic", ["Miami"] = "mia", ["Mian"] = "mpt", ["Miani"] = "pla", ["Michif"] = "crg", ["Michigamea"] = "cmm", ["Michoacán Mazahua"] = "mmc", ["Michoacán Nahuatl"] = "ncl", ["Mid Grand Valley Dani"] = "dnt", ["Mid-Southern Banda"] = "bjo", ["Middle Armenian"] = "axm", ["मध्य असमिया"] = "inc-mas", ["Middle Bengali"] = "inc-mbn", ["Middle Breton"] = "xbm", ["Middle Chinese"] = "ltc", ["Middle Cornish"] = "cnx", ["Middle Dutch"] = "dum", ["Middle English"] = "enm", ["Middle French"] = "frm", ["Middle Gujarati"] = "inc-mgu", ["Middle High German"] = "gmh", ["Middle Irish"] = "mga", ["Middle Kannada"] = "dra-mkn", ["Middle Khmer"] = "xhm", ["Middle Korean"] = "okm", ["Middle Low German"] = "gml", ["Middle Median"] = "xme-mid", ["Middle Mon"] = "mkh-mmn", ["Middle Mongol"] = "xng", ["Middle Newar"] = "nwx", ["Middle Norwegian"] = "gmq-mno", ["Middle Oriya"] = "inc-mor", ["Middle Persian"] = "pal", ["Middle Vietnamese"] = "mkh-mvi", ["Middle Watut"] = "mpl", ["Middle Welsh"] = "wlm", ["Midob"] = "mei", ["Migaama"] = "mmy", ["Migabac"] = "mpp", ["Miji"] = "sjl", ["Miju"] = "mxj", ["Mikasuki"] = "mik", ["Milang"] = "und-mil", ["Mili"] = "ymh", ["Millcayac"] = "sai-mil", ["Miltu"] = "mlj", ["Miluk"] = "iml", ["Milyan"] = "imy", ["Mimi of Decorse"] = "und-mmd", ["Mimi of Nachtigal"] = "und-mmn", ["Min Bei"] = "mnp", ["Min Dong"] = "cdo", ["Min Nan"] = "nan", ["Min Zhong"] = "czo", ["Mina"] = "hna", ["Minaean"] = "inm", ["Minang"] = "xrg", ["Minangkabau"] = "min", ["Minanibai"] = "mcv", ["Minaveha"] = "mvn", ["Minderico"] = "drc", ["Mindiri"] = "mpn", ["Mingang Doso"] = "mko", ["Mingo"] = "iro-min", ["Mingrelian"] = "xmf", ["Minica Huitoto"] = "hto", ["Minidien"] = "wii", ["Minigir"] = "vmg", ["Minjungbal"] = "xjb", ["Minkin"] = "xxm", ["Minoan"] = "omn", ["Minokok"] = "mqq", ["Minriq"] = "mnq", ["Mintil"] = "mzt", ["Miqie"] = "yiq", ["Mirandese"] = "mwl", ["Miraya Bikol"] = "rbl", ["Mire"] = "mvh", ["Mirgan"] = "zrg", ["Miriti"] = "mmv", ["Miriwoong Sign Language"] = "rsm", ["Miriwung"] = "mep", ["Mirpur Panjabi"] = "pmu", ["Misantla Totonac"] = "tlc", ["Miship"] = "mjs", ["Misima-Paneati"] = "mpx", ["Mising"] = "mrg", ["Miskito"] = "miq", ["Mitla Zapotec"] = "zaw", ["Mitlatongo Mixtec"] = "vmm", ["Mittu"] = "mwu", ["Mituku"] = "zmq", ["Miu"] = "mpo", ["Miwa"] = "vmi", ["Mixed Great Andamanese"] = "gac", ["Mixifore"] = "mfg", ["Mixtepec Mixtec"] = "mix", ["Mixtepec Zapotec"] = "zpm", ["Miya"] = "mkf", ["Miyako"] = "mvi", ["Miyobe"] = "soy", ["Mizo"] = "lus", ["Mlabri"] = "mra", ["Mlahsö"] = "lhs", ["Mlap"] = "kja", ["Mlomp"] = "mlo", ["Mmaala"] = "mmu", ["Mmani"] = "buy", ["Mmen"] = "bfm", ["Mo"] = "wkd", ["Mo'da"] = "gbn", ["Moabite"] = "obm", ["Moba"] = "mfq", ["Mobilian"] = "mod", ["Mobumrin Aizi"] = "ahm", ["Mocana"] = "sai-mcn", ["Mochi"] = "old", ["Mochica"] = "omc", ["Mocho"] = "mhc", ["Mocoví"] = "moc", ["Modang"] = "mxd", ["Modole"] = "mqo", ["Moere"] = "mvq", ["Mofu-Gudur"] = "mif", ["Mogholi"] = "mhj", ["Mogum"] = "mou", ["Mohawk"] = "moh", ["Mohegan-Pequot"] = "xpq", ["Moi (Congo)"] = "mow", ["Moi (Indonesia)"] = "mxn", ["Moikodi"] = "mkp", ["Moingi"] = "mwz", ["Mojave"] = "mov", ["Moji"] = "ymi", ["Mok"] = "mqt", ["Moken"] = "mwt", ["Mokerang"] = "mft", ["Mokilese"] = "mkj", ["Moklen"] = "mkm", ["Mokole"] = "mkl", ["Mokpwe"] = "bri", ["Moksha"] = "mdf", ["Molale"] = "mbe", ["Molbog"] = "pwm", ["Moldova Sign Language"] = "vsi", ["Molengue"] = "bxc", ["Molima"] = "mox", ["Molmo One"] = "aun", ["Molo"] = "zmo", ["Molof"] = "msl", ["Moloko"] = "mlw", ["Mom Jango"] = "ver", ["Moma"] = "myl", ["Momare"] = "msz", ["Mombo Dogon"] = "dmb", ["Mombum"] = "mso", ["Momina"] = "mmb", ["Momuna"] = "mqf", ["Mon"] = "mnw", ["Monastic Sign Language"] = "mzg", ["Mondropolon"] = "npn", ["Mondé"] = "mnd", ["Mongghul"] = "xgn-mgl", ["Mongo"] = "lol", ["Mongol"] = "mgt", ["Mongolian"] = "mn", ["Mongolian Sign Language"] = "msr", ["Mongondow"] = "mog", ["Moni"] = "mnz", ["Monimbo"] = "mom", ["Mono (California)"] = "mnr", ["Mono (Cameroon)"] = "mru", ["Mono (Congo)"] = "mnh", ["Monom"] = "moo", ["Monsang Naga"] = "nmh", ["Montagnais"] = "moe", ["Montana Salish"] = "fla", ["Montol"] = "mtl", ["Monumbo"] = "mxk", ["Monzombo"] = "moj", ["Moo"] = "gwg", ["Moore"] = "mos", ["Moose Cree"] = "crm", ["Mopan Maya"] = "mop", ["Mor (Austronesian)"] = "mhz", ["Mor (Papuan)"] = "moq", ["Moraid"] = "msg", ["Moran"] = "sit-mor", ["Morawa"] = "mze", ["Morelos Nahuatl"] = "nhm", ["Morerebi"] = "xmo", ["Moresada"] = "msx", ["Mori Atas"] = "mzq", ["Mori Bawah"] = "xmz", ["Morigi"] = "mdb", ["Moro"] = "mor", ["Moroccan Amazigh"] = "zgh", ["Moroccan Arabic"] = "ary", ["Moroccan Sign Language"] = "xms", ["Morokodo"] = "mgc", ["Morom"] = "bdo", ["Moronene"] = "mqn", ["Morori"] = "mok", ["Morouas"] = "mrp", ["Mortlockese"] = "mrl", ["Moru"] = "mgd", ["Mosimo"] = "mqv", ["Moskona"] = "mtj", ["Mota"] = "mtt", ["Motembo"] = "tmv", ["Motu"] = "meu", ["Mouk-Aria"] = "mwh", ["Mount Iraya Agta"] = "atl", ["Mount Iriga Agta"] = "agz", ["Mountain Koiari"] = "kpx", ["Mouwase"] = "jmw", ["Movima"] = "mzp", ["Moyadan Itneg"] = "ity", ["Moyon Naga"] = "nmo", ["Mozambican Sign Language"] = "mzy", ["Mozarabic"] = "mxi", ["Mpade"] = "mpi", ["Mpalitjanh"] = "xpj", ["Mpi"] = "mpz", ["Mpiemo"] = "mcx", ["Mpiin"] = "bnt-mpi", ["Mpinda"] = "pnd", ["Mpongmpong"] = "mgg", ["Mpoto"] = "mpa", ["Mpotovoro"] = "mvt", ["Mpuono"] = "bnt-mpu", ["Mpur"] = "akc", ["Mro Chin"] = "cmr", ["Mru"] = "mro", ["Mser"] = "kqx", ["Muak Sa-aak"] = "ukk", ["Mualang"] = "mtd", ["Mubami"] = "tsx", ["Mubi"] = "mub", ["Mucuchí"] = "sai-muc", ["Muda"] = "ymd", ["Mudburra"] = "dmw", ["Mudu Koraga"] = "vmd", ["Muduapa"] = "wiv", ["Muduga"] = "udg", ["Muellama"] = "sai-mue", ["Mufian"] = "aoj", ["Muher"] = "sem-mhr", ["Muinane"] = "bmr", ["Mukha-Dora"] = "mmk", ["Mukulu"] = "moz", ["Mulaha"] = "mfw", ["Mulam"] = "mlm", ["Mulao"] = "giu", ["Mullu Kurumba"] = "kpb", ["Mullukmulluk"] = "mpb", ["Muluridyi"] = "vmu", ["Mum"] = "kqa", ["Mumuye"] = "mzm", ["Muna"] = "mnb", ["Munda"] = "unx", ["Mundabli"] = "boe", ["Mundang"] = "mua", ["Mundani"] = "mnf", ["Mundari"] = "unr", ["Mundat"] = "mmf", ["Mundolinco"] = "art-mun", ["Mundurukú"] = "myu", ["Mungaka"] = "mhk", ["Mungbam"] = "mij", ["Munggui"] = "mth", ["Mungkip"] = "mpv", ["Muniche"] = "myr", ["Munit"] = "mtc", ["Munji"] = "mnj", ["Munsee"] = "umu", ["Muong"] = "mtq", ["Mur Pano"] = "tkv", ["Muratayak"] = "asx", ["Murik (Malaysia)"] = "mxr", ["Murik (New Guinea)"] = "mtf", ["Murkim"] = "rmh", ["Murle"] = "mur", ["Murrinh-Patha"] = "mwf", ["Mursi"] = "muz", ["Murui Huitoto"] = "huu", ["Murupi"] = "mqw", ["Muruwari"] = "zmu", ["Musan"] = "mmp", ["Musar"] = "mmi", ["Musasa"] = "smm", ["Musey"] = "mse", ["Musgu"] = "mug", ["Musi"] = "mui", ["Muskum"] = "mje", ["Musom"] = "msu", ["Mussau-Emira"] = "emi", ["Muthuvan"] = "muv", ["Mutu"] = "tuc", ["Muya"] = "mvm", ["Muyang"] = "muy", ["Muyuw"] = "myw", ["Muzi"] = "ymz", ["Muzo"] = "sai-muz", ["Mvanip"] = "mcj", ["Mvuba"] = "mxh", ["Mwaghavul"] = "sur", ["Mwali Comorian"] = "wlc", ["Mwan"] = "moa", ["Mwani"] = "wmw", ["Mwatebu"] = "mwa", ["Mwera"] = "mwe", ["Mwimbi-Muthambi"] = "mws", ["Mwotlap"] = "mlv", ["Mycenaean Greek"] = "gmy", ["Myene"] = "mye", ["Mysian"] = "yms", ["Mzieme Naga"] = "nme", ["Mághdì"] = "gmd", ["Mòcheno"] = "mhn", ["Mün Chin"] = "mwq", ["Mündü"] = "muh", ["N'Ko"] = "nqo", ["Na"] = "nbt", ["Na'vi"] = "art-nav", ["Naaba"] = "nao", ["Naba"] = "mne", ["Nabak"] = "naf", ["Nabi"] = "mty", ["Nachering"] = "ncd", ["Nadruvian"] = "ndf", ["Nadëb"] = "mbj", ["Nafaanra"] = "nfr", ["Nafi"] = "srf", ["Nafri"] = "nxx", ["Naga Pidgin"] = "nag", ["Nagarchal"] = "nbg", ["Nage"] = "nxe", ["Nagtipunan Agta"] = "phi-nag", ["Nagu"] = "ngr", ["Nagumi"] = "ngv", ["Nahali"] = "nlx", ["Nahari"] = "nhh", ["Nahavaq"] = "sns", ["Nahuatl"] = "nah", ["Nai"] = "bio", ["Najdi Arabic"] = "ars", ["Naka'ela"] = "nae", ["Nakai"] = "nkj", ["Nakame"] = "nib", ["Nakanai"] = "nak", ["Nakara"] = "nck", ["Nake"] = "nbk", ["Naki"] = "mff", ["Nakwi"] = "nax", ["Nalca"] = "nlc", ["Nali"] = "nss", ["Nalik"] = "nal", ["Nalu"] = "naj", ["Naluo Yi"] = "ylo", ["Nalögo"] = "nlz", ["Namakura"] = "nmk", ["Namat"] = "nkm", ["Nambikwara"] = "nab", ["Nambo"] = "ncm", ["Nambya"] = "nmq", ["Namia"] = "nnm", ["Namiae"] = "nvm", ["Namibian Sign Language"] = "nbs", ["Namla"] = "naa", ["Namo"] = "mxw", ["Namonuito"] = "nmt", ["Namosi-Naitasiri-Serua"] = "bwb", ["Namuyi"] = "nmy", ["Nanai"] = "gld", ["Nancere"] = "nnc", ["Nande"] = "nnb", ["Nandi"] = "niq", ["Nanerigé Sénoufo"] = "sen", ["Nanga Dama Dogon"] = "nzz", ["Nankina"] = "nnk", ["Nanti"] = "cox", ["Nanticoke"] = "nnt", ["Nanubae"] = "afk", ["Naolan"] = "nai-nao", ["Napu"] = "npy", ["Nar Phu"] = "npa", ["Nara"] = "nrb", ["Narak"] = "nac", ["Narango"] = "nrg", ["Narau"] = "nxu", ["Narim"] = "loh", ["Naro"] = "nhr", ["Narom"] = "nrm", ["Narragansett"] = "xnt", ["Narua"] = "nru", ["Narungga"] = "nnr", ["Nasal"] = "nsy", ["Nasarian"] = "nvh", ["Nasioi"] = "nas", ["Naskapi"] = "nsk", ["Nasu"] = "ywq", ["Natagaimas"] = "nts", ["Natchez"] = "ncz", ["Nateni"] = "ntm", ["Nathembo"] = "nte", ["Natioro"] = "nti", ["Natú"] = "sai-nat", ["Natügu"] = "ntu", ["Nauete"] = "nxa", ["Naukanski"] = "ynk", ["Nauna"] = "ncn", ["Nauo"] = "nwo", ["Nauruan"] = "na", ["Navajo"] = "nv", ["Navarro-Aragonese"] = "roa-oan", ["Navut"] = "nsw", ["Nawaru"] = "nwr", ["Nawathinehena"] = "nwa", ["Nawdm"] = "nmz", ["Nawuri"] = "naw", ["Naxi"] = "nxq", ["Nayi"] = "noz", ["Ncane"] = "ncr", ["Nchumbulu"] = "nlu", ["Nda'nda'"] = "nnz", ["Ndai"] = "gke", ["Ndaka"] = "ndk", ["Ndali"] = "ndh", ["Ndam"] = "ndm", ["Ndamba"] = "ndj", ["Ndambomo"] = "nxo", ["Ndasa"] = "nda", ["Ndau"] = "ndc", ["Nde-Gbite"] = "ned", ["Nde-Nsele-Nta"] = "ndd", ["Ndemli"] = "nml", ["Ndendeule"] = "dne", ["Ndengereko"] = "ndg", ["Nding"] = "eli", ["Ndjébbana"] = "djj", ["Ndo"] = "ndp", ["Ndobo"] = "ndw", ["Ndoe"] = "nbb", ["Ndogo"] = "ndz", ["Ndolo"] = "ndl", ["Ndom"] = "nqm", ["Ndombe"] = "ndq", ["Ndonga"] = "ng", ["Ndoola"] = "ndr", ["Ndrulo"] = "dno", ["Nduga"] = "ndx", ["Ndumu"] = "nmd", ["Ndunda"] = "nuh", ["Ndunga"] = "ndt", ["Ndut"] = "ndv", ["Ndyuka-Trio Pidgin"] = "njt", ["Ndzwani Comorian"] = "wni", ["Neapolitan"] = "nap", ["Nedebang"] = "nec", ["Nefamese"] = "nef", ["Nefusa"] = "jbn", ["Negerhollands"] = "dcr", ["Negeri Sembilan Malay"] = "zmi", ["Negidal"] = "neg", ["Nehan"] = "nsn", ["Nek"] = "nif", ["Nekgini"] = "nkg", ["Neko"] = "nej", ["Neku"] = "nek", ["Neme"] = "nex", ["Nemi"] = "nem", ["Nen"] = "nqn", ["Nend"] = "anh", ["Nengone"] = "nen", ["Neo"] = "neu", ["Nepalese Sign Language"] = "nsp", ["Nepali"] = "ne", ["Nepali Kurux"] = "kxl", ["Nete"] = "net", ["Neve'ei"] = "vnm", ["Neverver"] = "lgk", ["New Caledonian Javanese"] = "jas", ["New River Shasta"] = "nai-nrs", ["New Zealand Sign Language"] = "nzs", ["Newar"] = "new", ["Neyo"] = "ney", ["Nez Perce"] = "nez", ["Nga La"] = "hlt", ["Ngaanyatjarra"] = "ntj", ["Ngadha"] = "nxg", ["Ngadjunmaya"] = "nju", ["Ngadjuri"] = "jui", ["Ngaing"] = "nnf", ["Ngaju"] = "nij", ["Ngala"] = "nud", ["Ngalakan"] = "nig", ["Ngalkbun"] = "ngk", ["Ngalum"] = "szb", ["Ngam"] = "nmc", ["Ngamambo"] = "nbv", ["Ngambay"] = "sba", ["Ngamini"] = "nmv", ["Ngamo"] = "nbh", ["Ngan'gityemerri"] = "nam", ["Nganakarti"] = "xnk", ["Nganasan"] = "nio", ["Ngandi"] = "nid", ["Ngando (Central African Republic)"] = "ngd", ["Ngando (Congo)"] = "nxd", ["Ngandyera"] = "nne", ["Ngangam"] = "gng", ["Ngantangarra"] = "ntg", ["Nganyaywana"] = "nyx", ["Ngardi"] = "rxd", ["Ngarigu"] = "xni", ["Ngarinman"] = "nbj", ["Ngarinyin"] = "ung", ["Ngarla"] = "nrk", ["Ngarluma"] = "nrl", ["Ngarrindjeri"] = "nay", ["Ngas"] = "anc", ["Ngasa"] = "nsg", ["Ngatik Men's Creole"] = "ngm", ["Ngawn Chin"] = "cnw", ["Ngawun"] = "nxn", ["Ngazidja Comorian"] = "zdj", ["Ngbaka"] = "nga", ["Ngbaka Ma'bo"] = "nbm", ["Ngbaka Manza"] = "ngg", ["Ngbee"] = "jgb", ["Ngbinda"] = "nbd", ["Ngbundu"] = "nuu", ["Ngelima"] = "agh", ["Ngemba"] = "nge", ["Ngen"] = "gnj", ["Ngendelengo"] = "nql", ["Ngeq"] = "ngt", ["Ngete"] = "nnn", ["Nggem"] = "nbq", ["Nggwahyi"] = "ngx", ["Ngie"] = "ngj", ["Ngiemboon"] = "nnh", ["Ngile"] = "jle", ["Ngindo"] = "nnq", ["Ngiti"] = "niy", ["Ngiyambaa"] = "wyb", ["Ngizim"] = "ngi", ["Ngkoth"] = "aus-ngk", ["Ngkâlmpw Kanum"] = "kcd", ["Ngochang"] = "tbq-ngo", ["Ngom"] = "nra", ["Ngomba"] = "jgo", ["Ngombale"] = "nla", ["Ngombe (Central African Republic)"] = "nmj", ["Ngombe (Congo)"] = "ngc", ["Ngong"] = "nnx", ["Ngongo"] = "noq", ["Ngoni"] = "ngo", ["Ngoreme"] = "ngq", ["Ngoshie"] = "nsh", ["Ngul"] = "nlo", ["Ngulu"] = "ngp", ["Nguluwan"] = "nuw", ["Ngumbi"] = "nui", ["Ngunawal"] = "xul", ["Ngundi"] = "ndn", ["Ngundu"] = "nue", ["Ngungwel"] = "ngz", ["Ngurmbur"] = "nrx", ["Nguôn"] = "nuo", ["Ngwaba"] = "ngw", ["Ngwe"] = "nwe", ["Ngwo"] = "ngn", ["Ngäbere"] = "gym", ["Nhanda"] = "nha", ["Nheengatu"] = "yrl", ["Nhirrpi"] = "hrp", ["Nhuwala"] = "nhf", ["Nias"] = "nia", ["Nicaraguan Creole"] = "bzk", ["Nicaraguan Sign Language"] = "ncs", ["Nicola"] = "ath-nic", ["Niellim"] = "nie", ["Nigeria Mambila"] = "mzk", ["Nigerian Pidgin"] = "pcm", ["Nigerian Sign Language"] = "nsi", ["Nihali"] = "nll", ["Nii"] = "nii", ["Niksek"] = "gbe", ["Nila"] = "nil", ["Nilamba"] = "nim", ["Nimadi"] = "noe", ["Nimanbur"] = "nmp", ["Nimbari"] = "nmr", ["Nimboran"] = "nir", ["Nimi"] = "nis", ["Nimo"] = "niw", ["Nimoa"] = "nmw", ["Ninam"] = "shb", ["Nindi"] = "nxi", ["Ningera"] = "nby", ["Ninggerum"] = "nxr", ["Ningil"] = "niz", ["Ninia Yali"] = "nlk", ["Ninzo"] = "nin", ["Nipsan"] = "nps", ["Nisa"] = "njs", ["Nisenan"] = "nsz", ["Nisga'a"] = "ncg", ["Nisi"] = "yso", ["Niuafo'ou"] = "num", ["Niuatoputapu"] = "nkp", ["Niuean"] = "niu", ["Nivaclé"] = "cag", ["Nivkh"] = "niv", ["Niwer Mil"] = "hrc", ["Niya Prakrit"] = "pra-niy", ["Njalgulgule"] = "njl", ["Njebi"] = "nzb", ["Njen"] = "njj", ["Njerep"] = "njr", ["Njyem"] = "njy", ["Nkami"] = "nkq", ["Nkangala"] = "nkn", ["Nkari"] = "nkz", ["Nkem-Nkum"] = "isi", ["Nkhumbi"] = "khu", ["Nkongho"] = "nkc", ["Nkonya"] = "nko", ["Nkoroo"] = "nkx", ["Nkoya"] = "nka", ["Nkukoli"] = "nbo", ["Nkutu"] = "nkw", ["Nnam"] = "nbp", ["Nobiin"] = "fia", ["Nobonob"] = "gaw", ["Nocamán"] = "nom", ["Nocte Naga"] = "njb", ["Nogai"] = "nog", ["Noiri"] = "noi", ["Nokuku"] = "nkk", ["Nomaande"] = "lem", ["Nomane"] = "nof", ["Nomatsiguenga"] = "not", ["Nomlaki"] = "nol", ["Nomu"] = "noh", ["Nong Zhuang"] = "zhn", ["Nonuya"] = "noj", ["Nooksack"] = "nok", ["Noon"] = "snf", ["Noone"] = "nhu", ["Nootka"] = "nuk", ["Nopala Chatino"] = "cya", ["Noric"] = "nrc", ["Norman"] = "nrf", ["Norn"] = "nrn", ["Norra"] = "nrr", ["North Alaskan Inupiatun"] = "esi", ["North Ambrym"] = "mmg", ["North Asmat"] = "nks", ["North Awyu"] = "yir", ["North Babar"] = "bcd", ["North Boma"] = "boh", ["North Central Mixe"] = "neq", ["North Efate"] = "llp", ["North Fali"] = "fll", ["North Frisian"] = "frr", ["North Giziga"] = "gis", ["North Levantine Arabic"] = "apc", ["North Marquesan"] = "mrq", ["North Mesopotamian Arabic"] = "ayp", ["North Mofu"] = "mfk", ["North Moluccan Malay"] = "max", ["North Muyu"] = "kti", ["North Nuaulu"] = "nni", ["North Picene"] = "nrp", ["North Slavey"] = "scs", ["North Tairora"] = "tbg", ["North Tanna"] = "tnn", ["North Wahgi"] = "whg", ["North Watut"] = "una", ["Northeast Kiwai"] = "kiw", ["Northeast Maidu"] = "nmu", ["Northeast Pashayi"] = "aee", ["Northeastern Dinka"] = "dip", ["Northeastern Pomo"] = "pef", ["Northern Alta"] = "aqn", ["Northern Altai"] = "atv", ["Northern Amami-Oshima"] = "ryn", ["Northern Bai"] = "bfc", ["Northern Bontoc"] = "rbk", ["Northern Catanduanes Bicolano"] = "cts", ["Northern Dagara"] = "dgi", ["Northern East Cree"] = "crl", ["Northern Emberá"] = "emp", ["Northern Ghale"] = "ghh", ["Northern Grebo"] = "gbo", ["Northern Guiyang Hmong"] = "huj", ["Northern Haida"] = "hdn", ["Northern Hindko"] = "hno", ["Northern Huishui Hmong"] = "hmi", ["Northern Kalapuya"] = "nrt", ["Northern Kam"] = "doc", ["Northern Kankanay"] = "xnn", ["Northern Khmer"] = "kxm", ["Northern Kissi"] = "kqs", ["Northern Kurdish"] = "kmr", ["Northern Lorung"] = "lbr", ["Northern Luri"] = "lrc", ["Northern Mashan Hmong"] = "hmp", ["Northern Muji"] = "ymx", ["Northern Ndebele"] = "nd", ["Northern Ngbandi"] = "ngb", ["Northern Nisu"] = "yiv", ["Northern Nuni"] = "nuv", ["Northern Oaxaca Nahuatl"] = "nhy", ["Northern Ohlone"] = "cst", ["Northern One"] = "onr", ["Northern Paiute"] = "pao", ["Northern Pame"] = "pmq", ["Northern Pomo"] = "pej", ["Northern Puebla Nahuatl"] = "ncj", ["Northern Pumi"] = "pmi", ["Northern Pwo"] = "pww", ["Northern Qiandong Miao"] = "hea", ["Northern Qiang"] = "cng", ["Northern Rengma Naga"] = "nnl", ["Northern Roglai"] = "rog", ["Northern Saharan Berber"] = "mzb", ["Northern Sami"] = "se", ["Northern Selkup"] = "sel-nor", ["Northern Sierra Miwok"] = "nsq", ["Northern Sotho"] = "nso", ["Northern Subanen"] = "stb", ["Northern Tarahumara"] = "thh", ["Northern Tepehuan"] = "ntp", ["Northern Thai"] = "nod", ["Northern Tidong"] = "ntd", ["Northern Tlaxiaco Mixtec"] = "xtn", ["Northern Toussian"] = "tsp", ["Northern Tujia"] = "tji", ["Northern Tutchone"] = "ttm", ["Northern Valley Yokuts"] = "nai-nvy", ["Northern Yukaghir"] = "ykg", ["Northwest Alaska Inupiatun"] = "esk", ["Northwest Gbaya"] = "gya", ["Northwest Maidu"] = "mjd", ["Northwest Oaxaca Mixtec"] = "mxa", ["Northwest Pashayi"] = "glh", ["Northwestern Dinka"] = "diw", ["Northwestern Fars"] = "faz", ["Northwestern Ojibwa"] = "ojb", ["Northwestern Tamang"] = "tmk", ["Norwegian"] = "no", ["Norwegian Bokmål"] = "nb", ["Norwegian Nynorsk"] = "nn", ["Norwegian Sign Language"] = "nsl", ["Notre"] = "bly", ["Notsi"] = "ncf", ["Nottoway"] = "ntw", ["Nottoway-Meherrin"] = "nwy", ["Novial"] = "nov", ["Noxilo"] = "art-nox", ["Noy"] = "noy", ["Nsari"] = "asj", ["Nsenga"] = "nse", ["Nshi"] = "nsc", ["Nsong"] = "soo", ["Nsongo"] = "nsx", ["Ntcham"] = "bud", ["Ntomba"] = "nto", ["Ntra'ngith"] = "dgt", ["Nubaca"] = "baf", ["Nubi"] = "kcn", ["Nuer"] = "nus", ["Nuguria"] = "nur", ["Nuk"] = "noc", ["Nukak Makú"] = "mbr", ["Nukna"] = "klt", ["Nukuini"] = "nuc", ["Nukumanu"] = "nuq", ["Nukunu"] = "nnv", ["Nukunul"] = "xnu", ["Nukuoro"] = "nkr", ["Numana"] = "nbr", ["Numanggang"] = "nop", ["Numbami"] = "sij", ["Nume"] = "tgs", ["Numee"] = "kdk", ["Numidian"] = "nxm", ["Nung"] = "nut", ["Nungali"] = "nug", ["Nunggubuyu"] = "nuy", ["Nungon"] = "paa-nun", ["Nungu"] = "rin", ["Nupbikha"] = "npb", ["Nupe"] = "nup", ["Nusa Laut"] = "nul", ["Nusu"] = "nuf", ["Nutabe"] = "cba-nut", ["Nyabwa"] = "nwb", ["Nyah Kur"] = "cbn", ["Nyaheun"] = "nev", ["Nyakyusa"] = "nyy", ["Nyali"] = "nlj", ["Nyam"] = "nmi", ["Nyamal"] = "nly", ["Nyambo"] = "now", ["Nyamusa-Molo"] = "nwm", ["Nyamwanga"] = "mwn", ["Nyamwezi"] = "nym", ["Nyaneka"] = "nyk", ["Nyang'i"] = "nyp", ["Nyanga (Congo)"] = "nyj", ["Nyanga (Togo)"] = "ayg", ["Nyanga-li"] = "nyc", ["Nyangatom"] = "nnj", ["Nyangbo"] = "nyb", ["Nyangga"] = "nny", ["Nyangumarta"] = "nna", ["Nyankole"] = "nyn", ["Nyarafolo Senoufo"] = "sev", ["Nyaturu"] = "rim", ["Nyaw"] = "nyw", ["Nyawaygi"] = "nyt", ["Nyemba"] = "nba", ["Nyengo"] = "nye", ["Nyenkha"] = "neh", ["Nyeu"] = "nyl", ["Nyigina"] = "nyh", ["Nyiha"] = "nih", ["Nyika"] = "nkt", ["Nyimang"] = "nyi", ["Nyindrou"] = "lid", ["Nyindu"] = "nyg", ["Nyishi"] = "njz", ["Nyiyaparli"] = "xny", ["Nyokon"] = "nvo", ["Nyole (Kenya)"] = "nyd", ["Nyole (Uganda)"] = "nuj", ["Nyong"] = "muo", ["Nyoro"] = "nyo", ["Nyulnyul"] = "nyv", ["Nyunga"] = "nys", ["Nyungwe"] = "nyu", ["Nyâlayu"] = "yly", ["Nzadi"] = "nzd", ["Nzakambay"] = "nzy", ["Nzakara"] = "nzk", ["Nzanyi"] = "nja", ["Nzima"] = "nzi", ["Ná-Meo"] = "neo", ["Nüpode Huitoto"] = "hux", ["Nǀuu"] = "ngh", ["O'chi'chi'"] = "xoc", ["O'du"] = "tyh", ["O'odham"] = "ood", ["Obanliku"] = "bzy", ["Obispeño"] = "obi", ["Oblo"] = "obl", ["Obo Manobo"] = "obo", ["Obokuitai"] = "afz", ["Obolo"] = "ann", ["Obulom"] = "obu", ["Ocaina"] = "oca", ["Occitan"] = "oc", ["Ocotepec Mixtec"] = "mie", ["Ocotlán Zapotec"] = "zac", ["Od"] = "odk", ["Odiai"] = "bhf", ["Odoodee"] = "kkc", ["Odual"] = "odu", ["Odut"] = "oda", ["Ofayé"] = "opy", ["Ofo"] = "ofo", ["Ogbah"] = "ogc", ["Ogbia"] = "ogb", ["Ogbogolo"] = "ogg", ["Ogbronuagum"] = "ogu", ["Ogea"] = "eri", ["Oirata"] = "oia", ["Ojibwe"] = "oj", ["Ojitlán Chinantec"] = "chj", ["Okanagan"] = "oka", ["Oki-No-Erabu"] = "okn", ["Okiek"] = "oki", ["Okinawan"] = "ryu", ["Oko-Eni-Osayen"] = "oks", ["Oko-Juwoi"] = "okj", ["Okobo"] = "okb", ["Okodia"] = "okd", ["Okolod"] = "kqv", ["Okpamheri"] = "opa", ["Okpe (Northwestern Edo)"] = "okx", ["Okpe (Southwestern Edo)"] = "oke", ["Okpela"] = "atg", ["Oksapmin"] = "opm", ["Oku"] = "oku", ["Okwanuchu"] = "nai-okw", ["Old Anatolian Turkish"] = "trk-oat", ["Old Armenian"] = "xcl", ["Old Avar"] = "oav", ["Old Bengali"] = "inc-obn", ["Old Breton"] = "obt", ["Old Burmese"] = "obr", ["Old Catalan"] = "roa-oca", ["Old Chinese"] = "och", ["Old Church Slavonic"] = "cu", ["Old Cornish"] = "oco", ["Old Czech"] = "zlw-ocs", ["Old Danish"] = "gmq-oda", ["Old Dutch"] = "odt", ["Old East Slavic"] = "orv", ["Old English"] = "ang", ["Old French"] = "fro", ["Old Frisian"] = "ofs", ["Old Galician-Portuguese"] = "roa-opt", ["Old Georgian"] = "oge", ["Old Gujarati"] = "inc-ogu", ["Old High German"] = "goh", ["पुरानी हिंदी"] = "inc-ohi", ["Old Hungarian"] = "ohu", ["Old Irish"] = "sga", ["Old Japanese"] = "ojp", ["Old Javanese"] = "kaw", ["Old Kamta"] = "inc-ork", ["Old Kannada"] = "dra-okn", ["Old Kentish Sign Language"] = "okl", ["Old Khmer"] = "okz", ["Old Komi"] = "urj-koo", ["Old Korean"] = "oko", ["Old Leonese"] = "roa-ole", ["Old Lithuanian"] = "olt", ["Old Manipuri"] = "omp", ["Old Marathi"] = "omr", ["Old Median"] = "xme-old", ["Old Mon"] = "omx", ["Old Norse"] = "non", ["Old Novgorodian"] = "zle-ono", ["Old Nubian"] = "onw", ["Old Occitan"] = "pro", ["Old Oriya"] = "inc-oor", ["Old Ossetic"] = "oos", ["Old Persian"] = "peo", ["Old Polish"] = "zlw-opl", ["Old Prussian"] = "prg", ["Old Punjabi"] = "inc-opa", ["Old Ruthenian"] = "zle-ort", ["Old Saxon"] = "osx", ["Old South Arabian"] = "sem-srb", ["Old Spanish"] = "osp", ["Old Sundanese"] = "osn", ["Old Swedish"] = "gmq-osw", ["Old Tamil"] = "oty", ["Old Tati"] = "xme-ott", ["Old Telugu"] = "dra-ote", ["Old Tibetan"] = "otb", ["Old Tupi"] = "tpw", ["Old Turkic"] = "otk", ["Old Uyghur"] = "oui", ["Old Welsh"] = "owl", ["Olekha"] = "ole", ["Ollari"] = "gdb", ["Olo"] = "ong", ["Oloma"] = "olm", ["Olrat"] = "olr", ["Olu'bo"] = "lul", ["Olukumi"] = "ulb", ["Olulumo-Ikom"] = "iko", ["Oluta Popoluca"] = "plo", ["Olutsotso"] = "lto", ["Omagua"] = "omg", ["Omaha-Ponca"] = "oma", ["Omani Arabic"] = "acx", ["Omba"] = "omb", ["Ombamba"] = "mbm", ["Ombo"] = "oml", ["Ometepec Nahuatl"] = "nht", ["Omi"] = "omi", ["Omok"] = "omk", ["Omotik"] = "omt", ["Omurano"] = "omu", ["Oneida"] = "one", ["Ong"] = "oog", ["Ongota"] = "bxe", ["Onin"] = "oni", ["Onjob"] = "onj", ["Ono"] = "ons", ["Onobasulu"] = "onn", ["Onondaga"] = "ono", ["Ontenu"] = "ont", ["Ontong Java"] = "ojv", ["Oorlams"] = "oor", ["Opao"] = "opo", ["Opata"] = "opt", ["Opuuo"] = "lgn", ["Opón"] = "sai-opo", ["Oraon Sadri"] = "sdr", ["Orejón"] = "ore", ["Oring"] = "org", ["Oriya"] = "or", ["Orizaba Nahuatl"] = "nlv", ["Orléanais"] = "roa-orl", ["Ormu"] = "orz", ["Ormuri"] = "oru", ["Oro"] = "orx", ["Oro Win"] = "orw", ["Oroch"] = "oac", ["Oroha"] = "ora", ["Orok"] = "oaa", ["Orokaiva"] = "okv", ["Oroko"] = "bdu", ["Orokolo"] = "oro", ["Oromo"] = "om", ["Oroqen"] = "orh", ["Orowe"] = "bpk", ["Oruma"] = "orr", ["Orya"] = "ury", ["Osage"] = "osa", ["Osamayi"] = "syx", ["Osatu"] = "ost", ["Oscan"] = "osc", ["Osing"] = "osi", ["Ososo"] = "oso", ["Ossetian"] = "os", ["Ot Danum"] = "otd", ["Otank"] = "uta", ["Oti"] = "oti", ["Otomaco"] = "sai-oto", ["Otoro"] = "otr", ["Ottawa"] = "otw", ["Ottoman Turkish"] = "ota", ["Otuke"] = "otu", ["Ouma"] = "oum", ["Oune"] = "oue", ["Owa"] = "stn", ["Owenia"] = "wsr", ["Owiniga"] = "owi", ["Oy"] = "oyb", ["Oya'oya"] = "oyy", ["Oyda"] = "oyd", ["Ozolotepec Zapotec"] = "zao", ["Ozumacín Chinantec"] = "chz", ["Pa"] = "ppt", ["Pa Di"] = "pdi", ["Pa'a"] = "pqa", ["Pa'o Karen"] = "blk", ["Pa-Hng"] = "pha", ["Paama"] = "pma", ["Paasaal"] = "sig", ["Pacahuara"] = "pcp", ["Pacoh"] = "pac", ["Padoe"] = "pdo", ["Paelignian"] = "pgn", ["Paeonian"] = "ine-pae", ["Pagi"] = "pgi", ["Pagibete"] = "pae", ["Pagu"] = "pgu", ["Pahanan Agta"] = "apf", ["Pahari-Potwari"] = "phr", ["Pahi"] = "lgt", ["Pahlavani"] = "phv", ["Pai Tavytera"] = "pta", ["Pai-lang"] = "tbq-plg", ["Paicî"] = "pri", ["Paikoneka"] = "awd-pai", ["Paipai"] = "ppi", ["Paisaci Prakrit"] = "inc-psc", ["Paite"] = "pck", ["Paiwan"] = "pwn", ["Pajapan Nahuatl"] = "nhp", ["Pak-Tong"] = "pkg", ["Pakanha"] = "pkn", ["Pakistan Sign Language"] = "pks", ["Paku"] = "pku", ["Paku Karen"] = "kpp", ["Pal"] = "abw", ["Palaic"] = "plq", ["Palaka Senoufo"] = "plr", ["Palantla Chinantec"] = "cpa", ["Palauan"] = "pau", ["Palawan Batak"] = "bya", ["Paleni"] = "pnl", ["Palenquero"] = "pln", ["Palewyami"] = "nai-ply", ["Pali"] = "pi", ["Palikur"] = "plu", ["Paliyan"] = "pcf", ["Pallanganmiddang"] = "pmd", ["Palor"] = "fap", ["Palta"] = "sai-pal", ["Palu'e"] = "ple", ["Paluan"] = "plz", ["Palya Bareli"] = "bpx", ["Pam"] = "pmn", ["Pambia"] = "pmb", ["Pamigua"] = "sai-pam", ["Pamlico"] = "pmk", ["Pamona"] = "pmf", ["Pamosu"] = "hih", ["Pamplona Atta"] = "att", ["Pana (Central Africa)"] = "pnz", ["Pana (West Africa)"] = "pnq", ["Panamanian Sign Language"] = "lsp", ["Panamint"] = "par", ["Panare"] = "pbh", ["Panará"] = "kre", ["Panasuan"] = "psn", ["Panawa"] = "pwb", ["Pancana"] = "pnp", ["Panchpargania"] = "tdb", ["Pande"] = "bkj", ["Pangasinan"] = "pag", ["Pangseng"] = "pgs", ["Pangutaran Sama"] = "slm", ["Pangwa"] = "pbr", ["Pangwali"] = "pgg", ["Panim"] = "pnr", ["Paniya"] = "pcg", ["Pankararé"] = "pax", ["Pankararú"] = "paz", ["Pankhu"] = "pkh", ["Pannei"] = "pnc", ["Panobo"] = "pno", ["Panyjima"] = "pnw", ["Panzaleo"] = "sai-pnz", ["Pao"] = "ppa", ["Papantla Totonac"] = "top", ["Papapana"] = "ppn", ["Papar"] = "dpp", ["Papasena"] = "pas", ["Papel"] = "pbo", ["Papi"] = "ppe", ["Papiamentu"] = "pap", ["Papitalai"] = "pat", ["Papora"] = "ppu", ["Papua New Guinean Sign Language"] = "pgz", ["Papuan Malay"] = "pmy", ["Papuma"] = "ppm", ["Para Naga"] = "pzn", ["Parachi"] = "prc", ["Paraguayan Guaraní"] = "gug", ["Paraguayan Sign Language"] = "pys", ["Parakanã"] = "pak", ["Paranan"] = "prf", ["Paranawát"] = "paf", ["Paratió"] = "sai-par", ["Paraujano"] = "pbg", ["Parauk"] = "prk", ["Parawen"] = "prw", ["Pardhan"] = "pch", ["Pardhi"] = "pcl", ["Pare"] = "asa", ["Pareci"] = "pab", ["Paredarerme"] = "xpd", ["Parenga"] = "pcj", ["Parkari Koli"] = "kvx", ["Parthian"] = "xpr", ["Parya"] = "paq", ["Pará Arára"] = "aap", ["Pará Gavião"] = "gvp", ["Pashto"] = "ps", ["Pasi"] = "psq", ["Pass Valley Yali"] = "yac", ["Passé"] = "awd-pas", ["Patagón"] = "sai-ptg", ["Patamona"] = "pbc", ["Patani"] = "ptn", ["Pataxó Hã-Ha-Hãe"] = "pth", ["Patep"] = "ptp", ["Pathiya"] = "pty", ["Patpatar"] = "gfk", ["Pattani"] = "lae", ["Pattani Malay"] = "mfa", ["Pattapu"] = "ptq", ["Patwin"] = "pwi", ["Paulohi"] = "plh", ["Paumarí"] = "pad", ["Paunaca"] = "pnk", ["Pauri Bareli"] = "bfb", ["Pauserna"] = "psm", ["Pawaia"] = "pwa", ["Pawnee"] = "paw", ["Payaguá"] = "sai-pyg", ["Paynamar"] = "pmr", ["Pazeh"] = "pzh", ["Pe"] = "pai", ["Pear"] = "pcb", ["Pech"] = "pay", ["Pecheneg"] = "xpc", ["Peerapper"] = "xpw", ["Peere"] = "pfe", ["Pei"] = "ppq", ["Pekal"] = "pel", ["Pela"] = "bxd", ["Pele-Ata"] = "ata", ["Pemon"] = "aoc", ["Penang Sign Language"] = "psg", ["Penchal"] = "pek", ["Pendau"] = "ums", ["Pengo"] = "peg", ["Pennsylvania German"] = "pdc", ["Penobscot"] = "aaq", ["Penrhyn"] = "pnh", ["Pentlatch"] = "ptw", ["Perai"] = "wet", ["Peranakan Indonesian"] = "pea", ["Perema"] = "wom", ["Pericú"] = "nai-per", ["Pero"] = "pip", ["फ़ारसी"] = "fa", ["Persian Sign Language"] = "psc", ["Peruvian Sign Language"] = "prl", ["Petapa Zapotec"] = "zpe", ["Petats"] = "pex", ["Petjo"] = "pey", ["Peñoles Mixtec"] = "mil", ["Phai"] = "prt", ["Phake"] = "phk", ["Phala"] = "ypa", ["Phalura"] = "phl", ["Phana'"] = "phq", ["Phangduwali"] = "phw", ["Phende"] = "pem", ["Philippine Sign Language"] = "psp", ["Philistine"] = "und-phi", ["Phimbi"] = "phm", ["Phoenician"] = "phn", ["Phola"] = "ypg", ["Pholo"] = "yip", ["Phom"] = "nph", ["Phong-Kniang"] = "pnx", ["Phrae Pwo"] = "kjt", ["Phrygian"] = "xpg", ["Phu Thai"] = "pht", ["Phuan"] = "phu", ["Phudagi"] = "phd", ["Phuie"] = "pug", ["Phukha"] = "phh", ["Phuma"] = "ypm", ["Phunoi"] = "pho", ["Phuong"] = "phg", ["Phupa"] = "ypp", ["Phupha"] = "yph", ["Phuthi"] = "bnt-phu", ["Phuza"] = "ypz", ["Piamatsina"] = "ptr", ["Piame"] = "pin", ["Piapoco"] = "pio", ["Piaroa"] = "pid", ["Picard"] = "pcd", ["Pichinglis"] = "fpe", ["Pichis Ashéninka"] = "cpu", ["Pictish"] = "xpi", ["Picuris"] = "nai-pic", ["Pidgin Delaware"] = "dep", ["Pidgin Iha"] = "ihb", ["Pidgin Onin"] = "onx", ["Piedmontese"] = "pms", ["Pijao"] = "pij", ["Pije"] = "piz", ["Pijin"] = "pis", ["Pilagá"] = "plg", ["Pileni"] = "piv", ["Pima Bajo"] = "pia", ["Pimbwe"] = "piw", ["Pinai-Hagahai"] = "pnn", ["Pingelapese"] = "pif", ["Pini"] = "pii", ["Pinigura"] = "pnv", ["Pinjarup"] = "pnj", ["Pinji"] = "pic", ["Pinotepa Nacional Mixtec"] = "mio", ["Pintiini"] = "pti", ["Pintupi-Luritja"] = "piu", ["Pinyin"] = "pny", ["Pipil"] = "ppl", ["Pirahã"] = "myp", ["Piratapuyo"] = "pir", ["Pirlatapa"] = "bxi", ["Piro"] = "pie", ["Pirriya"] = "xpa", ["Pisabo"] = "pig", ["Pisaflores Tepehua"] = "tpp", ["Piscataway"] = "psy", ["Pisidian"] = "xps", ["Pitcairn-Norfolk"] = "pih", ["Pite Sami"] = "sje", ["Piti"] = "pcn", ["Pitjantjatjara"] = "pjt", ["Pitta-Pitta"] = "pit", ["Piu"] = "pix", ["Piya-Kwonci"] = "piy", ["Plains Apache"] = "apk", ["Plains Cree"] = "crk", ["Plains Indian Sign Language"] = "psd", ["Plains Miwok"] = "pmw", ["Plapo Krumen"] = "ktj", ["Plautdietsch"] = "pdt", ["Playero"] = "gob", ["Pnar"] = "pbv", ["Pochuri Naga"] = "npo", ["Pochutec"] = "xpo", ["Podoko"] = "pbi", ["Pogolo"] = "poy", ["Pohnpeian"] = "pon", ["Poitevin-Saintongeais"] = "roa-poi", ["Pokangá"] = "pok", ["Poke"] = "pof", ["Pol"] = "pmm", ["Polabian"] = "pox", ["Polci"] = "plj", ["Polish"] = "pl", ["Polish Sign Language"] = "pso", ["Polonombauk"] = "plb", ["Pom"] = "pmo", ["Ponam"] = "ncc", ["Pongu"] = "png", ["Ponosakan"] = "pns", ["Pontic Greek"] = "pnt", ["Ponyo"] = "npg", ["Poqomam"] = "poc", ["Poqomchi'"] = "poh", ["Porohanon"] = "prh", ["Port Sandwich"] = "psw", ["Port Sorell"] = "xpl", ["Port Vato"] = "ptv", ["Portuguese"] = "pt", ["Portuguese Sign Language"] = "psr", ["Potawatomi"] = "pot", ["Potiguára"] = "pog", ["Poumei Naga"] = "pmx", ["Pouye"] = "bye", ["Powari"] = "pwr", ["Powhatan"] = "pim", ["Poyanáwa"] = "pyn", ["Prakrit"] = "inc-pra", ["Prasuni"] = "prn", ["Primitive Irish"] = "pgl", ["Principense"] = "pre", ["Proto-Abkhaz-Abaza"] = "cau-abz-pro", ["Proto-Afroasiatic"] = "afa-pro", ["Proto-Albanian"] = "sqj-pro", ["Proto-Algic"] = "aql-pro", ["Proto-Algonquian"] = "alg-pro", ["Proto-Amuesha-Chamicuro"] = "awd-amc-pro", ["Proto-Anatolian"] = "ine-ana-pro", ["Proto-Apachean"] = "apa-pro", ["Proto-Arawa"] = "auf-pro", ["Proto-Arawak"] = "awd-pro", ["Proto-Armenian"] = "hyx-pro", ["Proto-Arnhem"] = "aus-arn-pro", ["Proto-Aroid"] = "omv-aro-pro", ["Proto-Aslian"] = "mkh-asl-pro", ["Proto-Atayalic"] = "map-ata-pro", ["Proto-Athabaskan"] = "ath-pro", ["Proto-Atlantic-Congo"] = "alv-pro", ["Proto-Austroasiatic"] = "aav-pro", ["Proto-Austronesian"] = "map-pro", ["Proto-Avaro-Andian"] = "cau-ava-pro", ["Proto-Bahnaric"] = "mkh-ban-pro", ["Proto-Balto-Slavic"] = "ine-bsl-pro", ["Proto-Bantoid"] = "nic-bod-pro", ["Proto-Bantu"] = "bnt-pro", ["Proto-Basque"] = "euq-pro", ["Proto-Batak"] = "btk-pro", ["Proto-Be"] = "qfa-onb-pro", ["Proto-Be-Tai"] = "qfa-bet-pro", ["Proto-Benue-Congo"] = "nic-bco-pro", ["Proto-Berber"] = "ber-pro", ["Proto-Bodo-Garo"] = "tbq-bdg-pro", ["Proto-Bongo-Bagirmi"] = "csu-bba-pro", ["Proto-Boran"] = "sai-bor-pro", ["Proto-Brythonic"] = "cel-bry-pro", ["Proto-Bua"] = "alv-bua-pro", ["Proto-Bungku-Tolaki"] = "poz-btk-pro", ["Proto-Caddoan"] = "cdd-pro", ["Proto-Cangin"] = "alv-cng-pro", ["Proto-Cariban"] = "sai-car-pro", ["Proto-Celtic"] = "cel-pro", ["Proto-Central Chadic"] = "cdc-cbm-pro", ["Proto-Central Indo-Aryan"] = "inc-cen-pro", ["Proto-Central Jê"] = "sai-cje-pro", ["Proto-Central New South Wales"] = "aus-cww-pro", ["Proto-Central Sudanic"] = "csu-pro", ["Proto-Central Togo"] = "alv-gtm-pro", ["Proto-Central-Eastern Malayo-Polynesian"] = "poz-cet-pro", ["Proto-Cerrado"] = "sai-cer-pro", ["Proto-Chadic"] = "cdc-pro", ["Proto-Chamic"] = "cmc-pro", ["Proto-Chatino"] = "omq-cha-pro", ["Proto-Chibchan"] = "cba-pro", ["Proto-Chimakuan"] = "chi-pro", ["Proto-Chinookan"] = "nai-ckn-pro", ["Proto-Chukotko-Kamchatkan"] = "qfa-cka-pro", ["Proto-Chumash"] = "nai-chu-pro", ["Proto-Circassian"] = "cau-cir-pro", ["Proto-Cupan"] = "azc-cup-pro", ["Proto-Cushitic"] = "cus-pro", ["Proto-Daju"] = "sdv-daj-pro", ["Proto-Daly"] = "aus-dal-pro", ["Proto-Dargwa"] = "cau-drg-pro", ["Proto-Dizoid"] = "omv-diz-pro", ["Proto-Dravidian"] = "dra-pro", ["Proto-Eastern Jebel"] = "sdv-eje-pro", ["Proto-Eastern Malayo-Polynesian"] = "pqe-pro", ["Proto-Eastern Oti-Volta"] = "nic-eov-pro", ["Proto-Eastern Polynesian"] = "poz-pep-pro", ["Proto-Edekiri"] = "alv-edk-pro", ["Proto-Edoid"] = "alv-edo-pro", ["Proto-Eskimo"] = "esx-esk-pro", ["Proto-Eskimo-Aleut"] = "esx-pro", ["Proto-Fali"] = "alv-fli-pro", ["Proto-Finnic"] = "urj-fin-pro", ["Proto-Gbe"] = "alv-gbe-pro", ["Proto-Georgian-Zan"] = "ccs-gzn-pro", ["Proto-Germanic"] = "gem-pro", ["Proto-Grassfields"] = "nic-grf-pro", ["Proto-Great Andamanese"] = "qfa-adm-pro", ["Proto-Guang"] = "alv-gng-pro", ["Proto-Gur"] = "nic-gur-pro", ["Proto-Gurunsi"] = "nic-gns-pro", ["Proto-Halmahera-Cenderawasih"] = "poz-hce-pro", ["Proto-Heiban"] = "alv-hei-pro", ["Proto-Hellenic"] = "grk-pro", ["Proto-Highland East Cushitic"] = "cus-hec-pro", ["Proto-Hlai"] = "qfa-lic-pro", ["Proto-Hmong"] = "hmn-pro", ["Proto-Hmong-Mien"] = "hmx-pro", ["Proto-Hrusish"] = "sit-hrs-pro", ["Proto-Huitoto-Ocaina"] = "sai-hoc-pro", ["Proto-Hurro-Urartian"] = "qfa-hur-pro", ["Proto-Idomoid"] = "alv-ido-pro", ["Proto-Igboid"] = "alv-igb-pro", ["Proto-Ijoid"] = "ijo-pro", ["Proto-Indo-Aryan"] = "inc-pro", ["Proto-Indo-European"] = "ine-pro", ["Proto-Indo-Iranian"] = "iir-pro", ["Proto-Inuit"] = "esx-inu-pro", ["Proto-Iranian"] = "ira-pro", ["Proto-Iroquoian"] = "iro-pro", ["Proto-Italic"] = "itc-pro", ["Proto-Iwaidjan"] = "aus-wdj-pro", ["Proto-Japonic"] = "jpx-pro", ["Proto-Jukunoid"] = "nic-jkn-pro", ["Proto-Jê"] = "sai-jee-pro", ["Proto-Kadu"] = "qfa-kad-pro", ["Proto-Kalamian"] = "phi-kal-pro", ["Proto-Kalapuyan"] = "nai-klp-pro", ["Proto-Kam-Sui"] = "qfa-kms-pro", ["Proto-Kampa"] = "awd-kmp-pro", ["Proto-Karen"] = "kar-pro", ["Proto-Kartvelian"] = "ccs-pro", ["Proto-Katuic"] = "mkh-kat-pro", ["Proto-Kham"] = "sit-kha-pro", ["Proto-Khasian"] = "aav-khs-pro", ["Proto-Khmeric"] = "mkh-kmr-pro", ["Proto-Khmuic"] = "mkh-khm-pro", ["Proto-Khoe"] = "khi-kho-pro", ["Proto-Koman"] = "ssa-kom-pro", ["Proto-Komisenian"] = "ira-kms-pro", ["Proto-Koreanic"] = "qfa-kor-pro", ["Proto-Kra"] = "qfa-kra-pro", ["Proto-Kra-Dai"] = "qfa-tak-pro", ["Proto-Kru"] = "kro-pro", ["Proto-Kuki-Chin"] = "tbq-kuk-pro", ["Proto-Kuliak"] = "ssa-klk-pro", ["Proto-Kurdish"] = "ku-pro", ["Proto-Kwa"] = "alv-kwa-pro", ["Proto-Lalo"] = "tbq-lal-pro", ["Proto-Lampungic"] = "poz-lgx-pro", ["Proto-Lezghian"] = "cau-lzg-pro", ["Proto-Lolo-Burmese"] = "tbq-lob-pro", ["Proto-Loloish"] = "tbq-lol-pro", ["Proto-Lower Cross River"] = "nic-lcr-pro", ["Proto-Luish"] = "sit-luu-pro", ["Proto-Maidun"] = "nai-mdu-pro", ["Proto-Malayic"] = "poz-mly-pro", ["Proto-Malayo-Chamic"] = "poz-mcm-pro", ["Proto-Malayo-Polynesian"] = "poz-pro", ["Proto-Malayo-Sumbawan"] = "poz-msa-pro", ["Proto-Mande"] = "dmn-pro", ["Proto-Mangbetu"] = "csu-maa-pro", ["Proto-Mari"] = "chm-pro", ["Proto-Masa"] = "cdc-mas-pro", ["Proto-Mayan"] = "myn-pro", ["Proto-Mazatec"] = "omq-maz-pro", ["Proto-Medo-Parthian"] = "ira-mpr-pro", ["Proto-Mien"] = "hmx-mie-pro", ["Proto-Min"] = "zhx-min-pro", ["Proto-Mixe-Zoque"] = "nai-miz-pro", ["Proto-Mixtec"] = "omq-mxt-pro", ["Proto-Mixtecan"] = "omq-mix-pro", ["Proto-Mon-Khmer"] = "mkh-pro", ["Proto-Mongolic"] = "xgn-pro", ["Proto-Monic"] = "mkh-mnc-pro", ["Proto-Mordvinic"] = "urj-mdv-pro", ["Proto-Mumuye"] = "alv-mum-pro", ["Proto-Munda"] = "mun-pro", ["Proto-Munji-Yidgha"] = "ira-mny-pro", ["Proto-Muskogean"] = "nai-mus-pro", ["Proto-Na-Dene"] = "xnd-pro", ["Proto-Nahuan"] = "azc-nah-pro", ["Proto-Nakh"] = "cau-nkh-pro", ["Proto-Nawiki"] = "awd-nwk-pro", ["Proto-Nguni"] = "bnt-ngu-pro", ["Proto-Nicobarese"] = "aav-nic-pro", ["Proto-Niger-Congo"] = "nic-pro", ["Proto-Nilo-Saharan"] = "ssa-pro", ["Proto-Nilotic"] = "sdv-nil-pro", ["Proto-Norse"] = "gmq-pro", ["Proto-North Caucasian"] = "ccn-pro", ["Proto-North Halmahera"] = "paa-nha-pro", ["Proto-North Iroquoian"] = "iro-nor-pro", ["Proto-North Sarawak"] = "poz-swa-pro", ["Proto-Northeast Caucasian"] = "cau-nec-pro", ["Proto-Northern Jê"] = "sai-nje-pro", ["Proto-Northwest Caucasian"] = "cau-nwc-pro", ["Proto-Nubian"] = "nub-pro", ["Proto-Nuclear Polynesian"] = "poz-pnp-pro", ["Proto-Numic"] = "azc-num-pro", ["Proto-Nupoid"] = "alv-nup-pro", ["Proto-Nuristani"] = "iir-nur-pro", ["Proto-Nyima"] = "sdv-nyi-pro", ["Proto-Nyulnyulan"] = "aus-nyu-pro", ["Proto-Oceanic"] = "poz-oce-pro", ["Proto-Ogoni"] = "nic-ogo-pro", ["Proto-Omotic"] = "omv-pro", ["Proto-Ongan"] = "qfa-ong-pro", ["Proto-Ossetic"] = "os-pro", ["Proto-Oti-Volta"] = "nic-ovo-pro", ["Proto-Oto-Manguean"] = "omq-pro", ["Proto-Oto-Pamean"] = "omq-otp-pro", ["Proto-Otomi"] = "oto-otm-pro", ["Proto-Otomian"] = "oto-pro", ["Proto-Pakanic"] = "mkh-pkn-pro", ["Proto-Palaungic"] = "mkh-pal-pro", ["Proto-Pama-Nyungan"] = "aus-pam-pro", ["Proto-Paresi-Waura"] = "awd-prw-pro", ["Proto-Pathan"] = "ira-pat-pro", ["Proto-Pearic"] = "mkh-pea-pro", ["Proto-Permic"] = "urj-prm-pro", ["Proto-Philippine"] = "phi-pro", ["Proto-Plateau"] = "nic-plt-pro", ["Proto-Plateau Penutian"] = "nai-plp-pro", ["Proto-Pnar-Khasi-Lyngngam"] = "aav-pkl-pro", ["Proto-Polynesian"] = "poz-pol-pro", ["Proto-Pomeranian"] = "zlw-pom-pro", ["Proto-Pomo"] = "nai-pom-pro", ["Proto-Rukai"] = "dru-pro", ["Proto-Ryukyuan"] = "jpx-ryu-pro", ["Proto-Saka"] = "xsc-sak-pro", ["Proto-Saka-Wakhi"] = "xsc-skw-pro", ["Proto-Salish"] = "sal-pro", ["Proto-Samic"] = "smi-pro", ["Proto-Samoyedic"] = "syd-pro", ["Proto-Sanglechi-Ishkashimi"] = "ira-sgi-pro", ["Proto-Sara"] = "csu-sar-pro", ["Proto-Scythian"] = "xsc-pro", ["Proto-Selkup"] = "sel-pro", ["Proto-Semitic"] = "sem-pro", ["Proto-Shughni-Roshani"] = "ira-shr-pro", ["Proto-Shughni-Yazghulami"] = "ira-shy-pro", ["Proto-Shughni-Yazghulami-Munji"] = "ira-sym-pro", ["Proto-Sino-Tibetan"] = "sit-pro", ["Proto-Siouan"] = "sio-pro", ["Proto-Siouan-Catawban"] = "nai-sca-pro", ["Proto-Slavic"] = "sla-pro", ["Proto-Sogdic"] = "ira-sgc-pro", ["Proto-Somaloid"] = "cus-som-pro", ["Proto-Songhay"] = "son-pro", ["Proto-Sotho-Tswana"] = "bnt-sts-pro", ["Proto-South Cushitic"] = "cus-sou-pro", ["Proto-South Sulawesi"] = "poz-ssw-pro", ["Proto-Southern Jê"] = "sai-sje-pro", ["Proto-Southwestern Tai"] = "tai-swe-pro", ["Proto-Sunda-Sulawesi"] = "poz-sus-pro", ["Proto-Ta-Arawak"] = "awd-taa-pro", ["Proto-Tai"] = "tai-pro", ["Proto-Takic"] = "azc-tak-pro", ["Proto-Taman"] = "sdv-tmn-pro", ["Proto-Tani"] = "sit-tan-pro", ["Proto-Taranoan"] = "sai-tar-pro", ["Proto-Tatic"] = "xme-ttc-pro", ["Proto-Tocharian"] = "ine-toc-pro", ["Proto-Totozoquean"] = "nai-tot-pro", ["Proto-Trans-New Guinea"] = "ngf-pro", ["Proto-Trique"] = "omq-tri-pro", ["Proto-Tsezian"] = "cau-tsz-pro", ["Proto-Tsimshianic"] = "nai-tsi-pro", ["Proto-Tungusic"] = "tuw-pro", ["Proto-Tupi-Guarani"] = "tup-gua-pro", ["Proto-Tupian"] = "tup-pro", ["Proto-Turkic"] = "trk-pro", ["Proto-Ubangian"] = "nic-ubg-pro", ["Proto-Ugric"] = "urj-ugr-pro", ["Proto-Upper Cross River"] = "nic-ucr-pro", ["Proto-Uralic"] = "urj-pro", ["Proto-Utian"] = "nai-utn-pro", ["Proto-Uto-Aztecan"] = "azc-pro", ["Proto-Vietic"] = "mkh-vie-pro", ["Proto-Volta-Congo"] = "nic-vco-pro", ["Proto-Volta-Niger"] = "alv-von-pro", ["Proto-West Germanic"] = "gmw-pro", ["Proto-West Semitic"] = "sem-wes-pro", ["Proto-Western Mande"] = "dmn-mdw-pro", ["Proto-Witotoan"] = "sai-wit-pro", ["Proto-Yeniseian"] = "qfa-yen-pro", ["Proto-Yoruba"] = "alv-yor-pro", ["Proto-Yoruboid"] = "alv-yrd-pro", ["Proto-Yukaghir"] = "qfa-yuk-pro", ["Proto-Yupik"] = "ypk-pro", ["Proto-Zapotec"] = "omq-zpc-pro", ["Proto-Zapotecan"] = "omq-zap-pro", ["Proto-Zaza-Gorani"] = "ira-zgr-pro", ["Providencia Sign Language"] = "prz", ["Psikye"] = "kvj", ["Puare"] = "pux", ["Pudtol Atta"] = "atp", ["Puebla Mazatec"] = "pbm", ["Puelche"] = "pue", ["Puerto Rican Sign Language"] = "psl", ["Puimei Naga"] = "npu", ["Puinave"] = "pui", ["Puiron"] = "sit-prn", ["Pukapukan"] = "pkp", ["Pulabu"] = "pup", ["Puluwat"] = "puw", ["Puma"] = "pum", ["Pumpokol"] = "xpm", ["Pumé"] = "yae", ["Punan Aput"] = "pud", ["Punan Bah-Biau"] = "pna", ["Punan Batu"] = "pnm", ["Punan Merah"] = "puf", ["Punan Merap"] = "puc", ["Punan Tubu"] = "puj", ["Punic"] = "xpu", ["Punjabi"] = "pa", ["Punu"] = "puu", ["Puoc"] = "puo", ["Puquina"] = "puq", ["Puragi"] = "pru", ["Purari"] = "iar", ["Purepecha"] = "pua", ["Puri"] = "prr", ["Purik"] = "prx", ["Purisimeño"] = "puy", ["Puruborá"] = "pur", ["Puruhá"] = "sai-prh", ["Purukotó"] = "sai-pur", ["Purum"] = "pub", ["Putai"] = "mfl", ["Putoh"] = "put", ["Putukwam"] = "afe", ["Puxian"] = "cpx", ["Puyo-Paekche"] = "xpp", ["Puyuma"] = "pyu", ["Pwaamei"] = "pme", ["Pwapwa"] = "pop", ["Pyapun"] = "pcw", ["Pye Krumen"] = "pye", ["Pyemmairre"] = "xpb", ["Pyen"] = "pyy", ["Pykobjê"] = "sai-pyk", ["Pyu"] = "pby", ["Páez"] = "pbb", ["Pááfang"] = "pfa", ["Päri"] = "lkr", ["Pémono"] = "pev", ["Pévé"] = "lme", ["Pökoot"] = "pko", ["Q'anjob'al"] = "kjb", ["Q'eqchi"] = "kek", ["Qabiao"] = "laq", ["Qaqet"] = "byx", ["Qatabanian"] = "xqt", ["Qau"] = "gqu", ["Qila Muji"] = "ymq", ["Qimant"] = "ahg", ["Quapaw"] = "qua", ["Quebec Sign Language"] = "fcs", ["Quechua"] = "qu", ["Quenya"] = "qya", ["Querétaro Otomi"] = "otq", ["Quetzaltepec Mixe"] = "pxm", ["Queyu"] = "qvy", ["Quiavicuzas Zapotec"] = "zpj", ["Quileute"] = "qui", ["Quimbaya"] = "sai-qmb", ["Quinault"] = "qun", ["Quinigua"] = "nai-qng", ["Quinqui"] = "quq", ["Quioquitani-Quierí Zapotec"] = "ztq", ["Quiotepec Chinantec"] = "chq", ["Quiripi"] = "qyp", ["Quitemo"] = "sai-qtm", ["Rabha"] = "rah", ["Rabona"] = "sai-rab", ["Rade"] = "rad", ["Raetic"] = "xrr", ["Raga"] = "lml", ["Rahambuu"] = "raz", ["Rajah Kabunsuwan Manobo"] = "mqk", ["Rajasthani"] = "raj", ["Rajbanshi"] = "rjs", ["Raji"] = "rji", ["Rajong"] = "rjg", ["Rajput Garasia"] = "gra", ["Rakahanga-Manihiki"] = "rkh", ["Rakhine"] = "rki", ["Ralte"] = "ral", ["Rama"] = "rma", ["Ramandi"] = "tks", ["Ramanos"] = "sai-ram", ["Ramoaaina"] = "rai", ["Ramopa"] = "kjx", ["Rampi"] = "lje", ["Rana Tharu"] = "thr", ["Rang"] = "rax", ["Rangkas"] = "rgk", ["Ranglong"] = "rnl", ["Rao"] = "rao", ["Rapa"] = "ray", ["Rapa Nui"] = "rap", ["Rapoisi"] = "kyx", ["Rapting"] = "rpt", ["Rara Bakati'"] = "lra", ["Rarotongan"] = "rar", ["Rasawa"] = "rac", ["Ratagnon"] = "btn", ["Ratahan"] = "rth", ["Rathawi"] = "rtw", ["Rathwi Bareli"] = "bgd", ["Raute"] = "rau", ["Ravula"] = "yea", ["Rawa"] = "rwo", ["Rawang"] = "raw", ["Rawat"] = "jnl", ["Rawo"] = "rwa", ["Rayón Zoque"] = "zor", ["Razajerdi"] = "rat", ["Razihi"] = "rzh", ["Reang"] = "ria", ["Red Gelao"] = "gir", ["Reel"] = "atu", ["Rejang"] = "rej", ["Rejang Kayan"] = "ree", ["Reli"] = "rei", ["Rema"] = "bow", ["Rembarunga"] = "rmb", ["Rembong"] = "reb", ["Remo"] = "rem", ["Remontado Agta"] = "agv", ["Rempi"] = "rmp", ["Remun"] = "lkj", ["Rendille"] = "rel", ["Rengao"] = "ren", ["Rennellese"] = "mnv", ["Repanbitip"] = "rpn", ["Rer Bare"] = "rer", ["Rerau"] = "rea", ["Rerep"] = "pgk", ["Reshe"] = "res", ["Resígaro"] = "rgr", ["Retta"] = "ret", ["Reyesano"] = "rey", ["Rhine Franconian"] = "gmw-rfr", ["Riang"] = "ril", ["Riantana"] = "ran", ["Ribun"] = "rir", ["Rigwe"] = "iri", ["Rikbaktsa"] = "rkb", ["Rincón Zapotec"] = "zar", ["Ringgou"] = "rgu", ["Ririo"] = "rri", ["Ritarungo"] = "rit", ["Riung"] = "riu", ["Riverain Sango"] = "snj", ["Rogo"] = "rod", ["Rohingya"] = "rhg", ["Roma"] = "rmm", ["Romagnol"] = "rgn", ["Romam"] = "rmx", ["Romani"] = "rom", ["Romani Greek"] = "rge", ["Romanian"] = "ro", ["Romanian Sign Language"] = "rms", ["Romano-Serbian"] = "rsb", ["Romanova"] = "rmv", ["Romansch"] = "rm", ["Romblomanon"] = "rol", ["Rombo"] = "rof", ["Romkun"] = "rmk", ["Ron"] = "cla", ["Ronga"] = "rng", ["Rongga"] = "ror", ["Rongmei Naga"] = "nbu", ["Rongpo"] = "rnp", ["Ronji"] = "roe", ["Roon"] = "rnn", ["Roria"] = "rga", ["Roro"] = "rro", ["Rotokas"] = "roo", ["Rotuman"] = "rtm", ["Rouran"] = "xgn-rou", ["Roviana"] = "rug", ["Ruching Palaung"] = "pce", ["Rudbari"] = "rdb", ["Rufiji"] = "rui", ["Ruga"] = "ruh", ["Rukai"] = "dru", ["Rukiga"] = "cgg", ["Ruma"] = "ruz", ["Rumai Palaung"] = "rbb", ["Rumu"] = "klq", ["Runga"] = "rou", ["Rungtu"] = "rtc", ["Rungus"] = "drg", ["Rungwa"] = "rnw", ["Russenorsk"] = "crp-rsn", ["रूसी"] = "ru", ["Russian Sign Language"] = "rsl", ["Rusyn"] = "rue", ["Rutul"] = "rut", ["Ruuli"] = "ruc", ["Ruwund"] = "rnd", ["Rwa"] = "rwk", ["Rwanda-Rundi"] = "rw", ["Réunion Creole French"] = "rcf", ["S'gaw Karen"] = "ksw", ["Sa"] = "sax", ["Sa'a"] = "apb", ["Sa'ban"] = "snv", ["Sa'och"] = "scq", ["Saafi-Saafi"] = "sav", ["Saam"] = "raq", ["Saamia"] = "lsm", ["Saanich"] = "str", ["Saare"] = "uss", ["Saaroa"] = "sxr", ["Saba"] = "saa", ["Sabaean"] = "xsa", ["Sabah Bisaya"] = "bsy", ["Sabah Malay"] = "msi", ["Sabanê"] = "sae", ["Sabaot"] = "spy", ["Sabine"] = "sbv", ["Sabir"] = "pml", ["Sabu"] = "hvn", ["Sabüm"] = "sbo", ["Sacapulteco"] = "quv", ["Sadri"] = "sck", ["Saek"] = "skb", ["Saep"] = "spd", ["Safaitic"] = "sem-saf", ["Safaliba"] = "saf", ["Safeyoka"] = "apz", ["Safwa"] = "sbk", ["Sagala"] = "sbm", ["Sagalla"] = "tga", ["Sahaptin"] = "nai-spt", ["Saho"] = "ssy", ["Sahu"] = "saj", ["Saisiyat"] = "xsy", ["Sajau Basap"] = "sjb", ["Sakachep"] = "sch", ["Sakam"] = "skm", ["Sakao"] = "sku", ["Sakata"] = "skt", ["Sake"] = "sak", ["Sakirabiá"] = "skf", ["Sakizaya"] = "szy", ["Sala"] = "shq", ["Salampasu"] = "slx", ["Salar"] = "slr", ["Salas"] = "sgu", ["Salchuq"] = "slq", ["Saleman"] = "sau", ["Saliba (Colombia)"] = "slc", ["Saliba (New Guinea)"] = "sbe", ["Salinan"] = "sln", ["Salt-Yui"] = "sll", ["Saluan"] = "loe", ["Salumá"] = "slj", ["Salvadoran Lenca"] = "nai-sln", ["Salvadoran Sign Language"] = "esn", ["Sam"] = "snx", ["Sama"] = "smd", ["Samaritan Aramaic"] = "sam", ["Samaritan Hebrew"] = "smp", ["Samarokena"] = "tmj", ["Samatao"] = "ysd", ["Samba"] = "smx", ["Sambali"] = "xsb", ["Sambalpuri"] = "spv", ["Sambe"] = "xab", ["Samberigi"] = "ssx", ["Samburu"] = "saq", ["Samei"] = "smh", ["Samo"] = "smq", ["Samoan"] = "sm", ["Samoan Plantation Pidgin"] = "cpe-spp", ["Samogitian"] = "sgs", ["Samosa"] = "swm", ["Sampang"] = "rav", ["Samre"] = "sxm", ["Samtao"] = "stu", ["Samvedi"] = "smv", ["San Agustín Mixtepec Zapotec"] = "ztm", ["San Baltazar Loxicha Zapotec"] = "zpx", ["San Felipe Otlaltepec Popoloca"] = "pow", ["San Jerónimo Tecóatl Mazatec"] = "maa", ["San Juan Atzingo Popoloca"] = "poe", ["San Juan Colorado Mixtec"] = "mjc", ["San Juan Guelavía Zapotec"] = "zab", ["San Juan Quiahije Chatino"] = "ctp-san", ["San Juan Teita Mixtec"] = "xtj", ["San Luís Temalacayuca Popoloca"] = "pps", ["San Marcos Tlalcoyalco Popoloca"] = "pls", ["San Martín Itunyoso Triqui"] = "trq", ["San Miguel Creole French"] = "scf", ["San Miguel Piedras Mixtec"] = "xtp", ["San Miguel el Grande Mixtec"] = "mig", ["San Pablo Güilá Zapotec"] = "ztu", ["San Pedro Amuzgos Amuzgo"] = "azg", ["San Pedro Quiatoni Zapotec"] = "zpf", ["San Vicente Coatlán Zapotec"] = "zpt", ["Sanapaná"] = "spn", ["Sanaviron"] = "sai-san", ["Sandawe"] = "sad", ["Sanga (Congo)"] = "sng", ["Sanga (Nigeria)"] = "xsn", ["Sanggau"] = "scg", ["Sangil"] = "snl", ["Sangir"] = "sxn", ["Sangisari"] = "sgr", ["Sangkong"] = "sgk", ["Sanglechi"] = "sgy", ["Sango"] = "sg", ["Sangtam Naga"] = "nsa", ["Sangu (Gabon)"] = "snq", ["Sangu (Tanzania)"] = "sbp", ["Sani"] = "ysn", ["Sanie"] = "ysy", ["Saniyo-Hiyewe"] = "sny", ["Sankaran Maninka"] = "msc", ["Sansi"] = "ssi", ["संस्कृत"] = "sa", ["Santa Catarina Albarradas Zapotec"] = "ztn", ["Santa Inés Ahuatempan Popoloca"] = "pca", ["Santa Inés Yatzechi Zapotec"] = "zpn", ["Santa Lucía Monteverde Mixtec"] = "mdv", ["Santa María La Alta Nahuatl"] = "nhz", ["Santa María Quiegolani Zapotec"] = "zpi", ["Santa María Zacatepec Mixtec"] = "mza", ["Santa Teresa Cora"] = "cok", ["Santali"] = "sat", ["Santiago Xanica Zapotec"] = "zpr", ["Santo Domingo Albarradas Zapotec"] = "zas", ["Sanumá"] = "xsu", ["Sapa"] = "tys", ["Saparua"] = "spr", ["Sapará"] = "sai-sap", ["Sapo"] = "krn", ["Saponi"] = "spi", ["Saposa"] = "sps", ["Sapuan"] = "spu", ["Sapé"] = "spc", ["Sar"] = "mwm", ["Sara"] = "sre", ["Sara Kaba"] = "sbz", ["Sara Kaba Deme"] = "kwg", ["Sara Kaba Náà"] = "kwv", ["Saraiki"] = "skr", ["Saramaccan"] = "srm", ["Sarangani Blaan"] = "bps", ["Sarangani Manobo"] = "mbs", ["Sarasira"] = "zsa", ["Saraveca"] = "sar", ["Sarcee"] = "srs", ["Sardinian"] = "sc", ["Sarikoli"] = "srh", ["Sarli"] = "sdf", ["Sartang"] = "onp", ["Sarua"] = "swy", ["Sarudu"] = "sdu", ["Saruga"] = "sra", ["Sasak"] = "sas", ["Sasaru"] = "sxs", ["Sassarese"] = "sdc", ["Satawalese"] = "stw", ["Saterland Frisian"] = "stq", ["Sateré-Mawé"] = "mav", ["Sathmar Swabian"] = "gmw-stm", ["Saudi Arabian Sign Language"] = "sdl", ["Sauraseni Apabhramsa"] = "inc-sap", ["Sauraseni Prakrit"] = "psu", ["Saurashtra"] = "saz", ["Sauri"] = "srt", ["Sause"] = "sao", ["Sausi"] = "ssj", ["Savi"] = "sdg", ["Savosavo"] = "svs", ["Sawai"] = "szw", ["Saweru"] = "swr", ["Sawi"] = "saw", ["Sawila"] = "swt", ["Sawriya Paharia"] = "mjt", ["Saxwe Gbe"] = "sxw", ["Saya"] = "say", ["Sayula Popoluca"] = "pos", ["Scanian"] = "gmq-scy", ["Scots"] = "sco", ["Scottish Gaelic"] = "gd", ["Seba"] = "kdg", ["Sebat Bet Gurage"] = "sgw", ["Seberuang"] = "sbx", ["Sebop"] = "sib", ["Sebuyau"] = "snb", ["Sechelt"] = "sec", ["Sechura"] = "sai-sec", ["Secoya"] = "sey", ["Sedang"] = "sed", ["Sedoa"] = "tvw", ["Seenku"] = "sos", ["Segai"] = "sge", ["Segeju"] = "seg", ["Seget"] = "sbg", ["Sehwi"] = "sfw", ["Seim"] = "sim", ["Seimat"] = "ssg", ["Seit-Kaitetu"] = "hik", ["Sekani"] = "sek", ["Sekapan"] = "skp", ["Sekar"] = "skz", ["Seke"] = "skj", ["Sekele"] = "vaj", ["Seki"] = "syi", ["Seko Padang"] = "skx", ["Seko Tengah"] = "sko", ["Sekpele"] = "lip", ["Selangor Sign Language"] = "kgi", ["Selaru"] = "slu", ["Selayar"] = "sly", ["Selee"] = "snw", ["Selepet"] = "spl", ["Selk'nam"] = "ona", ["Selonian"] = "sxl", ["Selungai Murut"] = "slg", ["Seluwasan"] = "sws", ["Sema"] = "nsm", ["Semai"] = "sea", ["Semandang"] = "sdm", ["Semaq Beri"] = "szc", ["Sembakung Murut"] = "sbr", ["Semelai"] = "sza", ["Semimi"] = "etz", ["Semnam"] = "ssm", ["Semnani"] = "smy", ["Sempan"] = "xse", ["Sena"] = "seh", ["Senara Sénoufo"] = "seq", ["Senaya"] = "syn", ["Sene"] = "sej", ["Seneca"] = "see", ["Sengele"] = "szg", ["Senggi"] = "snu", ["Sengo"] = "spk", ["Sengseng"] = "ssz", ["Senhaja De Srair"] = "sjs", ["Sensi"] = "sni", ["Sentani"] = "set", ["Senthang Chin"] = "sez", ["Sentinelese"] = "std", ["Sepa (Indonesia)"] = "spb", ["Sepa (New Guinea)"] = "spe", ["Sepen"] = "spm", ["Sepik Iwam"] = "iws", ["Sepik Mari"] = "mbx", ["Sera"] = "sry", ["Serbo-Croatian"] = "sh", ["Sere"] = "swf", ["Serer"] = "srr", ["Seri"] = "sei", ["Serili"] = "sve", ["Seroa"] = "kqu", ["Serrano"] = "ser", ["Seru"] = "szd", ["Serua"] = "srw", ["Serudung Murut"] = "srk", ["Serui-Laut"] = "seu", ["Seta"] = "stf", ["Setaman"] = "stm", ["Seti"] = "sbi", ["Severn Ojibwa"] = "ojs", ["Sewa Bay"] = "sew", ["Seychellois Creole"] = "crs", ["Seze"] = "sze", ["Sha"] = "scw", ["Shabak"] = "sdb", ["Shabo"] = "sbf", ["Shahmirzadi"] = "srz", ["Shahrudi"] = "shm", ["Shall-Zwall"] = "sha", ["Shama-Sambuga"] = "sqa", ["Shamang"] = "xsh", ["Shambala"] = "ksb", ["Shan"] = "shn", ["Shanenawa"] = "swo", ["Shanga"] = "sho", ["Shangzhai"] = "jih", ["Shaozhou Tuhua"] = "zhx-sht", ["Sharanahua"] = "mcd", ["Shark Bay"] = "ssv", ["Sharwa"] = "swq", ["Shasta"] = "sht", ["Shatt"] = "shj", ["Shau"] = "sqh", ["Shawnee"] = "sjw", ["She"] = "shx", ["Shebayo"] = "awd-she", ["Shehri"] = "shv", ["Shekkacho"] = "moy", ["Sheko"] = "she", ["Shelta"] = "sth", ["Shendu"] = "shl", ["Sheni"] = "scv", ["Sherbro"] = "bun", ["Sherdukpen"] = "sdp", ["Sherpa"] = "xsr", ["Sheshi Kham"] = "kip", ["Shi"] = "shr", ["Shihhi Arabic"] = "ssh", ["Shiki"] = "gua", ["Shilluk"] = "shk", ["Shina"] = "scl", ["Shinasha"] = "bwo", ["Shipibo-Conibo"] = "shp", ["Shixing"] = "sxg", ["Sholaga"] = "sle", ["Shom Peng"] = "sii", ["Shona"] = "sn", ["Shoo-Minda-Nye"] = "bcv", ["Shor"] = "cjs", ["Shoshone"] = "shh", ["Shua"] = "shg", ["Shuar"] = "jiv", ["Shuba"] = "cbq", ["Shughni"] = "sgh", ["Shumashti"] = "sts", ["Shumcho"] = "scu", ["Shuswap"] = "shs", ["Shuwa-Zamani"] = "ksa", ["Shwai"] = "shw", ["Shwe Palaung"] = "pll", ["Sialum"] = "slw", ["Siamou"] = "sif", ["Sian"] = "spg", ["Siane"] = "snp", ["Siang"] = "sya", ["Siar-Lak"] = "sjr", ["Sibe"] = "nco", ["Siberian Tatar"] = "sty", ["Sibu Melanau"] = "sdx", ["Sicanian"] = "sxc", ["Sicel"] = "scx", ["Sichuan Yi"] = "ii", ["Sicilian"] = "scn", ["Siculo-Arabic"] = "sqr", ["Sidamo"] = "sid", ["Sidetic"] = "xsd", ["Sie"] = "erg", ["Sierra Leone Sign Language"] = "sgx", ["Sierra Negra Nahuatl"] = "nsu", ["Sierra de Juárez Zapotec"] = "zaa", ["Sighu"] = "sxe", ["Sihan"] = "snr", ["Sika"] = "ski", ["Sikaiana"] = "sky", ["Sikaritai"] = "tty", ["Sikiana"] = "sik", ["Sikkimese"] = "sip", ["Sikule"] = "skh", ["Sila"] = "slt", ["Silacayoapan Mixtec"] = "mks", ["Sileibi"] = "sbq", ["Silesian"] = "szl", ["Silimo"] = "wul", ["Siliput"] = "mkc", ["Silopi"] = "xsp", ["Silt'e"] = "stv", ["Simaa"] = "sie", ["Simalungun Batak"] = "bts", ["Simba"] = "sbw", ["Simbali"] = "smg", ["Simbari"] = "smb", ["Simbo"] = "sbb", ["Simeku"] = "smz", ["Simeulue"] = "smr", ["Simte"] = "smt", ["Sinacantán"] = "nai-sin", ["Sinagen"] = "siu", ["Sinasina"] = "sst", ["Sinaugoro"] = "snc", ["Sindarin"] = "sjn", ["Sindhi"] = "sd", ["Sindhi Bhil"] = "sbn", ["Sindihui Mixtec"] = "xts", ["Singa"] = "sgm", ["Singapore Sign Language"] = "sls", ["Singpho"] = "sgp", ["Sinhalese"] = "si", ["Sinicahua Mixtec"] = "xti", ["Sininkere"] = "skq", ["Sinte Romani"] = "rmo", ["Sinyar"] = "sys", ["Sinúfana"] = "sai-sin", ["Sio"] = "xsi", ["Siona"] = "snn", ["Sipakapense"] = "qum", ["Sira"] = "swj", ["Siraya"] = "fos", ["Sirenik"] = "ysr", ["Siri"] = "sir", ["Siriano"] = "sri", ["Sirionó"] = "srq", ["Sirmauri"] = "srx", ["Siroi"] = "ssd", ["Sissala"] = "sld", ["Sissano"] = "sso", ["Situ"] = "sit-sit", ["Siuslaw"] = "sis", ["Sivandi"] = "siy", ["Siwai"] = "siw", ["Siwi"] = "siz", ["Siwu"] = "akp", ["Siyin Chin"] = "csy", ["Skagit"] = "ska", ["Skalvian"] = "svx", ["Ske"] = "ske", ["Skepi Creole Dutch"] = "skw", ["Skolt Sami"] = "sms", ["Skou"] = "skv", ["Slavey"] = "den", ["Slavomolisano"] = "svm", ["Slovak"] = "sk", ["Slovakian Sign Language"] = "svk", ["Slovene"] = "sl", ["Slovincian"] = "zlw-slv", ["Small Flowery Miao"] = "sfm", ["Smärky Kanum"] = "kxq", ["Snohomish"] = "sno", ["So'a"] = "ssq", ["Sobei"] = "sob", ["Sochiapam Chinantec"] = "cso", ["Soga"] = "xog", ["Sogdian"] = "sog", ["Sok"] = "skk", ["Sokna"] = "swn", ["Soko"] = "soc", ["Sokoro"] = "sok", ["Solano"] = "xso", ["Soli"] = "sby", ["Solon"] = "tuw-sol", ["Solong"] = "aaw", ["Solos"] = "sol", ["Som"] = "smc", ["Somali"] = "so", ["Somba-Siawari"] = "bmu", ["Somra"] = "ntx", ["Somrai"] = "sor", ["Somray"] = "smu", ["Somyev"] = "kgt", ["Sonaga"] = "ysg", ["Sonde"] = "shc", ["Songe"] = "sop", ["Songlai Chin"] = "csj", ["Songomeno"] = "soe", ["Songoora"] = "sod", ["Sonha"] = "soi", ["Sonia"] = "siq", ["Soninke"] = "snk", ["Sonsorolese"] = "sov", ["Soo"] = "teu", ["Sop"] = "urw", ["Soqotri"] = "sqt", ["Sora"] = "srb", ["Sori-Harengan"] = "sbh", ["Sorkhei"] = "sqo", ["Sorothaptic"] = "sxo", ["Sorsogon Ayta"] = "ays", ["Sos Kundi"] = "sdk", ["Sota Kanum"] = "krz", ["Sotho"] = "st", ["Sou"] = "sqq", ["South African Sign Language"] = "sfs", ["South Awyu"] = "aws", ["South Boma"] = "bnt-sbo", ["South Central Banda"] = "lnl", ["South Central Dinka"] = "dib", ["South Efate"] = "erk", ["South Fali"] = "fal", ["South Giziga"] = "giz", ["South Lembata"] = "lmf", ["South Levantine Arabic"] = "ajp", ["South Marquesan"] = "mqm", ["South Muyu"] = "kts", ["South Nuaulu"] = "nxl", ["South Picene"] = "spx", ["South Slavey"] = "xsl", ["South Tairora"] = "omw", ["South Ucayali Ashéninka"] = "cpy", ["South Watut"] = "mcy", ["Southeast Ambrym"] = "tvk", ["Southeast Babar"] = "vbb", ["Southeast Ijo"] = "ijs", ["Southeast Pashayi"] = "psi", ["Southeast Tasmanian"] = "xpf", ["Southeastern Dinka"] = "dks", ["Southeastern Ixtlán Zapotec"] = "zpd", ["Southeastern Kolami"] = "nit", ["Southeastern Nochixtlán Mixtec"] = "mxy", ["Southeastern Pomo"] = "pom", ["Southeastern Puebla Nahuatl"] = "npl", ["Southeastern Tarahumara"] = "tcu", ["Southeastern Tepehuan"] = "stp", ["Southern Alta"] = "agy", ["Southern Altai"] = "alt", ["Southern Amami-Oshima"] = "ams", ["Southern Bai"] = "bfs", ["Southern Birifor"] = "biv", ["Southern Bobo"] = "bwq", ["Southern Bontoc"] = "obk", ["Southern Carrier"] = "caf", ["Southern Catanduanes Bicolano"] = "bln", ["Southern Dagaare"] = "dga", ["Southern East Cree"] = "crj", ["Southern Ghale"] = "ghe", ["Southern Grebo"] = "grj", ["Southern Guiyang Hmong"] = "hmy", ["Southern Haida"] = "hax", ["Southern Hindko"] = "hnd", ["Southern Kalapuya"] = "sxk", ["Southern Kalinga"] = "ksc", ["Southern Kam"] = "kmc", ["Southern Kissi"] = "kss", ["Southern Kiwai"] = "kjd", ["Southern Kurdish"] = "sdh", ["Southern Lolopo"] = "ysp", ["Southern Lorung"] = "lrr", ["Southern Luri"] = "luz", ["Southern Ma'di"] = "snm", ["Southern Mashan Hmong"] = "hma", ["Southern Mnong"] = "mnn", ["Southern Muji"] = "ymc", ["Southern Ndebele"] = "nr", ["Southern Ngbandi"] = "nbw", ["Southern Nicobarese"] = "nik", ["Southern Nisu"] = "nsd", ["Southern Nuni"] = "nnw", ["Southern Ohlone"] = "css", ["Southern One"] = "osu", ["Southern Pame"] = "pmz", ["Southern Pomo"] = "peq", ["Southern Puebla Mixtec"] = "mit", ["Southern Puget Sound Salish"] = "slh", ["Southern Pumi"] = "pmj", ["Southern Qiandong Miao"] = "hms", ["Southern Qiang"] = "qxs", ["Southern Rengma Naga"] = "nre", ["Southern Rincon Zapotec"] = "zsr", ["Southern Roglai"] = "rgs", ["Southern Sama"] = "ssb", ["Southern Sami"] = "sma", ["Southern Samo"] = "sbd", ["Southern Selkup"] = "sel-sou", ["Southern Sierra Miwok"] = "skd", ["Southern Thai"] = "sou", ["Southern Tidong"] = "itd", ["Southern Tiwa"] = "tix", ["Southern Toussian"] = "wib", ["Southern Tujia"] = "tjs", ["Southern Tutchone"] = "tce", ["Southern Valley Yokuts"] = "nai-svy", ["Southern Yukaghir"] = "yux", ["Southwest Gbaya"] = "gso", ["Southwest Palawano"] = "plv", ["Southwest Pashayi"] = "psh", ["Southwest Tanna"] = "nwi", ["Southwestern Bontoc"] = "vbk", ["Southwestern Dinka"] = "dik", ["Southwestern Fars"] = "fay", ["Southwestern Guiyang Hmong"] = "hmg", ["Southwestern Huishui Hmong"] = "hmh", ["Southwestern Nisu"] = "nsv", ["Southwestern Tamang"] = "tsf", ["Southwestern Tarahumara"] = "twr", ["Southwestern Tepehuan"] = "tla", ["Southwestern Tlaxiaco Mixtec"] = "meh", ["Sowa"] = "sww", ["Sowanda"] = "sow", ["Soyaltepec Mazatec"] = "vmp", ["Soyaltepec Mixtec"] = "vmq", ["Spanish"] = "es", ["Spanish Sign Language"] = "ssp", ["Spiti Bhoti"] = "spt", ["Spokane"] = "spo", ["Squamish"] = "squ", ["Sranan Tongo"] = "srn", ["Sri Lankan Creole Malay"] = "sci", ["Sri Lankan Sign Language"] = "sqs", ["Stod Bhoti"] = "sbu", ["Stoney"] = "sto", ["Suabo"] = "szp", ["Suarmin"] = "seo", ["Suau"] = "swp", ["Suba"] = "sxb", ["Suba-Simbiti"] = "ssc", ["Subi"] = "xsj", ["Subiya"] = "sbs", ["Subtiaba"] = "sut", ["Sudanese Arabic"] = "apd", ["Sudest"] = "tgo", ["Sudovian"] = "xsv", ["Suena"] = "sue", ["Suga"] = "sgi", ["Suganga"] = "sug", ["Sugut Dusun"] = "kzs", ["Sui"] = "swi", ["Suki"] = "sui", ["Suku"] = "sub", ["Sukuma"] = "suk", ["Sukur"] = "syk", ["Sukurum"] = "zsu", ["Sula"] = "szn", ["Sulka"] = "sua", ["Sulod"] = "srg", ["Sulung"] = "suv", ["Suma"] = "sqm", ["Sumariup"] = "siv", ["Sumau"] = "six", ["Sumbawa"] = "smw", ["Sumbwa"] = "suw", ["Sumerian"] = "sux", ["Sumtu Chin"] = "csv", ["Sunam"] = "ssk", ["Sundanese"] = "su", ["Sunum"] = "ymn", ["Sunwar"] = "suz", ["Suoy"] = "syo", ["Supyire"] = "spp", ["Sur"] = "tdl", ["Surbakhal"] = "sbj", ["Suri"] = "suq", ["Surigaonon"] = "sgd", ["Surjapuri"] = "sjp", ["Sursurunga"] = "sgz", ["Suruahá"] = "swx", ["Surubu"] = "sde", ["Suruí"] = "sru", ["Suruí Do Pará"] = "mdz", ["Susquehannock"] = "sqn", ["Susu"] = "sus", ["Susuami"] = "ssu", ["Suundi"] = "sdj", ["Suwawa"] = "swu", ["Suyá"] = "suy", ["Svan"] = "sva", ["Swabian"] = "swg", ["Swahili"] = "sw", ["Swampy Cree"] = "csw", ["Swazi"] = "ss", ["Swedish"] = "sv", ["Swedish Sign Language"] = "swl", ["Swiss-French Sign Language"] = "ssr", ["Swiss-German Sign Language"] = "sgg", ["Swiss-Italian Sign Language"] = "slf", ["Swo"] = "sox", ["Syenara Senoufo"] = "shz", ["Sylheti"] = "syl", ["Sácata"] = "sai-sac", ["São Paulo Kaingáng"] = "zkp", ["Sãotomense"] = "cri", ["Sìcìté Sénoufo"] = "sep", ["Sô"] = "sss", ["T'en"] = "tct", ["Taabwa"] = "tap", ["Tabaa Zapotec"] = "zat", ["Tabancale"] = "sai-tab", ["Tabaru"] = "tby", ["Tabasaran"] = "tab", ["Tabasco Chontal"] = "chf", ["Tabasco Nahuatl"] = "nhc", ["Tabasco Zoque"] = "zoq", ["Tabla"] = "tnm", ["Tabo"] = "knv", ["Tabriak"] = "tzx", ["Tacahua Mixtec"] = "xtt", ["Tacana"] = "tna", ["Tachawit"] = "shy", ["Tadaksahak"] = "dsq", ["Tadyawan"] = "tdy", ["Tae'"] = "rob", ["Tafi"] = "tcd", ["Tafreshi"] = "xme-taf", ["Tagabawa"] = "bgs", ["Tagakaulu Kalagan"] = "klg", ["Tagal Murut"] = "mvv", ["Tagalog"] = "tl", ["Tagbanwa"] = "tbw", ["Tagbu"] = "tbm", ["Tagdal"] = "tda", ["Tagish"] = "tgx", ["Tagoi"] = "tag", ["Tagwana Senoufo"] = "tgw", ["Tahitian"] = "ty", ["Tahltan"] = "tht", ["Tai"] = "taw", ["Tai Daeng"] = "tyr", ["Tai Dam"] = "blt", ["Tai Do"] = "tyj", ["Tai Dón"] = "twh", ["Tai Hang Tong"] = "thc", ["Tai Hongjin"] = "tiz", ["Tai Laing"] = "tjl", ["Tai Loi"] = "tlq", ["Tai Long"] = "thi", ["Tai Nüa"] = "tdd", ["Tai Pao"] = "tpo", ["Tai Thanh"] = "tmm", ["Tai Ya"] = "cuu", ["Taiap"] = "gpn", ["Taikat"] = "aos", ["Taimyr Pidgin Russian"] = "crp-tpr", ["Tainae"] = "ago", ["Tairuma"] = "uar", ["Taishanese"] = "zhx-tai", ["Taita"] = "dav", ["Taivoan"] = "tvx", ["Taiwan Sign Language"] = "tss", ["Taje"] = "pee", ["Tajik"] = "tg", ["Tajiki Arabic"] = "abh", ["Tajio"] = "tdj", ["Tajuasohn"] = "tja", ["Takelma"] = "tkm", ["Takia"] = "tbc", ["Takka Apabhramsa"] = "inc-tak", ["Takua"] = "tkz", ["Takuu"] = "nho", ["Takwane"] = "tke", ["Tal"] = "tal", ["Tala"] = "tak", ["Talaud"] = "tld", ["Taliabu"] = "tlv", ["Talieng"] = "tdf", ["Talinga-Bwisi"] = "tlj", ["Talise"] = "tlr", ["Tallán"] = "sai-tal", ["Talodi"] = "tlo", ["Taloki"] = "tlk", ["Talondo'"] = "tln", ["Talossan"] = "tzl", ["Talu"] = "yta", ["Talysh"] = "tly", ["Tama (Chad)"] = "tma", ["Tama (Colombia)"] = "ten", ["Tamagario"] = "tcg", ["Tamambo"] = "mla", ["Taman (Indonesia)"] = "tmn", ["Taman (Myanmar)"] = "tcl", ["Tamanaku"] = "tmz", ["Tamazola Mixtec"] = "vmx", ["Tambas"] = "tdk", ["Tambora"] = "xxt", ["Tambotalo"] = "tls", ["Tambunan Dusun"] = "kzt", ["Tami"] = "tmy", ["Tamil"] = "ta", ["Tamki"] = "tax", ["Tamnim Citak"] = "tml", ["Tampias Lobu"] = "low", ["Tampuan"] = "tpu", ["Tampulma"] = "tpm", ["Tanacross"] = "tcb", ["Tanahmerah"] = "tcm", ["Tanapag"] = "tpv", ["Tandaganon"] = "tgn", ["Tandia"] = "tni", ["Tanema"] = "tnx", ["Tangale"] = "tan", ["Tangam"] = "sit-tgm", ["Tangchangya"] = "tnv", ["Tanggu"] = "tgu", ["Tangkhul Naga"] = "nmf", ["Tangko"] = "tkx", ["Tanglang"] = "ytl", ["Tangoa"] = "tgp", ["Tangsa"] = "nst", ["Tanguat"] = "tbs", ["Tangut"] = "txg", ["Tangwang"] = "crp-tnw", ["Tanimbili"] = "tbe", ["Tanimuca-Retuarã"] = "tnc", ["Tanjijili"] = "uji", ["Tanudan Kalinga"] = "kml", ["Tanzanian Sign Language"] = "tza", ["Taos"] = "twf", ["Tapachultec"] = "nai-tap", ["Taparita"] = "sai-tpr", ["Tapayuna"] = "sai-tap", ["Tapeba"] = "tbb", ["Tapei"] = "afp", ["Tapieté"] = "tpj", ["Tapirapé"] = "taf", ["Tar Gula"] = "kcm", ["Tara Baka"] = "bdh", ["Tarairiú"] = "sai-trr", ["Tarantino"] = "roa-tar", ["Tarao"] = "tro", ["Taraon"] = "mhu", ["Tareng"] = "tgr", ["Tariana"] = "tae", ["Tarifit"] = "rif", ["Tarjumo"] = "txj", ["Tarok"] = "yer", ["Taroko"] = "trv", ["Tarpia"] = "tpf", ["Tartessian"] = "txr", ["Taruma"] = "tdm", ["Tasawaq"] = "twq", ["Tashelhit"] = "shi", ["Tasmanian"] = "xtz", ["Tasmate"] = "tmt", ["Tat"] = "ttt", ["Tataltepec Chatino"] = "cta", ["Tatana"] = "txx", ["Tatar"] = "tt", ["Tataviam"] = "azc-tat", ["Tatuyo"] = "tav", ["Tauade"] = "ttd", ["Taulil"] = "tuh", ["Taungyo"] = "tco", ["Taupota"] = "tpa", ["Tause"] = "tad", ["Taushiro"] = "trr", ["Tausug"] = "tsg", ["Tauya"] = "tya", ["Taveta"] = "tvs", ["Tavoyan"] = "tvn", ["Tavringer Romani"] = "rmu", ["Tawala"] = "tbo", ["Tawandê"] = "xtw", ["Tawang Monpa"] = "twm", ["Tawasa"] = "nai-taw", ["Taworta"] = "tbp", ["Tawoyan"] = "twy", ["Tawr Chin"] = "tcp", ["Tay Khang"] = "tnu", ["Tayabas Ayta"] = "ayy", ["Taymanitic"] = "sem-tay", ["Tayo"] = "cks", ["Taíno"] = "tnq", ["Tboli"] = "tbl", ["Tchitchege"] = "tck", ["Tchumbuli"] = "bqa", ["Te'un"] = "tve", ["Teanu"] = "tkw", ["Tebul Sign Language"] = "tsy", ["Tebul Ure Dogon"] = "dtu", ["Tecpatlán Totonac"] = "tcw", ["Tedaga"] = "tuq", ["Tedim Chin"] = "ctd", ["Tee"] = "tkq", ["Tefaro"] = "tfo", ["Tegali"] = "ras", ["Tehit"] = "kps", ["Tehuelche"] = "teh", ["Teiwa"] = "twe", ["Tejalapan Zapotec"] = "ztt", ["Teke-Fuumu"] = "ifm", ["Teke-Kukuya"] = "kkw", ["Teke-Laali"] = "lli", ["Teke-Tege"] = "teg", ["Teke-Tsaayi"] = "tyi", ["Teke-Tyee"] = "tyx", ["Tektiteko"] = "ttc", ["Tela-Masbuar"] = "tvm", ["Telefol"] = "tlf", ["Telugu"] = "te", ["Teluti"] = "tlt", ["Tem"] = "kdh", ["Temascaltepec Nahuatl"] = "nhv", ["Tembé"] = "tqb", ["Teme"] = "tdo", ["Temein"] = "teq", ["Temi"] = "soz", ["Temiar"] = "tea", ["Temne"] = "tem", ["Temoaya Otomi"] = "ott", ["Temoq"] = "tmo", ["Tempasuk Dusun"] = "tdu", ["Ten'edn"] = "tnz", ["Tenango Otomi"] = "otn", ["Tene Kan Dogon"] = "dtk", ["Tenggarong Kutai Malay"] = "vkt", ["Tengger"] = "tes", ["Tenharim"] = "pah", ["Tenino"] = "tqn", ["Tenis"] = "tns", ["Tennet"] = "tex", ["Teochew"] = "zhx-teo", ["Teojomulco Chatino"] = "omq-teo", ["Teop"] = "tio", ["Teor"] = "tev", ["Tepecano"] = "tep", ["Tepetotutla Chinantec"] = "cnt", ["Tepeuxila Cuicatec"] = "cux", ["Tepinapa Chinantec"] = "cte", ["Tepo Krumen"] = "ted", ["Teposcolula Mixtec"] = "omq-tel", ["Tequistlatec"] = "nai-teq", ["Ter Sami"] = "sjt", ["Tera"] = "ttr", ["Terebu"] = "trb", ["Terei"] = "buo", ["Tereno"] = "ter", ["Teressa"] = "tef", ["Tereweng"] = "twg", ["Teribe"] = "tfr", ["Terik"] = "tec", ["Termanu"] = "twu", ["Ternate"] = "tft", ["Ternateño"] = "tmg", ["Tese"] = "keg", ["Teshenawa"] = "twc", ["Tetela"] = "tll", ["Tetelcingo Nahuatl"] = "nhg", ["Tetete"] = "teb", ["Tetserret"] = "tez", ["Tetum"] = "tet", ["Tetun Dili"] = "tdt", ["Teushen"] = "sai-teu", ["Teutila Cuicatec"] = "cut", ["Tewa"] = "tew", ["Texcatepec Otomi"] = "otx", ["Texistepec Popoluca"] = "poq", ["Texmelucan Zapotec"] = "zpz", ["Tezoatlán Mixtec"] = "mxb", ["Tha"] = "thy", ["Thachanadan"] = "thn", ["Thado Chin"] = "tcz", ["Thai"] = "th", ["Thai Mon"] = "mnw-tha", ["Thai Sign Language"] = "tsq", ["Thai Song"] = "soa", ["Thaiphum Chin"] = "cth", ["Thakali"] = "ths", ["Thamudic"] = "sem-tha", ["Thangal Naga"] = "nki", ["Thangmi"] = "thf", ["Thao"] = "ssf", ["Tharaka"] = "thk", ["Tharrgari"] = "dhr", ["Thavung"] = "thm", ["Thawa"] = "xtv", ["Tho"] = "tou", ["Thompson"] = "thp", ["Thopho"] = "ytp", ["Thracian"] = "txh", ["Thu Lao"] = "tyl", ["Thulung"] = "tdh", ["Thurawal"] = "tbh", ["Thuri"] = "thu", ["Tiagbamrin Aizi"] = "ahi", ["Tiale"] = "mnl", ["Tiang"] = "tbj", ["Tibea"] = "ngy", ["Tibetan"] = "bo", ["Ticuna"] = "tca", ["Tidaá Mixtec"] = "mtx", ["Tidore"] = "tvo", ["Tiemacèwè Bozo"] = "boo", ["Tiene"] = "tii", ["Tifal"] = "tif", ["Tigak"] = "tgc", ["Tigon Mbembe"] = "nza", ["Tigre"] = "tig", ["Tigrinya"] = "ti", ["Tii"] = "txq", ["Tijaltepec Mixtec"] = "xtl", ["Tikar"] = "tik", ["Tikopia"] = "tkp", ["Tilapa Otomi"] = "otl", ["Tillamook"] = "til", ["Tilquiapan Zapotec"] = "zts", ["Tilung"] = "tij", ["Tima"] = "tms", ["Timbe"] = "tim", ["Timor Pidgin"] = "tvy", ["Timote"] = "sai-tim", ["Timucua"] = "tjm", ["Timugon Murut"] = "tih", ["Tinani"] = "lbf", ["Tindi"] = "tin", ["Tingui-Boto"] = "tgv", ["Tinigua"] = "tit", ["Tinoc Kallahan"] = "tne", ["Tinputz"] = "tpz", ["Tipai"] = "nai-tip", ["Tippera"] = "tpe", ["Tira"] = "tic", ["Tirahi"] = "tra", ["Tiranige Diga Dogon"] = "tde", ["Tircul"] = "pyx", ["Tiri"] = "cir", ["Tiruray"] = "tiy", ["Tita"] = "tdq", ["Titan"] = "ttv", ["Tiv"] = "tiv", ["Tiwa"] = "lax", ["Tiwi"] = "tiw", ["Tiéfo"] = "tiq", ["Tiéyaxo Bozo"] = "boz", ["Tjurruru"] = "tju", ["Tlachichilco Tepehua"] = "tpt", ["Tlacoapa Me'phaa"] = "tpl", ["Tlacoatzintepec Chinantec"] = "ctl", ["Tlacolulita Zapotec"] = "zpk", ["Tlahuica"] = "ocu", ["Tlahuitoltepec Mixe"] = "mxp", ["Tlamacazapa Nahuatl"] = "nuz", ["Tlazoyaltepec Mixtec"] = "mqh", ["Tlingit"] = "tli", ["To"] = "toz", ["To'abaita"] = "mlu", ["Toaripi"] = "tqo", ["Toba"] = "tob", ["Toba Batak"] = "bbc", ["Toba-Maskoy"] = "tmf", ["Tobagonian Creole English"] = "tgh", ["Tobanga"] = "tng", ["Tobati"] = "tti", ["Tobelo"] = "tlb", ["Tobian"] = "tox", ["Tobilung"] = "tgb", ["Tobo"] = "tbv", ["Tocantins Asurini"] = "asu", ["Tocharian A"] = "xto", ["Tocharian B"] = "txb", ["Tocho"] = "taz", ["Toda"] = "tcx", ["Todrah"] = "tdr", ["Tofa"] = "kim", ["Tofanma"] = "tlg", ["Tofin Gbe"] = "tfi", ["Togbo-Vara Banda"] = "tor", ["Togoyo"] = "tgy", ["Tojolabal"] = "toj", ["Tok Pisin"] = "tpi", ["Toka-Leya"] = "dov", ["Tokano"] = "zuh", ["Tokelauan"] = "tkl", ["Toki Pona"] = "tok", ["Toku-No-Shima"] = "tkn", ["Tol"] = "jic", ["Tolai"] = "ksd", ["Tolaki"] = "lbw", ["Tolomako"] = "tlm", ["Tolowa"] = "tol", ["Toma"] = "tod", ["Tomadino"] = "tdi", ["Tombelala"] = "ttp", ["Tombonuo"] = "txa", ["Tombulu"] = "tom", ["Tomini"] = "txm", ["Tommeginne"] = "xpv", ["Tommo So"] = "dto", ["Tomo Kan Dogon"] = "dtm", ["Tomoip"] = "tqp", ["Tondano"] = "tdn", ["Tonga (Malawi)"] = "tog", ["Tonga (Mozambique)"] = "toh", ["Tonga (Zambia)"] = "toi", ["Tongan"] = "to", ["Tongwe"] = "tny", ["Tonjon"] = "tjn", ["Tonkawa"] = "tqw", ["Tonsawang"] = "tnw", ["Tonsea"] = "txs", ["Tontemboan"] = "tnt", ["Toogee"] = "xpx", ["Tooro"] = "ttj", ["Topoiyo"] = "toy", ["Toposa"] = "toq", ["Toraja-Sa'dan"] = "sda", ["Toram"] = "trj", ["Torau"] = "ttu", ["Toro"] = "tdv", ["Toro So Dogon"] = "dts", ["Toro Tegu Dogon"] = "dtt", ["Toromono"] = "tno", ["Torona"] = "tqr", ["Torres Strait Creole"] = "tcs", ["Torricelli"] = "tei", ["Torricelli Yau"] = "yyu", ["Torwali"] = "trw", ["Torá"] = "trz", ["Tosu"] = "sit-tos", ["Totela"] = "ttl", ["Toto"] = "txo", ["Totoli"] = "txe", ["Totomachapan Zapotec"] = "zph", ["Totontepec Mixe"] = "mto", ["Totoro"] = "ttk", ["Touo"] = "tqu", ["Toura"] = "neb", ["Tourangeau"] = "roa-tou", ["Towei"] = "ttn", ["Translingual"] = "mul", ["Transylvanian Saxon"] = "gmw-tsx", ["Traveller Danish"] = "rmd", ["Traveller Norwegian"] = "rmg", ["Traveller Scottish"] = "trl", ["Tregami"] = "trm", ["Tremembé"] = "tme", ["Trieng"] = "stg", ["Trimuris"] = "tip", ["Tring"] = "tgq", ["Tringgus"] = "trx", ["Trinidad and Tobago Sign Language"] = "lst", ["Trinidadian Creole English"] = "trf", ["Trinitario"] = "trn", ["Trió"] = "tri", ["Truká"] = "tka", ["Trumai"] = "tpy", ["Ts'ün-Lao"] = "tsl", ["Tsaangi"] = "tsa", ["Tsafiki"] = "cof", ["Tsakhur"] = "tkr", ["Tsakonian"] = "tsd", ["Tsakwambo"] = "kvz", ["Tsamai"] = "tsb", ["Tsat"] = "huq", ["Tsetsaut"] = "txc", ["Tsez"] = "ddo", ["Tshangla"] = "tsj", ["Tshobdun"] = "sit-tsh", ["Tshwa"] = "hio", ["Tsikimba"] = "kdl", ["Tsimané"] = "cas", ["Tsimshian"] = "tsi", ["Tsishingini"] = "tsw", ["Tso"] = "ldp", ["Tsogo"] = "tsv", ["Tsonga"] = "ts", ["Tsotsitaal"] = "fly", ["Tsou"] = "tsu", ["Tsum"] = "ttz", ["Tsuvadi"] = "tvd", ["Tsuvan"] = "tsh", ["Tswa"] = "tsc", ["Tswana"] = "tn", ["Tswapong"] = "two", ["Tuamotuan"] = "pmt", ["Tuareg"] = "tmh", ["Tubar"] = "tbu", ["Tucano"] = "tuo", ["Tugen"] = "tuy", ["Tugun"] = "tzn", ["Tugutil"] = "tuj", ["Tukang Besi North"] = "khc", ["Tukang Besi South"] = "bhq", ["Tuki"] = "bag", ["Tukpa"] = "tpq", ["Tukudede"] = "tkd", ["Tukumanféd"] = "tkf", ["Tula"] = "tul", ["Tule-Kaweah Yokuts"] = "nai-tky", ["Tulehu"] = "tlu", ["Tulishi"] = "tey", ["Tulu"] = "tcy", ["Tulu-Bohuai"] = "rak", ["Tulua"] = "aus-tul", ["Tuma-Irumu"] = "iou", ["Tumak"] = "tmc", ["Tumbuka"] = "tum", ["Tumi"] = "kku", ["Tumleo"] = "tmq", ["Tumshuqese"] = "xtq", ["Tumtum"] = "tbr", ["Tumulung Sisaala"] = "sil", ["Tundra Enets"] = "enh", ["Tundra Nenets"] = "yrk", ["Tunen"] = "tvu", ["Tungag"] = "lcm", ["Tunggare"] = "trt", ["Tunia"] = "tug", ["Tunica"] = "tun", ["Tunisian Arabic"] = "aeb", ["Tunisian Berber"] = "sds", ["Tunisian Sign Language"] = "tse", ["Tunjung"] = "tjg", ["Tunni"] = "tqq", ["Tunumiisut"] = "esx-tut", ["Tunzu"] = "dza", ["Tuoba"] = "qfa-xgx-tuo", ["Tuotomb"] = "ttf", ["Tuparí"] = "tpr", ["Tupinambá"] = "tpn", ["Tupinikin"] = "tpk", ["Tupuri"] = "tui", ["Turaka"] = "trh", ["Turi"] = "trd", ["Turiwára"] = "twt", ["Turka"] = "tuz", ["Turkana"] = "tuv", ["Turkish"] = "tr", ["Turkish Sign Language"] = "tsm", ["Turkmen"] = "tk", ["Turks and Caicos Creole English"] = "tch", ["Turoyo"] = "tru", ["Turumsa"] = "tqm", ["Turung"] = "try", ["Tuscarora"] = "tus", ["Tutelo"] = "tta", ["Tutong"] = "ttg", ["Tutsa Naga"] = "tvt", ["Tutuba"] = "tmi", ["Tututepec Mixtec"] = "mtu", ["Tututni"] = "tuu", ["Tuvaluan"] = "tvl", ["Tuvan"] = "tyv", ["Tuwali Ifugao"] = "ifk", ["Tuwari"] = "tww", ["Tuwuli"] = "bov", ["Tuxináwa"] = "tux", ["Tuxá"] = "tud", ["Tuyuca"] = "tue", ["Tuyuhun"] = "qfa-xgx-tuh", ["Twana"] = "twa", ["Twendi"] = "twn", ["Tyap"] = "kcg", ["Tyaraity"] = "woa", ["Tyerrernotepanner"] = "xph", ["Tz'utujil"] = "tzj", ["Tzeltal"] = "tzh", ["Tzotzil"] = "tzo", ["Tày"] = "tyz", ["Tày Tac"] = "tyt", ["Tây Bồi"] = "tas", ["Téén"] = "lor", ["Tübatulabal"] = "tub", ["U"] = "uuu", ["Uab Meto"] = "aoz", ["Uamué"] = "uam", ["Uare"] = "ksj", ["Ubaghara"] = "byc", ["Ubang"] = "uba", ["Ubi"] = "ubi", ["Ubir"] = "ubr", ["Ubykh"] = "uby", ["Ucayali-Yurúa Ashéninka"] = "cpb", ["Uda"] = "uda", ["Udi"] = "udi", ["Udihe"] = "ude", ["Udmurt"] = "udm", ["Uduk"] = "udu", ["Ufim"] = "ufi", ["Ugandan Sign Language"] = "ugn", ["Ugaritic"] = "uga", ["Ughele"] = "uge", ["Uhami"] = "uha", ["Uisai"] = "uis", ["Ujir"] = "udj", ["Ukaan"] = "kcf", ["Ukhwejo"] = "ukh", ["Ukit"] = "umi", ["Ukpe-Bayobiri"] = "ukp", ["Ukpet-Ehom"] = "akd", ["Ukrainian"] = "uk", ["Ukrainian Sign Language"] = "ukl", ["Ukue"] = "uku", ["Ukuriguma"] = "ukg", ["Ukwa"] = "ukq", ["Ukwuani-Aboh-Ndoni"] = "ukw", ["Ulau-Suain"] = "svb", ["Ulch"] = "ulc", ["Uldeme"] = "udl", ["Ulithian"] = "uli", ["Ullatan"] = "ull", ["Ulumanda'"] = "ulm", ["Ulwa"] = "ulw", ["Uma"] = "ppk", ["Uma' Lasan"] = "xky", ["Uma' Lung"] = "ulu", ["Umanakaina"] = "gdn", ["Umatilla"] = "uma", ["Umbindhamu"] = "umd", ["Umbrian"] = "xum", ["Umbu-Ungu"] = "ubu", ["Umbugarla"] = "umr", ["Umbundu"] = "umb", ["Umbuygamu"] = "umg", ["Ume Sami"] = "sju", ["Umeda"] = "upi", ["Umiida"] = "xud", ["Umiray Dumaget Agta"] = "due", ["Umon"] = "umm", ["Umotína"] = "umo", ["Umpila"] = "ump", ["Una"] = "mtg", ["Unami"] = "unm", ["Unas"] = "art-una", ["Unde Kaili"] = "unz", ["Undetermined"] = "und", ["Uneapa"] = "bbn", ["Uneme"] = "une", ["Unggaranggu"] = "xun", ["Unggumi"] = "xgu", ["Unserdeutsch"] = "uln", ["Unua"] = "onu", ["Unubahe"] = "unu", ["Uokha"] = "uok", ["Upper Chehalis"] = "cjh", ["Upper Grand Valley Dani"] = "dna", ["Upper Kinabatangan"] = "dmg", ["Upper Kuskokwim"] = "kuu", ["Upper Necaxa Totonac"] = "tku", ["Upper Sorbian"] = "hsb", ["Upper Ta'oih"] = "tth", ["Upper Tanana"] = "tau", ["Upper Taromi"] = "tov", ["Upper Umpqua"] = "xup", ["Ura (New Guinea)"] = "uro", ["Ura (Vanuatu)"] = "uur", ["Uradhi"] = "urf", ["Urak Lawoi'"] = "urk", ["Urali"] = "url", ["Urapmin"] = "urm", ["Urarina"] = "ura", ["Urartian"] = "xur", ["Urat"] = "urt", ["Urdu"] = "ur", ["Urhobo"] = "urh", ["Uri"] = "uvh", ["Urigina"] = "urg", ["Urim"] = "uri", ["Urimo"] = "urx", ["Uripiv-Wala-Rano-Atchin"] = "upv", ["Urningangg"] = "urc", ["Uru"] = "ure", ["Uru-Eu-Wau-Wau"] = "urz", ["Uru-Pa-In"] = "urp", ["Uruangnirin"] = "urn", ["Uruava"] = "urv", ["Urubú-Kaapor"] = "urb", ["Uruguayan Sign Language"] = "ugy", ["Urum"] = "uum", ["Urumi"] = "uru", ["Usaghade"] = "usk", ["Usan"] = "wnu", ["Usarufa"] = "usa", ["Ushojo"] = "ush", ["Usila Chinantec"] = "cuc", ["Uspanteco"] = "usp", ["Usui"] = "usi", ["Utarmbung"] = "omo", ["Ute"] = "ute", ["Utu"] = "utu", ["Uvbie"] = "evh", ["Uwinymil"] = "aus-uwi", ["Uya"] = "usu", ["Uyajitaya"] = "duk", ["Uyghur"] = "ug", ["Uzbek"] = "uz", ["Uzbeki Arabic"] = "auz", ["Uzekwe"] = "eze", ["Vaagri Booli"] = "vaa", ["Vaghri"] = "vgr", ["Vaghua"] = "tva", ["Vagla"] = "vag", ["Vai"] = "vai", ["Vaiphei"] = "vap", ["Vale"] = "vae", ["Valencian Sign Language"] = "vsv", ["Valle Nacional Chinantec"] = "cvn", ["Valley Maidu"] = "vmv", ["Valman"] = "van", ["Valpei"] = "vlp", ["Vamale"] = "mkt", ["Vame"] = "mlr", ["Vandalic"] = "xvn", ["Vangunu"] = "mpr", ["Vanimo"] = "vam", ["Vanji"] = "ira-wnj", ["Vanuma"] = "vau", ["Vao"] = "vao", ["Varhadi"] = "vah", ["Varisi"] = "vrs", ["Varli"] = "vav", ["Vasavi"] = "vas", ["Vayu"] = "vay", ["Veddah"] = "ved", ["Vehes"] = "val", ["Vemgo-Mabas"] = "vem", ["Venda"] = "ve", ["Venetian"] = "vec", ["Venetic"] = "xve", ["Venezuelan Sign Language"] = "vsl", ["Ventureño"] = "veo", ["Veps"] = "vep", ["Vera'a"] = "vra", ["Vestinian"] = "xvs", ["Vidunda"] = "vid", ["Viemo"] = "vig", ["Vietnamese"] = "vi", ["Vilamovian"] = "wym", ["Vilela"] = "vil", ["Vili"] = "vif", ["Villa Viciosa Agta"] = "dyg", ["Vincentian Creole English"] = "svc", ["Virgin Islands Creole"] = "vic", ["Vishavan"] = "vis", ["Viti"] = "vit", ["Vitou"] = "vto", ["Viya"] = "gev", ["Vlax Romani"] = "rmy", ["Volapük"] = "vo", ["Volga German"] = "gmw-vog", ["Volscian"] = "xvo", ["Vono"] = "kch", ["Voro"] = "vor", ["Votic"] = "vot", ["Vracada Apabhramsa"] = "inc-vra", ["Vumbu"] = "vum", ["Vunapu"] = "vnp", ["Vunjo"] = "vun", ["Vurës"] = "msn", ["Vute"] = "vut", ["Võro"] = "vro", ["Wa"] = "wbm", ["Wa'ema"] = "wag", ["Waama"] = "wwa", ["Waamwang"] = "wmn", ["Wab"] = "wab", ["Wabo"] = "wbb", ["Waboda"] = "kmx", ["Waci Gbe"] = "wci", ["Wadaginam"] = "wdg", ["Waddar"] = "wbq", ["Wadi Wadi"] = "xwd", ["Wadiyara Koli"] = "kxp", ["Wadjabangayi"] = "wdy", ["Wadjiginy"] = "wdj", ["Wadjigu"] = "wdu", ["Wae Rana"] = "wrx", ["Waffa"] = "waj", ["Wagawaga"] = "wgb", ["Wagaya"] = "wga", ["Wagdi"] = "wbr", ["Wageman"] = "waq", ["Wagi"] = "fad", ["Wahau Kayan"] = "whu", ["Wahau Kenyah"] = "whk", ["Wahgi"] = "wgi", ["Waigali"] = "wbk", ["Waigeo"] = "wgo", ["Waikuri"] = "nai-wai", ["Wailaki"] = "wlk", ["Wailapa"] = "wlr", ["Waima'a"] = "wmh", ["Waimaha"] = "bao", ["Waimiri-Atroari"] = "atr", ["Wainumá"] = "awd-wai", ["Waioli"] = "wli", ["Waitaká"] = "sai-wai", ["Waiwai"] = "waw", ["Waja"] = "wja", ["Wajarri"] = "wbv", ["Wajuk"] = "xwj", ["Waka"] = "wav", ["Wakawaka"] = "wkw", ["Wakhi"] = "wbl", ["Wakoná"] = "waf", ["Wala"] = "lgl", ["Walak"] = "wlw", ["Walangama"] = "nlw", ["Wali (Ghana)"] = "wlx", ["Wali (Sudan)"] = "wll", ["Waling"] = "wly", ["Walio"] = "wla", ["Walla Walla"] = "waa", ["Wallisian"] = "wls", ["Walloon"] = "wa", ["Walmajarri"] = "wmt", ["Wam"] = "wmo", ["Wamas"] = "wmc", ["Wambaya"] = "wmb", ["Wambon"] = "wms", ["Wambule"] = "wme", ["Wamey"] = "cou", ["Wamin"] = "wmi", ["Wampar"] = "lbq", ["Wampur"] = "waz", ["Wan"] = "wan", ["Wanambre"] = "wnb", ["Wanap"] = "wnp", ["Wancho"] = "nnp", ["Wanda"] = "wbh", ["Wandala"] = "mfi", ["Wandamen"] = "wad", ["Wandarang"] = "wnd", ["Wandji"] = "wdd", ["Waneci"] = "wne", ["Wanga"] = "lwg", ["Wanggamala"] = "wnm", ["Wangganguru"] = "wgg", ["Wanggom"] = "wng", ["Wangkayutyuru"] = "wky", ["Wangkumara"] = "xwk", ["Wanham"] = "sai-wnm", ["Wanji"] = "wbi", ["Wanman"] = "wbt", ["Wannu"] = "jub", ["Wano"] = "wno", ["Wantoat"] = "wnc", ["Wanukaka"] = "wnk", ["Wanyi"] = "wny", ["Wané"] = "hwa", ["Wapan"] = "juk", ["Wapishana"] = "wap", ["Wappo"] = "wao", ["War-Jaintia"] = "aml", ["Wara"] = "wbf", ["Warao"] = "wba", ["Warapu"] = "wra", ["Waray Sorsogon"] = "srv", ["Waray-Waray"] = "war", ["Wardaman"] = "wrr", ["Wardandi"] = "wxw", ["Warekena"] = "gae", ["Warembori"] = "wsa", ["Wari'"] = "pav", ["Waris"] = "wrs", ["Waritai"] = "wbe", ["Wariyangga"] = "wri", ["Warji"] = "wji", ["Warkay-Bipim"] = "bgv", ["Warlmanpa"] = "wrl", ["Warlpiri"] = "wbp", ["Warluwara"] = "wrb", ["Warnang"] = "wrn", ["Waropen"] = "wrp", ["Warray"] = "wrz", ["Warrgamay"] = "wgy", ["Warrwa"] = "wwr", ["Waru"] = "wru", ["Warumungu"] = "wrm", ["Waruna"] = "wrv", ["Warungu"] = "wrg", ["Warwar Feni"] = "hrw", ["Wasa"] = "wss", ["Wasco-Wishram"] = "wac", ["Wasembo"] = "gsp", ["Washo"] = "was", ["Waskia"] = "wsk", ["Wastek"] = "hus", ["Wasu"] = "wsu", ["Watakataui"] = "wtk", ["Watam"] = "wax", ["Wathaurong"] = "wth", ["Watiwa"] = "wtf", ["Watubela"] = "wah", ["Waube"] = "kop", ["Wauja"] = "wau", ["Wauyai"] = "wuy", ["Wawa"] = "www", ["Wawonii"] = "wow", ["Waxianghua"] = "wxa", ["Wayampi"] = "oym", ["Wayana"] = "way", ["Wayanad Chetti"] = "ctt", ["Wayoró"] = "wyr", ["Wayumará"] = "sai-way", ["Wayuu"] = "guc", ["Wedau"] = "wed", ["Weh"] = "weh", ["Welaung"] = "weu", ["Weliki"] = "klh", ["Welsh"] = "cy", ["Welsh Romani"] = "rmw", ["Wemale"] = "weo", ["Wemba-Wemba"] = "xww", ["Weme Gbe"] = "wem", ["Wendat"] = "wdt", ["Weri"] = "wer", ["Wersing"] = "kvw", ["West Albay Bikol"] = "fbl", ["West Ambae"] = "nnd", ["West Central Banda"] = "bbp", ["West Coast Bajau"] = "bdr", ["West Damar"] = "drn", ["West Flemish"] = "vls", ["West Frisian"] = "fy", ["West Greenlandic Pidgin"] = "crp-gep", ["West Lembata"] = "lmj", ["West Makian"] = "mqs", ["West Masela"] = "mss", ["West Tarangan"] = "txn", ["West Uvean"] = "uve", ["West-Central Limba"] = "lia", ["Western Apache"] = "apw", ["Western Arrernte"] = "are", ["Western Bolivian Guaraní"] = "gnw", ["Western Bru"] = "brv", ["Western Bukidnon Manobo"] = "mbb", ["Western Cham"] = "cja", ["Western Dani"] = "dnw", ["Western Durango Nahuatl"] = "azn", ["Western Fijian"] = "wyy", ["Western Gurung"] = "gvr", ["Western Highland Chatino"] = "ctp", ["Western Huasteca Nahuatl"] = "nhw", ["Western Jicaque"] = "und-wji", ["Western Juxtlahuaca Mixtec"] = "jmx", ["Western Karaboro"] = "kza", ["Western Katu"] = "kuf", ["Western Kayah"] = "kyu", ["Western Keres"] = "kjq", ["Western Krahn"] = "krw", ["Western Lalu"] = "ywl", ["Western Lawa"] = "lcp", ["Western Magar"] = "mrd", ["Western Maninkakan"] = "mlq", ["Western Mari"] = "mrj", ["Western Mashan Hmong"] = "hmw", ["Western Meohang"] = "raf", ["Western Muria"] = "mut", ["Western Neo-Aramaic"] = "amw", ["Western Ojibwa"] = "ojw", ["Western Panjabi"] = "pnb", ["Western Penan"] = "pne", ["Western Pwo"] = "pwo", ["Western Sisaala"] = "ssl", ["Western Subanon"] = "suc", ["Western Tamang"] = "tdg", ["Western Tawbuid"] = "twb", ["Western Totonac"] = "tqt", ["Western Tunebo"] = "tnb", ["Western Xiangxi Miao"] = "mmr", ["Western Xwla Gbe"] = "xwl", ["Western Yugur"] = "ybe", ["Wewaw"] = "wea", ["Weyewa"] = "wew", ["White Gelao"] = "giw", ["White Hmong"] = "mww", ["White Lachi"] = "lwh", ["Whitesands"] = "tnp", ["Wiarumus"] = "tua", ["Wichita"] = "wic", ["Wichí Lhamtés Güisnay"] = "mzh", ["Wichí Lhamtés Nocten"] = "mtp", ["Wichí Lhamtés Vejoz"] = "wlv", ["Wik-Epa"] = "wie", ["Wik-Iiyanh"] = "wij", ["Wik-Keyangan"] = "wif", ["Wik-Me'anha"] = "wih", ["Wik-Mungkan"] = "wim", ["Wik-Ngathana"] = "wig", ["Wikalkan"] = "wik", ["Wikngenchera"] = "wua", ["Wilawila"] = "wil", ["Winnebago"] = "win", ["Wintu"] = "wnw", ["Winyé"] = "kst", ["Wipi"] = "gdr", ["Wiradhuri"] = "wrh", ["Wiraféd"] = "wir", ["Wirangu"] = "wgu", ["Wiru"] = "wiu", ["Wirö"] = "wpc", ["Wiwa"] = "mbp", ["Wiyot"] = "wiy", ["Woccon"] = "xwc", ["Wogamusin"] = "wog", ["Wogeo"] = "woc", ["Woi"] = "wbw", ["Woiwurrung"] = "wyi", ["Wojenaka"] = "jod", ["Wolane"] = "wle", ["Wolani"] = "wod", ["Wolaytta"] = "wal", ["Woleaian"] = "woe", ["Wolio"] = "wlo", ["Wolof"] = "wo", ["Womo"] = "wmx", ["Wong-gie"] = "aus-won", ["Wongo"] = "won", ["Woods Cree"] = "cwd", ["Woria"] = "wor", ["Worimi"] = "kda", ["Worodougou"] = "jud", ["Worora"] = "wro", ["Wotapuri-Katarqalai"] = "wsv", ["Wotu"] = "wtw", ["Woun Meu"] = "noa", ["Written Oirat"] = "xwo", ["Wu"] = "wuu", ["Wudu"] = "wud", ["Wuhuan"] = "qfa-xgx-wuh", ["Wulguru"] = "aus-wul", ["Wuliwuli"] = "wlu", ["Wulna"] = "wux", ["Wumboko"] = "bqm", ["Wumbvu"] = "wum", ["Wumeng Nasu"] = "ywu", ["Wunai Bunu"] = "bwn", ["Wunambal"] = "wub", ["Wurrugu"] = "wur", ["Wusa Nasu"] = "yig", ["Wushi"] = "bse", ["Wusi"] = "wsi", ["Wutung"] = "wut", ["Wutunhua"] = "wuh", ["Wuvulu-Aua"] = "wuv", ["Wyandot"] = "wya", ["Wára"] = "tci", ["Wãpha"] = "juw", ["Wè Northern"] = "wob", ["Wè Southern"] = "gxx", ["Wè Western"] = "wec", ["Xadani Zapotec"] = "zax", ["Xakriabá"] = "xkr", ["Xamtanga"] = "xan", ["Xanaguía Zapotec"] = "ztg", ["Xaragure"] = "axx", ["Xavante"] = "xav", ["Xerénte"] = "xer", ["Xetá"] = "xet", ["Xhosa"] = "xh", ["Xianbei"] = "qfa-xgx-xbi", ["Xiang"] = "hsn", ["Xibe"] = "sjo", ["Xicotepec de Juárez Totonac"] = "too", ["Xinca"] = "xin", ["Xingú Asuriní"] = "asn", ["Xipaya"] = "xiy", ["Xiri"] = "xii", ["Xiriâna"] = "xir", ["Xishanba Lalo"] = "ywt", ["Xocó"] = "sai-xoc", ["Xokleng"] = "xok", ["Xukurú"] = "xoo", ["Xwela Gbe"] = "xwe", ["Xârâcùù"] = "ane", ["Yaa"] = "iyx", ["Yaaku"] = "muu", ["Yabarana"] = "yar", ["Yabaâna"] = "ybn", ["Yaben"] = "ybm", ["Yabong"] = "ybo", ["Yabula Yabula"] = "yxy", ["Yace"] = "ekr", ["Yaeyama"] = "rys", ["Yafi"] = "wfg", ["Yagara"] = "yxg", ["Yagaria"] = "ygr", ["Yagnobi"] = "yai", ["Yagomi"] = "ygm", ["Yagua"] = "yad", ["Yagwoia"] = "ygw", ["Yahadian"] = "ner", ["Yahang"] = "rhp", ["Yahuna"] = "ynu", ["Yaka"] = "yaf", ["Yakaikeke"] = "ykk", ["Yakan"] = "yka", ["Yakima"] = "yak", ["Yakkha"] = "ybh", ["Yakoma"] = "yky", ["Yakut"] = "sah", ["Yala"] = "yba", ["Yalahatan"] = "jal", ["Yalakalore"] = "xyl", ["Yalarnnga"] = "ylr", ["Yale"] = "nce", ["Yaleba"] = "ylb", ["Yalunka"] = "yal", ["Yalálag Zapotec"] = "zpu", ["Yamap"] = "ymp", ["Yamba"] = "yam", ["Yambes"] = "ymb", ["Yambeta"] = "yat", ["Yamdena"] = "jmd", ["Yameo"] = "yme", ["Yami"] = "tao", ["Yaminahua"] = "yaa", ["Yamongeri"] = "ymg", ["Yamphu"] = "ybi", ["Yan-nhangu"] = "jay", ["Yana"] = "ynn", ["Yanda"] = "yda", ["Yanda Dogon"] = "dym", ["Yandjibara"] = "xyb", ["Yandruwandha"] = "ynd", ["Yanesha'"] = "ame", ["Yangben"] = "yav", ["Yangkaal"] = "aus-ynk", ["Yangkam"] = "bsx", ["Yangman"] = "jng", ["Yango"] = "yng", ["Yangulam"] = "ynl", ["Yangum Dey"] = "yde", ["Yangum Gel"] = "ygl", ["Yangum Mon"] = "ymo", ["Yankunytjatjara"] = "kdd", ["Yanomamö"] = "guu", ["Yanomámi"] = "wca", ["Yansi"] = "yns", ["Yanyuwa"] = "jao", ["Yao"] = "yao", ["Yao (South America)"] = "sai-yao", ["Yaosakor Asmat"] = "asy", ["Yaouré"] = "yre", ["Yapese"] = "yap", ["Yapunda"] = "yev", ["Yaqay"] = "jaq", ["Yaqui"] = "yaq", ["Yarawata"] = "yrw", ["Yareba"] = "yrb", ["Yareni Zapotec"] = "zae", ["Yarli"] = "yxl", ["Yarluyandi"] = "yry", ["Yaroamë"] = "yro", ["Yarumá"] = "sai-yar", ["Yarí"] = "yri", ["Yasa"] = "yko", ["Yatay"] = "yty", ["Yatee Zapotec"] = "zty", ["Yatzachi Zapotec"] = "zav", ["Yaul"] = "yla", ["Yaur"] = "jau", ["Yautepec Zapotec"] = "zpb", ["Yavitero"] = "yvt", ["Yawa"] = "yva", ["Yawalapití"] = "yaw", ["Yawanawa"] = "ywn", ["Yawarawarga"] = "yww", ["Yaweyuha"] = "yby", ["Yawijibaya"] = "jbw", ["Yawiyo"] = "ybx", ["Yawuru"] = "ywr", ["Yaygir"] = "xya", ["Yazghulami"] = "yah", ["Yei"] = "jei", ["Yekhee"] = "ets", ["Yekora"] = "ykr", ["Yele"] = "yle", ["Yelmek"] = "jel", ["Yelogu"] = "ylg", ["Yemba"] = "ybb", ["Yemeni Arabic"] = "ayn", ["Yemsa"] = "jnj", ["Yendang"] = "yen", ["Yeni"] = "yei", ["Yeniche"] = "yec", ["Yerakai"] = "yra", ["Yeretuar"] = "gop", ["Yerong"] = "yrn", ["Yerukula"] = "yeu", ["Yeskwa"] = "yes", ["Yessan-Mayo"] = "yss", ["Yetfa"] = "yet", ["Yevanic"] = "yej", ["Yeyi"] = "yey", ["Yiddish"] = "yi", ["Yidgha"] = "ydg", ["Yidiny"] = "yii", ["Yil"] = "yll", ["Yilan Creole"] = "ycr", ["Yimas"] = "yee", ["Yimchungru Naga"] = "yim", ["Yinbaw Karen"] = "kvu", ["Yinchia"] = "yin", ["Yindjibarndi"] = "yij", ["Yindjilandji"] = "yil", ["Yine"] = "pib", ["Yinggarda"] = "yia", ["Yinhawangka"] = "ywg", ["Yiningayi"] = "ygi", ["Yintale Karen"] = "kvy", ["Yinwum"] = "yxm", ["Yir-Yoront"] = "yiy", ["Yirandali"] = "ljw", ["Yis"] = "yis", ["Yitha Yitha"] = "xth", ["Yoba"] = "yob", ["Yocoboué Dida"] = "gud", ["Yogad"] = "yog", ["Yoidik"] = "ydk", ["Yoke"] = "yki", ["Yola"] = "yol", ["Yolmo"] = "scp", ["Yolngu Sign Language"] = "ygs", ["Yoloxochitl Mixtec"] = "xty", ["Yom"] = "pil", ["Yombe"] = "yom", ["Yonaguni"] = "yoi", ["Yong"] = "yno", ["Yongkom"] = "yon", ["Yopno"] = "yut", ["Yora"] = "mts", ["Yoron"] = "yox", ["Yorta Yorta"] = "xyy", ["Yoruba"] = "yo", ["Yosondúa Mixtec"] = "mpm", ["Youle Jinuo"] = "jiu", ["Younuo Bunu"] = "buh", ["Yout Wam"] = "ytw", ["Yoy"] = "yoy", ["Yuaga"] = "nua", ["Yucatec Maya"] = "yua", ["Yucatec Maya Sign Language"] = "msd", ["Yuchi"] = "yuc", ["Yucuañe Mixtec"] = "mvg", ["Yucuna"] = "ycn", ["Yug"] = "yug", ["Yugambal"] = "yub", ["Yugoslavian Sign Language"] = "ysl", ["Yugul"] = "ygu", ["Yuhup"] = "yab", ["Yuki"] = "yuk", ["Yukpa"] = "yup", ["Yukuben"] = "ybl", ["Yulu"] = "yul", ["Yuma"] = "yum", ["Yumana"] = "awd-yum", ["Yup'ik"] = "esu", ["Yupiltepeque"] = "nai-yup", ["Yupua"] = "sai-yup", ["Yuqui"] = "yuq", ["Yuracare"] = "yuz", ["Yuri"] = "sai-yri", ["Yurok"] = "yur", ["Yuru"] = "ljx", ["Yurumanguí"] = "sai-yur", ["Yurutí"] = "yui", ["Yutanduchi Mixtec"] = "mab", ["Yuwana"] = "yau", ["Yuyu"] = "yxu", ["Yámana"] = "yag", ["Zaachila Zapotec"] = "ztx", ["Zabana"] = "kji", ["Zacatepec Chatino"] = "ctz", ["Zacatlán-Ahuacatlán-Tepetzintla Nahuatl"] = "nhi", ["Zaghawa"] = "zag", ["Zaiwa"] = "atb", ["Zakhring"] = "zkr", ["Zambian Sign Language"] = "zsl", ["Zan Gula"] = "zna", ["Zanaki"] = "zak", ["Zande"] = "zne", ["Zangskari"] = "zau", ["Zangwal"] = "zah", ["Zaniza Zapotec"] = "zpw", ["Zapotec"] = "zap", ["Zaramo"] = "zaj", ["Zari"] = "zaz", ["Zarma"] = "dje", ["Zauzou"] = "zal", ["Zay"] = "zwa", ["Zayein Karen"] = "kxk", ["Zayse-Zergulla"] = "zay", ["Zazaki"] = "zza", ["Zazao"] = "jaj", ["Zbu"] = "sit-zbu", ["Zealandic"] = "zea", ["Zeem"] = "zua", ["Zemba"] = "dhm", ["Zeme Naga"] = "nzm", ["Zemgalian"] = "xzm", ["Zenag"] = "zeg", ["Zenaga"] = "zen", ["Zenzontepec Chatino"] = "czn", ["Zhaba"] = "zhb", ["Zhang-Zhung"] = "xzh", ["Zhire"] = "zhi", ["Zhoa"] = "zhw", ["Zhuang"] = "za", ["Zhár"] = "jjr", ["Zia"] = "zia", ["Zialo"] = "zil", ["Zigula"] = "ziw", ["Zimakani"] = "zik", ["Zimba"] = "zmb", ["Zimbabwe Sign Language"] = "zib", ["Zinza"] = "zin", ["Zipser German"] = "gmw-zps", ["Zire"] = "sih", ["Zirenkel"] = "zrn", ["Ziriya"] = "zir", ["Zizilivakan"] = "ziz", ["Zo'é"] = "pto", ["Zokhuo"] = "yzk", ["Zoogocho Zapotec"] = "zpq", ["Zotung Chin"] = "czt", ["Zou"] = "zom", ["Zulgo-Gemzek"] = "gnd", ["Zulu"] = "zu", ["Zumaya"] = "zuy", ["Zumbun"] = "jmb", ["Zuni"] = "zun", ["Zuojiang Zhuang"] = "zzj", ["Zuwara"] = "ber-zuw", ["Zyphe"] = "zyp", ["Záparo"] = "zro", ["Àhàn"] = "ahn", ["Áncá"] = "acb", ["Ömie"] = "aom", ["Önge"] = "oon", ["ǀXam"] = "xam", ["ǁAni"] = "hnh", ["ǁGana"] = "gnk", ["ǁXegwi"] = "xeg", ["ǂHoan"] = "huc", ["ǃKung"] = "khi-kun", ["ǃXóõ"] = "nmn", } o4vg67s59v3zadh26zjmqjqequfovpl मॉड्यूल:languages/canonical names.json 828 304628 487548 477595 2026-09-01T15:12:50Z SM7 6218 असमिया 487548 json application/json { "'Are'are": "alu", "A'ou": "aou", "A-Hmao": "hmd", "A-Pucikwar": "apq", "Aari": "aiw", "Aasax": "aas", "Aba": "utp", "Abaga": "abg", "Abai": "poz-abi", "Abai Sungai": "abf", "Abanyom": "abm", "Abau": "aau", "Abaza": "abq", "Abenaki": "abe", "Abenlen Ayta": "abp", "Abidji": "abi", "Abinomn": "bsa", "Abipon": "axb", "Abishira": "ash", "Abkhaz": "ab", "Abom": "aob", "Abon": "abo", "Abron": "abr", "Abu": "ado", "Abu' Arapesh": "aah", "Abua": "abn", "Abui": "abz", "Abun": "kgr", "Abung": "abl", "Abure": "abu", "Abureni": "mgj", "Abé": "aba", "Acatepec Me'phaa": "tpx", "Acehnese": "ace", "Achagua": "aca", "Achang": "acn", "Ache": "yif", "Acheron": "acz", "Achi": "acr", "Acholi": "ach", "Achuar": "acu", "Achumawi": "acv", "Aché": "guq", "Acroá": "acs", "Adabe": "adb", "Adai": "xad", "Adamorobe Sign Language": "ads", "Adang": "adn", "Adangbe": "adq", "Adangme": "ada", "Adap": "adp", "Adasen": "tiu", "Adele": "ade", "Adhola": "adh", "Adi": "adi", "Adioukrou": "adj", "Adithinngithigh": "dth", "Adivasi Oriya": "ort", "Adiwasi Garasia": "gas", "Adja": "ajg", "Adnyamathanha": "adt", "Adonara": "adr", "Aduge": "adu", "Adyghe": "ady", "Adzera": "adz", "Aeka": "aez", "Aekyom": "awi", "Aequian": "xae", "Aer": "aeq", "Afade": "aal", "Afar": "aa", "Afghan Sign Language": "afg", "Afitti": "aft", "Afra": "ulf", "Afrihili": "afh", "Afrikaans": "af", "Afro-Seminole Creole": "afs", "Agarabi": "agd", "Agariya": "agi", "Agatu": "agc", "Agavotaguerra": "avo", "Agawam": "alg-aga", "Aghem": "agq", "Aghu": "ahh", "Aghu Tharrnggala": "gtu", "Aghul": "agx", "Aghwan": "xag", "Agi": "aif", "Agob": "kit", "Agoi": "ibm", "Aguacateca": "agu", "Aguano": "aga", "Aguaruna": "agr", "Aguna": "aug", "Agusan Manobo": "msm", "Agutaynen": "agn", "Agwagwune": "yay", "Ahanta": "aha", "Ahirani": "ahr", "Ahom": "aho", "Ahtna": "aht", "Ahwai": "nfd", "Ai-Cham": "aih", "Aighon": "aix", "Aikanã": "tba", "Aiklep": "mwg", "Aimele": "ail", "Aimol": "aim", "Ainbai": "aic", "Ainu": "ain", "Aiome": "aki", "Airoran": "air", "Aisi": "mmq", "Aiton": "aio", "Aiwoo": "nfl", "Aja": "aja", "Ajagua": "sai-ajg", "Ajawa": "ajw", "Ajië": "aji", "Ajyíninka Apurucayali": "cpc", "Ak": "akq", "Aka (Central Africa)": "axk", "Aka (Sudan)": "soh", "Aka-Bea": "abj", "Aka-Bo": "akm", "Aka-Cari": "aci", "Aka-Kede": "akx", "Aka-Kol": "aky", "Aka-Kora": "ack", "Akan": "ak", "Akar-Bale": "acl", "Akaselem": "aks", "Akatek": "knj", "Akawaio": "ake", "Ake": "aik", "Akebu": "keu", "Akei": "tsr", "Akeu": "aeu", "Akha": "ahk", "Akhvakh": "akv", "Akkadian": "akk", "Akkala Sami": "sia", "Aklanon": "akl", "Akolet": "akt", "Akoose": "bss", "Akoye": "miw", "Akpa": "akf", "Akpes": "ibe", "Akrukay": "afi", "Akuku": "ayk", "Akum": "aku", "Akuntsu": "aqz", "Akurio": "ako", "Akuwagel": "bey", "Akwa": "akw", "Akyaung Ari": "nqy", "Al-Sayyid Bedouin Sign Language": "syy", "Alaba": "alw", "Alabama": "akz", "Alabat Island Agta": "dul", "Alacatlatzala Mixtec": "mim", "Alago": "ala", "Alagwa": "wbj", "Alak": "alk", "Alamblak": "amp", "Alangan": "alj", "Alapmunte": "apv", "Alas-Kluet Batak": "btz", "Alawa": "alh", "Alazapa": "nai-ala", "Albanian": "sq", "Albanian Sign Language": "sqk", "Alcozauca Mixtec": "xta", "Alege": "alf", "Alekano": "gah", "Alemannic German": "gsw", "Aleut": "ale", "Algerian Arabic": "arq", "Algerian Sign Language": "asp", "Algonquin": "alq", "Ali": "aiy", "Alladian": "ald", "Allar": "all", "Allentiac": "sai-all", "Alngith": "aid", "Alo Phola": "ypo", "Alor": "aol", "Aloápam Zapotec": "zaq", "Alsea": "aes", "Alu": "mte", "Alu Kurumba": "xua", "Alugu": "aub", "Alumu-Tesu": "aab", "Alune": "alp", "Alungul": "aus-alu", "Aluo": "yna", "Alur": "alz", "Alutiiq": "ems", "Alutor": "alr", "Alviri-Vidari": "avd", "Alyawarr": "aly", "Ama": "amm", "Amahai": "amq", "Amahuaca": "amc", "Amaimon": "ali", "Amal": "aad", "Amanab": "amn", "Amanayé": "ama", "Amara": "aie", "Amarakaeri": "amr", "Amarasi": "aaz", "Amarizana": "awd-ama", "Amasi": "alv-ama", "Amatlán Zapotec": "zpo", "Amba": "rwm", "Ambai": "amk", "Ambakich": "aew", "Ambala Ayta": "abc", "Ambelau": "amv", "Ambele": "ael", "Amblong": "alm", "Ambo": "amb", "Ambonese Malay": "abs", "Ambrak": "aag", "Ambul": "apo", "Ambulas": "abt", "Amdang": "amj", "Amele": "aey", "American Sign Language": "ase", "Amganad Ifugao": "ifa", "Amharic": "am", "Ami": "amy", "Amis": "ami", "Ammonite": "sem-amm", "Amo": "amo", "Amol": "alx", "Amoltepec Mixtec": "mbz", "Amondawa": "adw", "Amorite": "sem-amo", "Ampanang": "apg", "Ampari Dogon": "aqd", "Amri Karbi": "ajz", "Amto": "amt", "Amurdag": "amg", "Ana Tinga Dogon": "dti", "Anaang": "anw", "Anakalangu": "akg", "Anal": "anm", "Anam": "pda", "Anambé": "aan", "Anamgura": "imi", "Anasi": "bpo", "Anauyá": "awd-ana", "Ancient Greek": "grc", "Ancient Ligurian": "xlg", "Ancient Macedonian": "xmk", "Ancient North Arabian": "xna", "Ancient Zapotec": "xzp", "Andai": "afd", "Andajin": "ajn", "Andalusian Arabic": "xaa", "Andaman Creole Hindi": "hca", "Andaqui": "ana", "Andarum": "aod", "Andegerebinha": "adg", "Andh": "anr", "Andi": "ani", "Andio": "bzb", "Andjingith": "aus-and", "Andoa": "anb", "Andoque": "ano", "Andoquero": "sai-and", "Andra-Hus": "anx", "Aneityum": "aty", "Anem": "anz", "Aneme Wake": "aby", "Anfillo": "myo", "Angaataha": "agm", "Angaité": "aqt", "Angal": "age", "Angal Enen": "aoe", "Angal Heneng": "akh", "Angami": "njm", "Angevin": "roa-ang", "Angguruk Yali": "yli", "Angika": "anp", "Angkamuthi": "avm", "Angkola Batak": "akb", "Angkula": "aus-ang", "Angloromani": "rme", "Angolar": "aoa", "Angor": "agg", "Angoram": "aog", "Angosturas Tunebo": "tnd", "Anguthimri": "awg", "Ani Phowa": "ypn", "Anii": "blo", "Animere": "anf", "Anindilyakwa": "aoi", "Anjam": "boj", "Ankave": "aak", "Anmatyerre": "amx", "Annobonese": "fab", "Anong": "nun", "Anor": "anj", "Anserma": "ans", "Ansus": "and", "Antakarinya": "ant", "Antigua and Barbuda Creole English": "aig", "Antillean Creole": "gcf", "Anu": "anl", "Anuak": "anu", "Anufo": "cko", "Anuki": "aui", "Anus": "auq", "Anuta": "aud", "Anyi": "any", "Anyin Morofo": "mtb", "Ao": "njo", "Aoheng": "pni", "Aore": "aor", "Ap Ma": "kbx", "Apalachee": "xap", "Apalaí": "apy", "Apali": "ena", "Apasco-Apoala Mixtec": "mip", "Apatani": "apt", "Apiaká": "api", "Apinayé": "apn", "Apma": "app", "Apolista": "awd-apo", "Aproumu Aizi": "ahp", "Apurinã": "apu", "Aputai": "apx", "Aquitanian": "xaq", "Arabana": "ard", "Arabela": "arl", "Arabic": "ar", "Aragonese": "an", "Araki": "akr", "Arakwal": "rkw", "Aralle-Tabulahan": "atq", "Aramaic": "arc", "Arammba": "stk", "Aranadan": "aaf", "Aranama-Tamique": "xrt", "Arandai": "jbj", "Araona": "aro", "Arapaho": "arp", "Arapaso": "arj", "Arara-Karo": "arr", "Ararandewára": "xaj", "Arawak": "arw", "Araweté": "awt", "Arawum": "awm", "Arbore": "arv", "Archi": "aqc", "Ardhamagadhi Prakrit": "pka", "Are": "mwc", "Areba": "aea", "Arem": "aem", "Argentine Sign Language": "aed", "Argobba": "agj", "Arguni": "agf", "Arhuaco": "arh", "Arhâ": "aqr", "Arhö": "aok", "Ari": "aac", "Aribwatsa": "laz", "Aribwaung": "ylu", "Arifama-Miniafia": "aai", "Arigidi": "aqg", "Arikapú": "ark", "Arikara": "ari", "Arikem": "ait", "Arin": "xrn", "Aringa": "luc", "Armazic": "xrm", "Armenian": "hy", "Armenian Sign Language": "aen", "Aromanian": "rup", "Arop-Lokep": "apr", "Arop-Sissano": "aps", "Arosi": "aia", "Arritinngithigh": "rrt", "Arta": "atz", "Arua": "aru", "Aruamu": "msy", "Aruek": "aur", "Aruop": "lsr", "Arutani": "atx", "Aruá": "arx", "As": "asz", "Asaro'o": "mtv", "Ashe": "ahs", "Ashkun": "ask", "Asho Chin": "csh", "Ashokan Prakrit": "inc-ash", "Ashraaf": "cus-ash", "Asháninka": "cni", "Ashéninka Pajonal": "cjo", "Ashéninka Perené": "prq", "Asi": "bno", "Asilulu": "asl", "Askopan": "eiv", "Asoa": "asv", "असमिया": "as", "Assan": "xss", "Assangori": "sjg", "Assiniboine": "asb", "Assyrian Neo-Aramaic": "aii", "Asturian": "ast", "Asu": "aum", "Asue Awyu": "psa", "Asumboa": "aua", "Asunción Mixtepec Zapotec": "zoo", "Asuri": "asr", "Ata": "atm", "Ata Manobo": "atd", "Atakapa": "aqp", "Atampaya": "amz", "Atanques": "cba-ata", "Atatláhuca Mixtec": "mib", "Atayal": "tay", "Atemble": "ate", "Ateso": "teo", "Athpare": "aph", "Ati": "atk", "Atikamekw": "atj", "Atohwaim": "aqm", "Atong (Cameroon)": "ato", "Atong (India)": "aot", "Atorada": "aox", "Atsahuaca": "atc", "Atsam": "cch", "Atsugewi": "atw", "Attapady Kurumba": "pkr", "Attié": "ati", "Au": "avt", "Auhelawa": "kud", "Aukan": "djk", "Aulua": "aul", "Aurá": "aux", "Aushi": "auh", "Aushiri": "avs", "Auslan": "asf", "Austral": "aut", "Australian Aboriginal Sign Language": "asw", "Austrian Sign Language": "asq", "Austronesian Mari": "hob", "Auwe": "smf", "Auyana": "auy", "Auye": "auu", "Auyokawa": "auo", "Avar": "av", "Avatime": "avn", "Avau": "avb", "Avava": "tmb", "Avestan": "ae", "Avikam": "avi", "Avokaya": "avu", "Avá-Canoeiro": "avv", "Awa (China)": "vwa", "Awa (New Guinea)": "awb", "Awa-Cuaiquer": "kwi", "Awabakal": "awk", "Awadhi": "awa", "Awak": "awo", "Awar": "aya", "Awara": "awx", "Awbono": "awh", "Aweer": "bob", "Awera": "awr", "Awetí": "awe", "Awing": "azo", "Awjila": "auj", "Awngi": "awn", "Awngthim": "gwm", "Awtuw": "kmn", "Awu": "yiu", "Awun": "aww", "Awutu": "afu", "Awyi": "auw", "Axamb": "ahb", "Axi Yi": "yix", "Ayabadhu": "ayd", "Ayautla Mazatec": "vmy", "Ayere": "aye", "Ayerrerenge": "axe", "Ayi": "ayq", "Ayizi": "yyz", "Ayizo": "ayb", "Aymara": "ay", "Aynu": "aib", "Ayomán": "sai-ayo", "Ayoquesco Zapotec": "zaf", "Ayoreo": "ayo", "Ayu": "ayu", "Ayutla Mixtec": "miy", "Azerbaijani": "az", "Azha": "aza", "Azhe": "yiz", "Azoyú Me'phaa": "tpc", "Baa": "kwb", "Baagandji": "drl", "Baan": "bvj", "Baangi": "bqx", "Baatonum": "bba", "Baba": "bbw", "Baba Malay": "mbf", "Babango": "bbm", "Babanki": "bbk", "Babatana": "baa", "Babine-Witsuwit'en": "bcr", "Babole": "bvx", "Babungo": "bav", "Babuza": "bzg", "Bacama": "bcy", "Bacanese Malay": "btj", "Bactrian": "xbc", "Bada": "bhz", "Badaga": "bfq", "Badanchi": "bau", "Bade": "bde", "Badeshi": "bdz", "Badimaya": "bia", "Badui": "bac", "Badyara": "pbp", "Baeggu": "bvd", "Baekje": "pkc", "Baelelea": "bvc", "Baenan": "sai-bae", "Baetora": "btr", "Bafanji": "bfj", "Bafaw": "bwt", "Bafia": "ksf", "Bafut": "bfd", "Baga Kaloum": "bqf", "Baga Koga": "bgo", "Baga Manduri": "bmd", "Baga Pokur": "bcg", "Baga Sitemu": "bsp", "Baga Sobané": "bsv", "Bagheli": "bfy", "Bagirmi": "bmi", "Bago-Kusuntu": "bqg", "Bagri": "bgq", "Bagua": "sai-bag", "Bagupi": "bpi", "Bagusa": "bqb", "Bagvalal": "kva", "Baha": "yha", "Baham": "bdw", "Bahamian Creole": "bah", "Baharna Arabic": "abv", "Bahau": "bhv", "Bahinemo": "bjh", "Bahing": "bhj", "Bahnar": "bdq", "Bahonsuai": "bsu", "Bai": "bdj", "Baibai": "bbf", "Baikeno": "bkx", "Baima": "bqh", "Baimak": "bmx", "Bainouk-Gunyaamolo": "bcz", "Bainouk-Gunyuño": "bab", "Bainouk-Samik": "bcb", "Baiso": "bsw", "Baissa Fali": "fah", "Bajan": "bjs", "Bajelani": "bjm", "Baka": "bkc", "Bakairí": "bkq", "Bakaka": "bqz", "Bakhtiari": "bqi", "Baki": "bki", "Bakoko": "bkh", "Bakole": "kme", "Bakpinka": "bbs", "Bakulung": "bbu", "Bakumpai": "bkr", "Bakung": "xkl", "Bakwé": "bjw", "Balaesang": "bls", "Balangao": "blw", "Balangingi": "sse", "Balanta-Ganja": "bjt", "Balanta-Kentohe": "ble", "Balantak": "blz", "Balau": "blg", "Baldemu": "bdn", "Bali": "bcp", "Baliledo": "poz-bal", "Balinese": "ban", "Balinese Malay": "mhp", "Balkan Gagauz Turkish": "bgx", "Balkan Romani": "rmn", "Balo": "bqo", "Baloi": "biz", "Balong": "bnt-bal", "Balti": "bft", "Baltic Romani": "rml", "Baluan-Pam": "blq", "Baluchi": "bal", "Bamako Sign Language": "bog", "Bamali": "bbq", "Bambalang": "bmo", "Bambam": "ptu", "Bambara": "bm", "Bambassi": "myf", "Bambili-Bambui": "baw", "Bamenyam": "bce", "Bamu": "bcf", "Bamukumbit": "bqt", "Bamum": "bax", "Bamunka": "bvm", "Bamwe": "bmg", "Ban Khor Sign Language": "bfk", "Bana": "bcw", "Banam Bay": "vrt", "Banao Itneg": "bjx", "Banaro": "byz", "Banda": "bnd", "Banda Malay": "bpq", "Banda-Bambari": "liy", "Banda-Banda": "bpd", "Banda-Mbrès": "bqk", "Banda-Ndélé": "bfl", "Banda-Yangere": "yaj", "Bandi": "bza", "Bandial": "bqj", "Bandjalang": "bdy", "Bangala": "bxg", "Bangandu": "bgf", "Bangba": "bbe", "Banggai": "bgz", "Bangi": "bni", "Bangime": "dba", "Bangka": "mfb", "Bangolan": "bgj", "Bangubangu": "bnx", "Bangwinji": "bsj", "Baniva": "bvv", "Baniwa": "bwi", "Banjarese": "bjn", "Banka": "bxw", "Bankan Tey Dogon": "dbw", "Bankon": "abb", "Banoni": "bcm", "Bantawa": "bap", "Bantayanon": "bfx", "Bantik": "bnq", "Banyumasan": "map-bms", "Baoule": "bci", "Baraamu": "brd", "Barai": "bbb", "Barakai": "baj", "Baram Kayan": "kys", "Barama": "bbg", "Barambu": "brm", "Baramu": "bmz", "Barapasi": "brp", "Baras": "brs", "Barasana": "bsn", "Barbareño": "boi", "Barclayville Grebo": "gry", "Bardi": "bcj", "Barein": "bva", "Bargam": "mlp", "Bari": "bfa", "Bariai": "bch", "Bariji": "bjc", "Barikanchi": "bxo", "Barikewa": "jbk", "Barngarla": "bjb", "Barok": "bjk", "Barombi": "bbi", "Barranbinya": "aus-bra", "Barro Negro Tunebo": "tbn", "Barrow Point": "bpt", "Baruga": "bjz", "Barunggam": "aus-brm", "Baruya": "byr", "Barwe": "bwg", "Barzani Jewish Neo-Aramaic": "bjf", "Baré": "bae", "Barí": "mot", "Basa": "bzw", "Basa-Gumna": "bsl", "Basa-Gurmana": "buj", "Basaa": "bas", "Basap": "bdb", "Basay": "byq", "Bashkardi": "bsg", "Bashkir": "ba", "Basketo": "bst", "Basque": "eu", "Bassa": "bsq", "Bassa-Kontagora": "bsr", "Bassari": "bsc", "Bassossi": "bsi", "Bata": "bta", "Bataan Ayta": "ayt", "Batad Ifugao": "ifb", "Batanga": "bnm", "Batek": "btq", "Bateri": "btv", "Bathari": "bhm", "Bati (Cameroon)": "btc", "Bati (Indonesia)": "bvt", "Bats": "bbl", "Batu": "btu", "Batui": "zbt", "Batuley": "bay", "Bau": "bbd", "Bau Bidayuh": "sne", "Bauchi": "bsf", "Baure": "brg", "Bauria": "bge", "Bauro": "bxa", "Bauwaki": "bwk", "Bauzi": "bvz", "Bavarian": "bar", "Bawm Chin": "bgr", "Bay Miwok": "mkq", "Bayali": "bjy", "Baybayanon": "bvy", "Baygo": "byg", "Bayogoula": "nai-bay", "Bayono": "byl", "Bayot": "bda", "Bayungu": "bxj", "Bazigar": "bfr", "Baïnounk Gubëeher": "alv-bgu", "Beami": "beo", "Beaver": "bea", "Beba": "bfp", "Bebe": "bzv", "Bebele": "beb", "Bebeli": "bek", "Bebil": "bxp", "Bedik": "tnr", "Bedjond": "bjv", "Bedoanas": "bed", "Beeke": "bkf", "Beele": "bxq", "Beembe": "beq", "Beezen": "bnz", "Befang": "bby", "Begbere-Ejar": "bqv", "Beja": "bej", "Bekati'": "bei", "Bekwarra": "bkv", "Bekwel": "bkw", "Belait": "beg", "Belanda Bor": "bxb", "Belanda Viri": "bvi", "Belarusian": "be", "Belhariya": "byw", "Beli": "blm", "Belizean Creole": "bzj", "Bella Coola": "blc", "Bellari": "brw", "Bemba": "bem", "Bembe": "bmb", "Ben Tey": "dbt", "Bena": "yun", "Benabena": "bef", "Bench": "bcq", "Bende": "bdp", "Bendi": "bct", "Beneraf": "bnv", "Beng": "nhb", "Benga": "bng", "Bengali": "bn", "Benggoi": "bgy", "Bengkala Sign Language": "bqy", "Bentong": "bnu", "Benyadu'": "byd", "Beothuk": "bue", "Bepour": "bie", "Bera": "brf", "Berakou": "bxv", "Berau Malay": "bve", "Berawan": "lod", "Berbice Creole Dutch": "brc", "Bergish": "gmw-bgh", "Berik": "bkl", "Berinomo": "bit", "Berom": "bom", "Berta": "wti", "Berti": "byt", "Besisi": "mhe", "Besme": "bes", "Besoa": "bep", "Betaf": "bfe", "Betawi": "bew", "Bete": "byf", "Bete-Bendi": "btt", "Betoi": "sai-bet", "Betta Kurumba": "xub", "Bezhta": "kap", "Bhadrawahi": "bhd", "Bhalay": "bhx", "Bharia": "bha", "Bhatri": "bgw", "Bhattiyali": "bht", "Bhaya": "bhe", "Bhele": "bhy", "Bhilali": "bhi", "Bhili": "bhb", "भोजपुरी": "bho", "Bhoti Kinnauri": "nes", "Bhunjia": "bhu", "Biafada": "bif", "Biage": "bdf", "Biak": "bhw", "Biali": "beh", "Bian Marind": "bpv", "Biangai": "big", "Biao": "byk", "Biao Mon": "bmt", "Biao-Jiao Mien": "bje", "Biatah Bidayuh": "bth", "Bibaali": "bcn", "Bibbulman": "xbp", "Bidiyo": "bid", "Bidyara": "bym", "Bidyogo": "bjg", "Biem": "bmc", "Bierebo": "bnk", "Bieria": "brj", "Biete": "biu", "Big Nambas": "nmb", "Biga": "bhc", "Bigambal": "xbe", "Bih": "ibh", "Bihari": "bh", "Bijori": "bix", "Bikaru": "bic", "Bikol Central": "bcl", "Bikya": "byb", "Bila": "bip", "Bilakura": "bql", "Bilaspuri": "kfs", "Bilba": "bpz", "Bilbil": "brz", "Bile": "bil", "Biliau": "bcu", "Biloxi": "bll", "Bilua": "blb", "Bilur": "bxf", "Bima": "bhp", "Bimin": "bhl", "Bimoba": "bim", "Bina": "bmn", "Binahari": "bxz", "Binandere": "bhg", "Binawa": "byj", "Bindal": "xbd", "Bine": "bon", "Binji": "bpj", "Binongan Itneg": "itb", "Bintauna": "bne", "Bintulu": "bny", "Binukid": "bkd", "Binumarien": "bjr", "Bipi": "biq", "Birao": "brr", "Birgid": "brk", "Birgit": "btf", "Birhor": "biy", "Biri": "bzr", "Biritai": "bqq", "Birri": "bvq", "Birrpayi": "xbj", "Birwa": "brl", "Biseni": "ije", "Bishnupriya Manipuri": "bpy", "Bishuo": "bwh", "Bisis": "bnw", "Bislama": "bi", "Bisorio": "bir", "Bissa": "bib", "Bisu": "bzi", "Bit": "bgk", "Bitare": "brt", "Bitur": "mcc", "Biwat": "bwm", "Biyo": "byo", "Biyom": "bpm", "Blablanga": "blp", "Black Speech": "art-bsp", "Blackfoot": "bla", "Blafe": "bfh", "Blagar": "beu", "Blang": "blr", "Blin": "byn", "Bo": "bgl", "Bo-Rukul": "mae", "Bo-Ung": "mux", "Boano (Maluku)": "bzn", "Boano (Sulawesi)": "bzl", "Bobongko": "bgb", "Bobot": "bty", "Bodo (Central Africa)": "boy", "Bodo (India)": "brx", "Bodo Gadaba": "gbj", "Bodo Parja": "bdv", "Bofi": "bff", "Boga": "bvw", "Bogaya": "boq", "Boghom": "bux", "Boguru": "bqu", "Bohtan Neo-Aramaic": "bhn", "Boikin": "bzf", "Bokar": "sit-bok", "Bokha": "ybk", "Boko": "bqc", "Bokobaru": "bus", "Bokoto": "bdt", "Bokyi": "bky", "Bola": "bnp", "Bolak": "art-blk", "Bolango": "bld", "Bole": "bol", "Bolgo": "bvo", "Bolia": "bli", "Bolinao": "smk", "Bolivian Sign Language": "bvl", "Boloki": "bkt", "Bolon": "bof", "Bolondo": "bzm", "Bolongan": "blj", "Bolyu": "ply", "Bom": "bmf", "Boma Nkuu": "bnt-bon", "Boma Yumu": "bnt-boy", "Bomboli": "bml", "Bomboma": "bws", "Bomitaba": "zmx", "Bomu": "bmq", "Bomwali": "bmw", "Bon Gula": "glc", "Bonan": "peh", "Bondei": "bou", "Bondo": "bfw", "Bondoukou Kulango": "kzc", "Bondum Dom Dogon": "dbu", "Bonerate": "bna", "Bonggi": "bdg", "Bonggo": "bpg", "Bongili": "bui", "Bongo": "bot", "Bongu": "bpu", "Bonjo": "bok", "Bonkeng": "bvg", "Bonkiman": "bop", "Bookan": "bnb", "Boon": "bnl", "Boor": "bvf", "Bora": "boa", "Border Kuna": "kvn", "Borei": "gai", "Boro": "xxb", "Borong": "ksr", "Boruca": "brn", "Borôro": "bor", "Boselewa": "bwf", "Bosngun": "bqs", "Bote-Majhi": "bmj", "Botlikh": "bph", "Botolan Sambal": "sbl", "Bouna Kulango": "nku", "Bourbonnais-Berrichon": "roa-bbn", "Bourguignon": "roa-brg", "Bouyei": "pcc", "Bozaba": "bzo", "Bragat": "aof", "Brahui": "brh", "Braj": "bra", "Brazilian Sign Language": "bzs", "Brek Karen": "kvl", "Brem": "buq", "Breri": "brq", "Breton": "br", "Bribri": "bzd", "British Sign Language": "bfi", "Brokkat": "bro", "Brokpake": "sgt", "Brokskat": "bkk", "Brooke's Point Palawano": "plw", "Broome Pearling Lugger Pidgin": "bpl", "Brunei Bisaya": "bsb", "Brunei Malay": "kxd", "Bruny Island": "xpz", "Bu": "jid", "Bu-Nao Bunu": "bwx", "Bua": "bub", "Bualkhaw Chin": "cbl", "Buamu": "box", "Bube": "bvb", "Bubi": "buw", "Bubia": "bbx", "Budeh Stieng": "stt", "Budibud": "btp", "Budong-Budong": "bdx", "Budu": "buu", "Budukh": "bdk", "Buduma": "bdm", "Budza": "bja", "Buena Vista Yokuts": "nai-bvy", "Bugan": "bbh", "Bughotu": "bgt", "Buginese": "bug", "Buglere": "sab", "Bugun": "bgg", "Buhi'non Bikol": "ubl", "Buhid": "bku", "Buhutu": "bxh", "Bujhyal": "byh", "Bukar-Sadung Bidayuh": "sdo", "Bukat": "bvk", "Bukawa": "buk", "Bukhari": "bhh", "Bukit Malay": "bvu", "Bukitan": "bkn", "Bukiyip": "ape", "Buksa": "tkb", "Bukusu": "bxk", "Bulgar": "xbo", "Bulgarian": "bg", "Bulgarian Sign Language": "bqn", "Bulgebi": "bmp", "Buli (Ghana)": "bwu", "Buli (Indonesia)": "bzq", "Bulo Stieng": "sti", "Bulu (Cameroon)": "bum", "Bulu (New Guinea)": "bjl", "Bum": "bmv", "Bumaji": "byp", "Bumang": "bvp", "Bumbita Arapesh": "aon", "Bumthangkha": "kjz", "Bun": "buv", "Buna": "bvn", "Bunaba": "bck", "Bunak": "bfn", "Bunama": "bdd", "Bundeli": "bns", "Bung": "bqd", "Bungain": "but", "Bunganditj": "xbg", "Bungku": "bkz", "Bungu": "wun", "Bunoge": "dgb", "Bunun": "bnn", "Buol": "blf", "Bura": "bwr", "Bura Mabang": "mde", "Burak": "bys", "Buraka": "bkg", "Burarra": "bvr", "Burate": "bti", "Burduna": "bxn", "Bure": "bvh", "Burgundian": "gem-bur", "Burji": "bji", "Burmese": "my", "Burmeso": "bzu", "Buru (Indonesia)": "mhs", "Buru (Nigeria)": "bqw", "Burui": "bry", "Burumakok": "aip", "Burun": "bdi", "Burunge": "bds", "Burushaski": "bsk", "Burusu": "bqr", "Buruwai": "asi", "Buryat": "bua", "Busa": "bqp", "Busam": "bxs", "Busami": "bsm", "Busang Kayan": "bfg", "Bushoong": "buf", "Buso": "bso", "Busoa": "bup", "Bussa": "dox", "Busuu": "bju", "Butbut Kalinga": "kyb", "Butchulla": "xby", "Butmas-Tur": "bnr", "Butuanon": "btw", "Buwal": "bhs", "Buyeo": "xpy", "Buyu": "byi", "Buyuan Jinuo": "jiy", "Bwa": "bww", "Bwaidoka": "bwd", "Bwala": "bnt-bwa", "Bwanabwana": "tte", "Bwatoo": "bwa", "Bwe Karen": "bwe", "Bwela": "bwl", "Bwile": "bwc", "Bwisi": "bwz", "Byangsi": "bee", "Byep": "mkk", "Bädi Kanum": "khd", "Caac": "msq", "Cabiyarí": "cbb", "Cabécar": "cjp", "Cacaloxtepec Mixtec": "miu", "Cacaopera": "ccr", "Cacgia Roglai": "roc", "Cacua": "cbv", "Cacán": "sai-cac", "Caddo": "cad", "Cafundó": "ccd", "Cahuarano": "cah", "Cahuilla": "chl", "Cajonos Zapotec": "zad", "Caka": "ckx", "Cakchiquel-Quiché Mixed Language": "ckz", "Cakfem-Mushere": "cky", "Calabrian Greek": "grk-cal", "Calamian Tagbanwa": "tbk", "Callawalla": "caw", "Calusa": "nai-cal", "Caluyanun": "clu", "Caló": "rmq", "Camarines Norte Agta": "abd", "Cameroon Mambila": "mcu", "Cameroon Pidgin": "wes", "Campalagian": "cml", "Camsá": "kbh", "Camtho": "cmt", "Camunic": "xcc", "Candoshi-Shapra": "cbu", "Canela": "ram", "Canichana": "caz", "Cantonese": "yue", "Cao Miao": "cov", "Caolan": "mlc", "Capanahua": "kaq", "Capiznon": "cps", "Cappadocian Greek": "cpg", "Caquinte": "cot", "Car Nicobarese": "caq", "Cara": "cfd", "Carabayo": "cby", "Caramanta": "crf", "Caranqui": "sai-caq", "Carapana": "cbc", "Carian": "xcr", "Cariay": "awd-kar", "Caribbean Hindustani": "hns", "Caribbean Javanese": "jvn", "Carijona": "cbd", "Carolina Algonquian": "crr", "Carolinian": "cal", "Carpathian Romani": "rmc", "Carrier": "crx", "Cashibo-Cacataibo": "cbr", "Cashinahua": "cbs", "Casiguran Dumagat Agta": "dgc", "Casuarina Coast Asmat": "asc", "Catacao": "sai-cat", "Catalan": "ca", "Catalan Sign Language": "csc", "Catawba": "chc", "Catuquinaru": "sai-ctq", "Catío Chibcha": "cba-cat", "Cauca": "cca", "Cavere": "awd-cav", "Cavineña": "cav", "Cayubaba": "cyb", "Cayuga": "cay", "Cayuse": "xcy", "Cazcan": "azc-caz", "Cañari": "sai-cnr", "Cebaara Senoufo": "sef", "Cebuano": "ceb", "Celtiberian": "xce", "Cemuhî": "cam", "Cen": "cen", "Central Asmat": "cns", "Central Atlas Tamazight": "tzm", "Central Awyu": "awu", "Central Bai": "bca", "Central Bontoc": "lbk", "Central Cagayan Agta": "agt", "Central Dusun": "dtp", "Central Franconian": "gmw-cfr", "Central Grebo": "grv", "Central Huasteca Nahuatl": "nch", "Central Huishui Hmong": "hmc", "Central Kurdish": "ckb", "Central Maewo": "mwo", "Central Mahuatlán Zapoteco": "zam", "Central Malay": "pse", "Central Masela": "mxz", "Central Mashan Hmong": "hmm", "Central Mazahua": "maz", "Central Melanau": "mel", "Central Mnong": "cmo", "Central Nahuatl": "nhn", "Central Nicobarese": "ncb", "Central Ojibwa": "ojc", "Central Palawano": "plc", "Central Pame": "pbs", "Central Pomo": "poo", "Central Puebla Nahuatl": "ncx", "Central Sama": "sml", "Central Siberian Yupik": "ess", "Central Sierra Miwok": "csm", "Central Subanen": "syb", "Central Tagbanwa": "tgt", "Central Tarahumara": "tar", "Central Teke": "nzu", "Central Tunebo": "tuf", "Centúúm": "cet", "Cerma": "cme", "Ch'olti'": "myn-chl", "Ch'orti'": "caa", "Chaap Wuurong": "tjw", "Chachi": "cbi", "Chadian Arabic": "shu", "Chadian Sign Language": "cds", "Chadong": "cdy", "Chagatai": "chg", "Chaha": "sem-cha", "Chaima": "ciy", "Chairel": "sit-cha", "Chak": "ckh", "Chakali": "cli", "Chakma": "ccp", "Chala": "cll", "Chaldean Neo-Aramaic": "cld", "Chali": "tgf", "Chamacoco": "ceg", "Chamalal": "cji", "Chamba Daka": "ccg", "Chamba Leko": "ndi", "Chambeali": "cdh", "Chambri": "can", "Chamicuro": "ccc", "Chamling": "rab", "Chamorro": "ch", "Champenois": "roa-cha", "Chang": "nbc", "Changriwa": "cga", "Changthang": "cna", "Chantyal": "chx", "Chaná": "sai-chn", "Chané": "caj", "Chapacura": "sai-chp", "Chara": "cra", "Charrua": "sai-chr", "Chaudangsi": "cdn", "Chaura": "crv", "Chavacano": "cbk", "Chayahuita": "cbt", "Chayuco Mixtec": "mih", "Chazumba Mixtec": "xtb", "Che": "ruk", "Chechen": "ce", "Cheke Holo": "mrn", "Chemakum": "xch", "Chenapian": "cjn", "Chenchu": "cde", "Chenoua": "cnu", "Chepang": "cdm", "Chepya": "ycp", "Cherepon": "cpn", "Cherokee": "chr", "Chesu": "ych", "Chetco-Tolowa": "ctc", "Chewong": "cwg", "Cheyenne": "chy", "Chhattisgarhi": "hne", "Chhintange": "ctn", "Chhulung": "cur", "Chiangmai Sign Language": "csd", "Chiapanec": "cip", "Chibcha": "chb", "Chicahuaxtla Triqui": "trs", "Chichewa": "ny", "Chichicapan Zapotec": "zpv", "Chichimeca-Jonaz": "pei", "Chichonyi-Chidzihana-Chikauma": "coh", "Chickasaw": "cic", "Chicomuceltec": "cob", "Chiduruma": "dug", "Chigmecatitlán Mixtec": "mii", "Chilcotin": "clc", "Chilean Sign Language": "csg", "Chilisso": "clh", "Chiltepec Chinantec": "csa", "Chimalapa Zoque": "zoh", "Chimariko": "cid", "Chimila": "cbg", "Chimwiini": "bnt-cmw", "Chinali": "cih", "Chinbon Chin": "cnb", "Chinese": "zh", "Chinese Pidgin English": "cpi", "Chinese Sign Language": "csl", "Chinook": "chh", "Chinook Jargon": "chn", "Chipaya": "cap", "Chipewyan": "chp", "Chiquihuitlán Mazatec": "maq", "Chiquimulilla": "nai-chi", "Chiquitano": "cax", "Chiricahua": "apm", "Chirino": "sai-chi", "Chiripá": "nhd", "Chiru": "cdf", "Chitimacha": "ctm", "Chitkuli Kinnauri": "cik", "Chittagonian": "ctg", "Chitwania Tharu": "the", "Chiwere": "iow", "Choapan Zapotec": "zpc", "Chocangaca": "cgk", "Chochotec": "coz", "Choctaw": "cho", "Chodri": "cdi", "Chokri Naga": "nri", "Chokwe": "cjk", "Chol": "ctu", "Cholón": "cht", "Chong": "cog", "Choni": "cda", "Chono": "sai-cno", "Chopi": "cce", "Chothe Naga": "nct", "Chrau": "crw", "Chru": "cje", "Chuabo": "chw", "Chuanqiandian Cluster Miao": "cqd", "Chuave": "cjv", "Chug": "cvg", "Chuj": "cac", "Chuka": "cuh", "Chukchi": "ckt", "Chukwa": "cuw", "Chulym": "clw", "Chumburung": "ncu", "Churahi": "cdj", "Churuya": "sai-chu", "Chut": "scb", "Chuukese": "chk", "Chuvan": "xcv", "Chuvash": "cv", "Chácobo": "cao", "Ci Gbe": "cib", "Cia-Cia": "cia", "Cibak": "ckl", "Cicipu": "awc", "Ciguayo": "nai-cig", "Cimbrian": "cim", "Cinamiguin Manobo": "mkx", "Cinda-Regi-Tiyal": "cdr", "Cineni": "cie", "Cinta Larga": "cin", "Cishingini": "asg", "Citak": "txt", "Ciwogai": "tgd", "Classical Guaraní": "gn-cls", "Classical Mandaic": "myz", "Classical Mongolian": "cmg", "Classical Nahuatl": "nci", "Classical Newar": "nwc", "Classical Quechua": "qwc", "Classical Syriac": "syc", "Classical Tibetan": "xct", "Coahuilteco": "xcw", "Coast Miwok": "csi", "Coastal Kadazan": "kzj", "Coastal Konjo": "kjc", "Coatecas Altas Zapotec": "zca", "Coatepec Nahuatl": "naz", "Coatlán Mixe": "mco", "Coatlán Zapotec": "zps", "Coatzospan Mixtec": "miz", "Cocama": "cod", "Cochimi": "coj", "Cocopa": "coc", "Cocos Islands Malay": "coa", "Coeruna": "sai-coe", "Coeur d'Alene": "crd", "Cofán": "con", "Cogui": "kog", "Col": "liw", "Colombian Sign Language": "csn", "Colonia Tovar German": "gct", "Columbia-Wenatchi": "col", "Colán": "sai-col", "Comaltepec Chinantec": "cco", "Comanche": "com", "Comechingon": "sai-cmg", "Comecrudo": "xcm", "Communicationssprache": "art-com", "Como Karim": "cfg", "Comox": "coo", "Con": "cno", "Coos": "csz", "Copainalá Zoque": "zoc", "Copala Triqui": "trc", "Copallén": "sai-cop", "Coptic": "cop", "Coquille": "coq", "Cora": "crn", "Cori": "cry", "Cornish": "kw", "Coroado Puri": "sai-crd", "Corsican": "co", "Cosoleacaque Nahuatl": "nhk", "Costa Rican Sign Language": "csr", "Cotabato Manobo": "mta", "Cotoname": "xcn", "Cowlitz": "cow", "Coyaima": "coy", "Coyotepec Popoloca": "pbf", "Coyutla Totonac": "toc", "Cree": "cr", "Creek": "mus", "Crimean Gothic": "gme-cgo", "Crimean Tatar": "crh", "Croatian Sign Language": "csq", "Cross River Mbembe": "mfn", "Crow": "cro", "Cruzeño": "crz", "Cua": "cua", "Cuban Sign Language": "csf", "Cubeo": "cub", "Cueva": "sai-cva", "Cuiba": "cui", "Cuitlatec": "cuy", "Culina": "cul", "Culli": "sai-cul", "Cumanagoto": "cuo", "Cumbric": "xcb", "Cun": "cuq", "Cung": "cug", "Cupeño": "cup", "Curonian": "xcu", "Curripaco": "kpc", "Cutchi-Swahili": "ccl", "Cuvok": "cuv", "Cuyamecalco Mixtec": "xtu", "Cuyunon": "cyo", "Cwi Bwamu": "bwy", "Cypriot Arabic": "acy", "Czech": "cs", "Czech Sign Language": "cse", "Côông": "cnc", "Da'a Kaili": "kzf", "Daai Chin": "dao", "Daantanai'": "lni", "Daasanach": "dsh", "Daba": "dbq", "Dabarre": "dbr", "Dabe": "dbe", "Dacian": "xdc", "Dadanitic": "sem-dad", "Dadi Dadi": "dda", "Dadibi": "mps", "Dadiya": "dbd", "Daga": "dgz", "Dagaari Dioula": "dgd", "Dagba": "dgk", "Dagbani": "dag", "Dagik": "dec", "Dagoman": "dgn", "Dahalik": "dlk", "Dahalo": "dal", "Daho-Doo": "das", "Dai": "dij", "Dair": "drb", "Dairi Batak": "btd", "Dakaka": "bpa", "Dakka": "dkk", "Dakota": "dak", "Dakpa": "dka", "Dalmatian": "dlm", "Daloa Bété": "bev", "Dama (Nigeria)": "dmm", "Dama (Sierra Leone)": "dmn-dam", "Damakawa": "dam", "Damal": "uhn", "Dambi": "dac", "Dameli": "dml", "Dampelas": "dms", "Dan": "dnj", "Danaru": "dnr", "Danau": "dnu", "Dandami Maria": "daq", "Dangaléat": "daa", "Dangaura Tharu": "thl", "Danish": "da", "Danish Sign Language": "dsl", "Dano": "aso", "Danu": "dnv", "Danuwar": "dhw", "Dao": "daz", "Daonda": "dnd", "Dar Daju Daju": "djc", "Dar Fur Daju": "daj", "Dar Sila Daju": "dau", "Darai": "dry", "Dargwa": "dar", "Darkinjung": "xda", "Darlong": "dln", "Darmiya": "drd", "Daro-Matu Melanau": "dro", "Darumbal": "xgm", "Dass": "dot", "Datooga": "tcc", "Daungwurrung": "dgw", "Daur": "dta", "Davawenyo": "daw", "Dawawa": "dww", "Dawera-Daweloor": "ddw", "Dawro": "dwr", "Day": "dai", "Dayi": "dax", "Dazaga": "dzg", "Deccani": "dcc", "Dedua": "ded", "Defaka": "afn", "Defi Gbe": "gbh", "Deg": "mzw", "Deg Xinag": "ing", "Degema": "deg", "Degenan": "dge", "Dehwari": "deh", "Dek": "dek", "Dela-Oenale": "row", "Delo": "ntr", "Delta Yokuts": "nai-dly", "Dem": "dem", "Dema": "dmx", "Demisa": "dei", "Demotic": "egx-dem", "Demta": "dmy", "Dena'ina": "tfn", "Dendi": "ddn", "Dengese": "dez", "Dengka": "dnk", "Deno": "dbb", "Denya": "anv", "Dení": "dny", "Deori": "der", "Desano": "des", "Desiya": "dso", "Dewas Rai": "dwz", "Dewoin": "dee", "Dezfuli": "def", "Dghwede": "dgh", "Dhaiso": "dhs", "Dhalandji": "dhl", "Dhangu": "dhg", "Dhanki": "dhn", "Dhao": "nfa", "Dharug": "xdk", "Dhatki": "mki", "Dhimal": "dhi", "Dhivehi": "dv", "Dhodia": "dho", "Dhofari Arabic": "adf", "Dhudhuroa": "ddr", "Dhungaloo": "dhx", "Dhurga": "dhu", "Dhuwal": "dwu", "Dhuwaya": "dwy", "Dia": "dia", "Dibabawon Manobo": "mbd", "Dibiyaso": "dby", "Dibo": "dio", "Dicamay Agta": "duy", "Didinga": "did", "Dieri": "dif", "Digo": "dig", "Dii": "dur", "Dijim-Bwilim": "cfa", "Dilling": "dil", "Dima": "jma", "Dimasa": "dis", "Dimbong": "dii", "Dime": "dim", "Dinapigue Agta": "phi-din", "Dineor": "mrx", "Ding": "diz", "Dinka": "din", "Diodio": "ddi", "Dirasha": "gdl", "Diri": "dwa", "Dirim": "dir", "Disa": "dsi", "Ditammari": "tbz", "Ditidaht": "dtd", "Diuwe": "diy", "Diuxi-Tilantongo Mixtec": "xtd", "Dixon Reef": "dix", "Dizin": "mdx", "Djadjawurrung": "dja", "Djambarrpuyngu": "djr", "Djangun": "djf", "Djauan": "djn", "Djawi": "djw", "Djimini": "dyi", "Djinang": "dji", "Djinba": "djb", "Djiwarli": "djl", "Dobel": "kvo", "Dobu": "dob", "Doe": "doe", "Doga": "dgg", "Doghoro": "dgx", "Dogoso": "dgs", "Dogosé": "dos", "Dogri": "doi", "Dogrib": "dgr", "Dogul Dom": "dbg", "Doka": "dbi", "Doko-Uyanga": "uya", "Dolgan": "dlg", "Dom": "doa", "Domaaki": "dmk", "Domari": "rmt", "Dominican Sign Language": "doq", "Dompo": "doy", "Domu": "dof", "Domung": "dev", "Dondo": "dok", "Dong": "doh", "Dongo": "doo", "Dongolawi": "kzh", "Dongotono": "ddd", "Dongshanba Lalo": "yik", "Dongxiang": "sce", "Donno So Dogon": "dds", "Doondo": "dde", "Dorasque": "cba-dor", "Dori'o": "dor", "Dorig": "wwo", "Doromu-Koki": "kqc", "Dorze": "doz", "Doso": "dol", "Doteli": "dty", "Dothraki": "art-dtk", "Doura": "don", "Doutai": "tds", "Doyayo": "dow", "Drehu": "dhv", "Drung": "duu", "Duala": "dua", "Duano": "dup", "Duau": "dva", "Dubli": "dub", "Dubu": "dmu", "Dugun": "ndu", "Duguri": "dbm", "Dugwor": "dme", "Duhwa": "kbz", "Duit": "cba-dui", "Duke": "nke", "Dukhan": "trk-dkh", "Dulbu": "dbo", "Duli": "duz", "Duma": "dma", "Dumaitic": "sem-dum", "Dumbea": "duf", "Dumi": "dus", "Dumpas": "dmv", "Dumun": "dui", "Duna": "duc", "Dungan": "dng", "Dungmali": "raa", "Dungra Bhil": "duh", "Dungu": "dbv", "Dupaningan Agta": "duo", "Dura": "drq", "Duri": "mvp", "Duriankere": "dbn", "Duruwa": "pci", "Dusner": "dsn", "Dusun Deyah": "dun", "Dusun Malang": "duq", "Dusun Witu": "duw", "Dutch": "nl", "Dutch Low Saxon": "nds-nl", "Dutch Sign Language": "dse", "Duun": "dux", "Duupa": "dae", "Duvle": "duv", "Duwai": "dbp", "Duwet": "gve", "Dwang": "nnu", "Dyaabugay": "dyy", "Dyaberdyaber": "dyb", "Dyan": "dya", "Dyangadi": "dyn", "Dyirbal": "dbl", "Dyugun": "dyd", "Dyula": "dyu", "Dza": "jen", "Dzala": "dzl", "Dzando": "dzn", "Dzao Min": "bpn", "Dzodinka": "add", "Dzongkha": "dz", "Dzuun": "dnn", "Dâw": "kwa", "E": "eee", "E'ma Buyang": "yzg", "Early Assamese": "inc-oas", "Early Modern Korean": "ko-ear", "Early Tripuri": "xtr", "East Central German": "gmw-ecg", "East Damar": "dmr", "East Franconian": "vmf", "East Futuna": "fud", "East Kewa": "kjs", "East Limba": "lma", "East Makian": "mky", "East Masela": "vme", "East Nyala": "nle", "East Tarangan": "tre", "East Yugur": "yuy", "Eastern Acipa": "acp", "Eastern Arrernte": "aer", "Eastern Bolivian Guaraní": "gui", "Eastern Bontoc": "ebk", "Eastern Bru": "bru", "Eastern Canadian Inuktitut": "ike", "Eastern Cham": "cjm", "Eastern Durango Nahuatl": "azd", "Eastern Gorkha Tamang": "tge", "Eastern Gurung": "ggn", "Eastern Highland Chatino": "cly", "Eastern Highland Otomi": "otm", "Eastern Huasteca Nahuatl": "nhe", "Eastern Huishui Hmong": "hme", "Eastern Karaboro": "xrb", "Eastern Katu": "ktv", "Eastern Kayah": "eky", "Eastern Keres": "kee", "Eastern Krahn": "kqo", "Eastern Lalu": "yit", "Eastern Lawa": "lwl", "Eastern Magar": "mgp", "Eastern Maninkakan": "emk", "Eastern Mari": "mhr", "Eastern Meohang": "emg", "Eastern Mnong": "mng", "Eastern Muria": "emu", "Eastern Ngad'a": "nea", "Eastern Nisu": "nos", "Eastern Ojibwa": "ojg", "Eastern Parbate Kham": "kif", "Eastern Penan": "pez", "Eastern Pomo": "peb", "Eastern Pwo": "kjp", "Eastern Qiandong Miao": "hmq", "Eastern Tamang": "taj", "Eastern Tawbuid": "bnj", "Eastern Xiangxi Miao": "muq", "Eastern Xwla Gbe": "gbx", "Ebira": "igb", "Eblaite": "xeb", "Ebrié": "ebr", "Ebughu": "ebg", "Ecuadorian Sign Language": "ecs", "Ede Cabe": "cbj", "Ede Ica": "ica", "Ede Idaca": "idd", "Ede Ije": "ijj", "Ede Nago": "nqg", "Edera Awyu": "awy", "Edo": "bin", "Edolo": "etr", "Edomite": "xdm", "Edopi": "dbf", "Efai": "efa", "Efe": "efe", "Efik": "efi", "Efutop": "ofu", "Ega": "ega", "Eggon": "ego", "Egyptian": "egy", "Egyptian Arabic": "arz", "Egyptian Sign Language": "esl", "Ehueun": "ehu", "Eipomek": "eip", "Eitiep": "eit", "Ejagham": "etu", "Ejamat": "eja", "Ekajuk": "eka", "Ekari": "ekg", "Ekele": "khy", "Eki": "eki", "Ekit": "eke", "Ekpeye": "ekp", "El Alto Zapotec": "zpp", "El Hugeirat": "elh", "El Molo": "elo", "Elamite": "elx", "Eleme": "elm", "Elepi": "ele", "Elfdalian": "ovd", "Elip": "ekm", "Elkei": "elk", "Eloi": "art-elo", "Elotepec Zapotec": "zte", "Eloyi": "afo", "Elseng": "mrf", "Elu": "elu", "Elymian": "xly", "Emae": "mmw", "Emai": "ema", "Eman": "emn", "Embaloh": "emb", "Emberá-Baudó": "bdc", "Emberá-Catío": "cto", "Emberá-Chamí": "cmi", "Emberá-Tadó": "tdc", "Embu": "ebu", "Emem": "enr", "Emerillon": "eme", "Emilian": "egl", "Emplawas": "emw", "En": "enc", "Enawené-Nawé": "unk", "Ende": "end", "Enga": "enq", "Engenni": "enn", "Enggano": "eno", "English": "en", "Enlhet": "enl", "Enrekang": "ptt", "Enu": "enu", "Enwan": "env", "Enwang": "enw", "Enxet": "enx", "Enya": "gey", "Eotile": "eot", "Epena": "sja", "Epi-Olmec": "xep", "Epie": "epi", "Epigraphic Mayan": "emy", "Eravallan": "era", "Erave": "kjy", "Ere": "twp", "Erie": "iro-ere", "Eritai": "ert", "Erokwanas": "erw", "Erre": "err", "Erromintxela": "emx", "Ersu": "ers", "Eruwa": "erh", "Erzya": "myv", "Esan": "ish", "Ese": "mcq", "Ese Ejja": "ese", "Eshtehardi": "esh", "Esimbi": "ags", "Eskayan": "esy", "Esmeralda": "sai-esm", "Esperanto": "eo", "Esselen": "esq", "Estado de México Otomi": "ots", "Estonian": "et", "Estonian Sign Language": "eso", "Esuma": "esm", "Etchemin": "etc", "Etebi": "etb", "Eten": "etx", "Eteocretan": "ecr", "Eteocypriot": "ecy", "Ethiopian Sign Language": "eth", "Etkywan": "ich", "Eton (Cameroon)": "eto", "Eton (Vanuatu)": "etn", "Etruscan": "ett", "Etulo": "utr", "Evant": "bzz", "Even": "eve", "Evenki": "evn", "Ewage-Notu": "nou", "Ewarhuyana": "sai-ewa", "Ewe": "ee", "Ewondo": "ewo", "Extremaduran": "ext", "Eyak": "eya", "Ezaa": "eza", "Fagani": "faf", "Faire Atta": "azt", "Faita": "faj", "Faiwol": "fai", "Fakkanci": "gel", "Fala": "fax", "Falam Chin": "cfm", "Fali": "fli", "Faliscan": "xfa", "Fam": "fam", "Fanagalo": "fng", "Fanamaket": "bjp", "Fang (Bantu)": "fan", "Fang (Beboid)": "fak", "Fania": "fni", "Far Western Muria": "fmu", "Farefare": "gur", "Faroese": "fo", "Fas": "fqs", "Fasu": "faa", "Fataleka": "far", "Fataluku": "ddg", "Fayu": "fau", "Fe'fe'": "fmp", "Fedan": "pdn", "Fembe": "agl", "Fer": "kah", "Feroge": "fer", "Fiji Hindi": "hif", "Fijian": "fj", "Filomena Mata-Coahuitlán Totonac": "tlp", "Finisterre Yau": "yuw", "Finnish": "fi", "Finnish Sign Language": "fse", "Finnish-Swedish Sign Language": "fss", "Finongan": "fag", "Fipa": "fip", "Firan": "fir", "Fiwaga": "fiw", "Flemish Sign Language": "vgt", "Flinders Island": "fln", "Foau": "flh", "Fogaha": "ber-fog", "Foi": "foi", "Foia Foia": "ffi", "Folopa": "ppo", "Foma": "fom", "Fon": "fon", "Fongoro": "fgr", "Foodo": "fod", "Forak": "frq", "Fordata": "frd", "Fore": "for", "Forest Enets": "enf", "Forest Nenets": "syd-fne", "Fortsenal": "frt", "Fox": "sac", "Franc-Comtois": "roa-fcm", "Francisco León Zoque": "zos", "Franco-Provençal": "frp", "French": "fr", "French Belgian Sign Language": "sfb", "French Sign Language": "fsl", "Friulian": "fur", "Fula": "ff", "Fuliiru": "flr", "Fulniô": "fun", "Fum": "fum", "Fungwa": "ula", "Fur": "fvr", "Furu": "fuu", "Futuna-Aniwa": "fut", "Fuyug": "fuy", "Fwe": "fwe", "Fwâi": "fwa", "Fyam": "pym", "Fyer": "fie", "Ga": "gaa", "Ga'anda": "gqa", "Ga'dang": "gdg", "Gaa": "ttb", "Gaam": "tbi", "Gabadi": "kbt", "Gabi": "gbw", "Gabri": "gab", "Gabrielino-Fernandeño": "xgf", "Gadang": "gdk", "Gaddang": "gad", "Gaddi": "gbk", "Gade": "ged", "Gadjerawang": "gdh", "Gadsup": "gaj", "Gafat": "gft", "Gagadu": "gbu", "Gagauz": "gag", "Gagnoa Bété": "btg", "Gahri": "bfu", "Gaikundi": "gbf", "Gaina": "gcn", "Gal": "gap", "Galambu": "glo", "Galatian": "xga", "Galela": "gbi", "Galeya": "gar", "Galibi Carib": "car", "Galice": "gce", "Galician": "gl", "Galindan": "xgl", "Gallaecian": "cel-gal", "Gallo": "roa-gal", "Gallurese": "sdn", "Galo": "adl", "Galoli": "gal", "Gamale Kham": "kgj", "Gambera": "gma", "Gamela": "sai-gam", "Gamilaraay": "kld", "Gamit": "gbl", "Gamkonora": "gak", "Gamo": "gmv", "Gamo-Ningi": "bte", "Gan": "gan", "Gana": "gnq", "Ganang": "gne", "Gandhari": "pgd", "Gane": "gzn", "Ganggalida": "gcd", "Ganglau": "ggl", "Gangte": "gnb", "Gangulu": "gnl", "Gants": "gao", "Ganza": "gza", "Ganzi": "gnz", "Gao": "gga", "Gapapaiwa": "pwg", "Garawa": "wrk", "Garhwali": "gbm", "Garifuna": "cab", "Garingbal": "xgi", "Garo": "grt", "Garre": "gex", "Garus": "gyb", "Garza": "xgr", "Gashowu": "nai-gsy", "Gata'": "gaq", "Gaulish": "cel-gau", "Gavak": "dmc", "Gavar": "gou", "Gavião do Jiparaná": "gvo", "Gawar-Bati": "gwt", "Gawwada": "gwd", "Gayil": "gyl", "Gayo": "gay", "Gayón": "sai-gay", "Gbagyi": "gbr", "Gban": "ggu", "Gbanu": "gbv", "Gbanziri": "gbg", "Gbari": "gby", "Gbaya": "gba", "Gbaya-Bossangoa": "gbp", "Gbaya-Bozoum": "gbq", "Gbaya-Mbodomo": "gmm", "Gbayi": "gyg", "Gbesi Gbe": "gbs", "Gbii": "ggb", "Gbin": "xgb", "Gbiri-Niragu": "grh", "Gboloo Grebo": "gec", "Gciriku": "diu", "Gcwi": "gwj", "Ge": "hmj", "Ge'ez": "gez", "Geba Karen": "kvq", "Gebe": "gei", "Gedaged": "gdd", "Gedeo": "drs", "Geji": "gji", "Geko Karen": "ghk", "Gela": "nlg", "Gelao": "gio", "Gele'": "sbc", "Geme": "geq", "Gen": "gej", "Gende": "gaf", "Gengle": "geg", "Georgian": "ka", "Gepo": "ygp", "Gera": "gew", "Gerka": "gek", "German": "de", "German Low German": "nds-de", "German Sign Language": "gsg", "Geruma": "gea", "Geser-Gorom": "ges", "Gey": "guv", "Ghadames": "gha", "Ghanaian Sign Language": "gse", "Ghandruk Sign Language": "gds", "Ghanongga": "ghn", "Ghari": "gri", "Ghayavi": "bmk", "Ghera": "ghr", "Ghomala'": "bbj", "Ghomara": "gho", "Ghotuo": "aaa", "Ghulfan": "ghl", "Giangan": "bgi", "Gibanawa": "gib", "Gidar": "gid", "Gikyode": "acd", "Gilaki": "glk", "Gilbertese": "gil", "Gilima": "gix", "Gimi (Austronesian)": "gip", "Gimi (Goroka)": "gim", "Gimme": "kmp", "Gimnime": "gmn", "Ginuman": "gnm", "Girawa": "bbr", "Girirra": "gii", "Giryama": "nyf", "Githabul": "gih", "Gitua": "ggt", "Gitxsan": "git", "Giyug": "giy", "Gizrra": "tof", "Glaro-Twabo": "glr", "Glavda": "glw", "Glio-Oubi": "oub", "Glosa": "igs", "Gnau": "gnu", "Goa'uld": "art-gld", "Goaria": "gig", "Gobasi": "goi", "Gobu": "gox", "Godié": "god", "Godoberi": "gdo", "Godwari": "gdx", "Goemai": "ank", "Gofa": "gof", "Gogo": "gog", "Gogodala": "ggw", "Goguryeo": "zkg", "Gojri": "gju", "Gokana": "gkn", "Gokhy": "sit-gkh", "Gola": "gol", "Golin": "gvf", "Golpa": "lja", "Gondi": "gon", "Gone Dau": "goo", "Gong": "ugo", "Gongduk": "goe", "Gonja": "gjn", "Goo": "gov", "Gooniyandi": "gni", "Gor": "gqr", "Gorakor": "goc", "Gorap": "goq", "Goreng": "xgg", "Gorontalo": "gor", "Gorovu": "grq", "Gorowa": "gow", "Gothic": "got", "Gottscheerish": "gmw-gts", "Goundo": "goy", "Gourmanchéma": "gux", "Gowlan": "goj", "Gowro": "gwf", "Gozarkhani": "goz", "Grangali": "nli", "Grass Koiari": "kbk", "Grebo": "grb", "Greek": "el", "Greek Sign Language": "gss", "Green Gelao": "giq", "Green Hmong": "hnj", "Greenlandic": "kl", "Grenadian Creole English": "gcl", "Gresi": "grs", "Groma": "gro", "Gros Ventre": "ats", "Gua": "gwx", "Guahibo": "guh", "Guajajára": "gub", "Guajá": "gvj", "Guambiano": "gum", "Guamo": "sai-gmo", "Guanano": "gvc", "Guanche": "gnc", "Guaraní": "gn", "Guarayu": "gyr", "Guatemalan Sign Language": "gsm", "Guató": "gta", "Guayabero": "guo", "Guazacapán": "nai-guz", "Gudang": "xgd", "Gudanji": "nji", "Gude": "gde", "Gudu": "gdu", "Guduf-Gava": "gdf", "Guerrero Amuzgo": "amu", "Guerrero Nahuatl": "ngu", "Guevea de Humboldt Zapotec": "zpg", "Gugadj": "ggd", "Gugu Badhun": "gdc", "Gugu Warra": "wrw", "Guhu-Samane": "ghs", "Guianese Creole": "gcr", "Guiberoua Bété": "bet", "Guinau": "awd-gnu", "Guinea Kpelle": "gkp", "Guinea-Bissau Creole": "pov", "Guinea-Bissau Sign Language": "lgs", "Guinean Sign Language": "gus", "Guiqiong": "gqi", "Gujarati": "gu", "Gula": "glu", "Gula'alaa": "gmb", "Gulay": "gvl", "Gule": "gly", "Gulf Arabic": "afb", "Gullah": "gul", "Gumalu": "gmu", "Gumatj": "gnn", "Gumawana": "gvs", "Gumuz": "guk", "Gun": "guw", "Gundi": "gdi", "Gunditjmara": "gjm", "Gundungurra": "xrd", "Gungabula": "gyf", "Gungu": "rub", "Guntai": "gnt", "Gunu": "yas", "Gunwinggu": "gup", "Gunya": "gyy", "Gupa-Abawa": "gpa", "Gupapuyngu": "guf", "Gur Lama": "las", "Guragone": "gge", "Guramalum": "grz", "Gurani": "hac", "Gureng Gureng": "gnr", "Gurgula": "ggg", "Guriaso": "grx", "Gurindji": "gue", "Gurjar Apabhramsa": "inc-gup", "Gurmana": "gvm", "Guro": "goa", "Guruntum": "grd", "Gusan": "gsn", "Gusii": "guz", "Gusilay": "gsl", "Gutnish": "gmq-gut", "Guugu Yimidhirr": "kky", "Guwa": "xgw", "Guwamu": "gwu", "Guwar": "aus-guw", "Guya": "gka", "Guyanese Creole English": "gyn", "Guyani": "gvy", "Guébie": "gie", "Gvoko": "ngs", "Gwa": "gwb", "Gwahatike": "dah", "Gwak": "jgk", "Gwamhi-Wuri": "bga", "Gwandara": "gwn", "Gwara": "alv-gwa", "Gweda": "grw", "Gweno": "gwe", "Gwere": "gwr", "Gwich'in": "gwi", "Gyalsumdo": "gyo", "Gyele": "gyi", "Gyem": "gye", "Güenoa": "sai-gue", "Habu": "hbu", "Hadiyya": "hdy", "Hadothi": "hoj", "Hadrami": "xhd", "Hadza": "hts", "Haeke": "aek", "Hahon": "hah", "Haida": "hai", "Haigwai": "hgw", "Hainyaxo Bozo": "bzx", "Haiphong Sign Language": "haf", "Haisla": "has", "Haitian Creole": "ht", "Haitian Vodoun Culture Language": "hvc", "Haiǁom": "hgm", "Haji": "hji", "Hajong": "haj", "Hakka": "hak", "Hakö": "hao", "Halang": "hal", "Halang Doan": "hld", "Halbi": "hlb", "Halia": "hla", "Halkomelem": "hur", "Hamap": "hmu", "Hamba": "hba", "Hamer-Banna": "amf", "Hamtai": "hmt", "Hanga": "hag", "Hanga Hundi": "wos", "Hani": "hni", "Hanoi Sign Language": "hab", "Hanunoo": "hnn", "Harami": "xha", "Harari": "har", "Haraza": "nub-har", "Harijan Kinnauri": "kjo", "Haroi": "hro", "Harsusi": "hss", "Haruai": "tmd", "Haruku": "hrk", "Haryanvi": "bgc", "Harzani": "hrz", "Hasaitic": "sem-has", "Hasha": "ybj", "Hassaniya": "mey", "Hatam": "had", "Hattic": "xht", "Hausa": "ha", "Hausa Sign Language": "hsl", "Haush": "sai-hau", "Havasupai-Walapai-Yavapai": "yuf", "Haveke": "hvk", "Havu": "hav", "Hawai'i Pidgin Sign Language": "hps", "Hawaiian": "haw", "Hawaiian Creole": "hwc", "Haya": "hay", "Hazaragi": "haz", "Hdi": "xed", "Hebrew": "he", "Hehe": "heh", "Heiban": "hbn", "Heiltsuk": "hei", "Helong": "heg", "Helu": "elu-prk", "Hema": "nix", "Hemba": "hem", "Herdé": "hed", "Herero": "hz", "Hermit": "llf", "Hernican": "xhr", "Hewa": "ham", "Heyo": "auk", "Hibito": "hib", "Hidatsa": "hid", "Higaonon": "mba", "Highland Konjo": "kjk", "Highland Oaxaca Chontal": "chd", "Highland Popoluca": "poi", "Highland Puebla Nahuatl": "azz", "Highland Totonac": "tos", "Hijazi Arabic": "acw", "Hijuk": "hij", "Hiligaynon": "hil", "Hill Maria": "mrr", "Himarimã": "hir", "Himyaritic": "sem-him", "Hindi": "hi", "Hindi Dogri": "dgo", "Hinduri": "hii", "Hinukh": "gin", "Hiri Motu": "ho", "Hismaic": "sem-his", "Hitchiti": "nai-hit", "Hittite": "hit", "Hitu": "htu", "Hiw": "hiw", "Hixkaryana": "hix", "Hlai": "lic", "Hlepho Phowa": "yhl", "Hlersu": "hle", "Hmar": "hmr", "Hmong Don": "hmf", "Hmong Dô": "hmv", "Hmong Shua": "hmz", "Hmwaveke": "mrk", "Ho": "hoc", "Ho Chi Minh City Sign Language": "hos", "Hoava": "hoa", "Hobyót": "hoh", "Hoia Hoia": "hhi", "Holikachuk": "hoi", "Holiya": "hoy", "Holma": "hod", "Holoholo": "hoo", "Holu": "hol", "Homa": "hom", "Honduran Lenca": "len", "Honduras Sign Language": "hds", "Hone": "juh", "Hong Kong Sign Language": "hks", "Honi": "how", "Hopi": "hop", "Horned Miao": "hrm", "Horo": "hor", "Horom": "hoe", "Horpa": "ero", "Hote": "hot", "Hoti": "hti", "Hovongan": "hov", "Hoyahoya": "hhy", "Hozo": "hoz", "Hpon": "hpo", "Hrangkhol": "hra", "Hre": "hre", "Hruso": "hru", "Hu": "huo", "Huachipaeri": "hug", "Huambisa": "hub", "Huaorani": "auc", "Huarijio": "var", "Huaulu": "hud", "Huautla Mazatec": "mau", "Huave": "huv", "Huaxcaleca Nahuatl": "nhq", "Huba": "hbb", "Huehuetla Tepehua": "tee", "Huetar": "cba-hue", "Huichol": "hch", "Huilliche": "huh", "Huitepec Mixtec": "mxs", "Huizhou": "czh", "Hukumina": "huw", "Hula": "hul", "Hulaulá": "huy", "Huli": "hui", "Hulung": "huk", "Humburi Senni": "hmb", "Humene": "huf", "Hun": "uth", "Hunde": "hke", "Hung": "hnu", "Hungana": "hum", "Hungarian": "hu", "Hungarian Sign Language": "hsh", "Hungworo": "nat", "Hunjara-Kaina Ke": "hkk", "Hunnic": "xhc", "Hunsrik": "hrx", "Hunzib": "huz", "Hupa": "hup", "Hupdë": "jup", "Hupla": "hap", "Hurrian": "xhu", "Hutterisch": "geh", "Hwana": "hwo", "Hya": "hya", "Hyam": "jab", "Hän": "haa", "Hértevin": "hrt", "I-Wak": "iwk", "Iaai": "iai", "Iamalele": "yml", "Iatmul": "ian", "Iau": "tmu", "Ibali Teke": "tek", "Ibaloi": "ibl", "Iban": "iba", "Ibanag": "ibg", "Ibani": "iby", "Ibatan": "ivb", "Iberian": "xib", "Ibibio": "ibb", "Ibino": "ibn", "Iboko": "bkp", "Ibu": "ibu", "Ibuoro": "ibr", "Icelandic": "is", "Icelandic Sign Language": "icl", "Iceve-Maci": "bec", "Ida'an": "dbj", "Idakho-Isukha-Tiriki": "ida", "Idaté": "idt", "Idere": "ide", "Idesa": "ids", "Idi": "idi", "Ido": "io", "Idoma": "idu", "Idon": "idc", "Idu": "clk", "Idun": "ldb", "Iduna": "viv", "Ifo": "iff", "Ifè": "ife", "Igala": "igl", "Igana": "igg", "Igbo": "ig", "Igede": "ige", "Ignaciano": "ign", "Igo": "ahl", "Iguta": "nar", "Igwe": "igw", "Iha": "ihp", "Ihievbe": "ihi", "Ija-Zuba": "vki", "Ik": "ikx", "Ika": "ikk", "Ikaranggal": "ikr", "Ikizu": "ikz", "Iko": "iki", "Ikobi-Mena": "meb", "Ikoma": "ntk", "Ikpeng": "txi", "Ikpeshi": "ikp", "Ikposo": "kpo", "Iku-Gora-Ankwa": "ikv", "Ikulu": "ikl", "Ikwere": "ikw", "Ikwo": "iqw", "Ila": "ilb", "Ile Ape": "ila", "Ilgar": "ilg", "Ili Turki": "ili", "Ili'uun": "ilu", "Ilianen Manobo": "mbi", "Illyrian": "xil", "Ilocano": "ilo", "Ilongot": "ilk", "Ilue": "ilv", "Ilwana": "mlk", "Imbongu": "imo", "Imonda": "imn", "Imroing": "imr", "Inabaknon": "abx", "Inapang": "mzu", "Inari Sami": "smn", "Indanga": "bnt-ind", "Indian Sign Language": "ins", "Indo-Portuguese": "idb", "Indonesian": "id", "Indonesian Bajau": "bdl", "Indonesian Sign Language": "inl", "Indri": "idr", "Indus Kohistani": "mvy", "Indus Valley Language": "xiv", "Inebu One": "oin", "Ineseño": "inz", "Inga": "inb", "Ingrian": "izh", "Ingush": "inh", "Inlaod Itneg": "iti", "Inoke-Yate": "ino", "Inonhan": "loc", "Inor": "ior", "Inpui Naga": "nkf", "Interlingua": "ia", "Interlingue": "ie", "International Sign": "ils", "Intha": "int", "Inuinnaqtun": "esx-inq", "Inuit Sign Language": "iks", "Inuktitut": "iu", "Inuktun": "esx-ink", "Inupiaq": "ik", "Inuvialuktun": "ikt", "Ipai": "nai-ipa", "Ipalapa Amuzgo": "azm", "Ipiko": "ipo", "Ipili": "ipi", "Ipulo": "ass", "Iquito": "iqu", "Ir": "irr", "Irantxe": "irn", "Iranun": "ill", "Iraqi Arabic": "acm", "Iraqw": "irk", "Irarutu": "irh", "Iraya": "iry", "Iresim": "ire", "Iriga Bicolano": "bto", "Irish": "ga", "Irish Sign Language": "isg", "Irula": "iru", "Isabi": "isa", "Isan": "tts", "Isanzu": "isn", "Isarog Agta": "agk", "Isaurian": "und-isa", "Isconahua": "isc", "Isebe": "igo", "Ishkashimi": "isk", "Isinai": "inn", "Isirawa": "srl", "Island Carib": "crb", "Islander Creole English": "icr", "Isnag": "isd", "Isoko": "iso", "Israeli Sign Language": "isr", "Isthmus Mixe": "mir", "Isthmus Zapotec": "zai", "Istriot": "ist", "Istro-Romanian": "ruo", "Isu": "isu", "Isubu": "szv", "Italian": "it", "Italian Sign Language": "ise", "Italiot Greek": "grk-ita", "Itawit": "itv", "Itelmen": "itl", "Itene": "ite", "Iteri": "itr", "Itik": "itx", "Ito": "itw", "Itonama": "ito", "Itsekiri": "its", "Itu Mbon Uzo": "itm", "Itundujia Mixtec": "mce", "Itzá": "itz", "Iu Mien": "ium", "Ivatan": "ivv", "Iwaidja": "ibd", "Iwal": "kbm", "Iwam": "iwm", "Iwur": "iwo", "Ixcatec": "ixc", "Ixcatlán Mazatec": "mzi", "Ixil": "ixl", "Ixtayutla Mixtec": "vmj", "Ixtenco Otomi": "otz", "Iyayu": "iya", "Iyive": "uiv", "Iyo": "nca", "Iyo'wujwa Chorote": "crq", "Iyojwa'ja Chorote": "crt", "Izere": "izr", "Izi": "izz", "Izi-Ezaa-Ikwo-Mgbo": "izi", "Izon": "ijc", "Izora": "cbo", "Iñapari": "inp", "Jabem": "jae", "Jabutí": "jbt", "Jad": "jda", "Jadgali": "jdg", "Jah Hut": "jah", "Jahanka": "jad", "Jair Awyu": "awv", "Jakaltek": "jac", "Jakati": "jat", "Jalapa de Díaz Mazatec": "maj", "Jalkunan": "bxl", "Jamaican Country Sign Language": "jcs", "Jamaican Creole": "jam", "Jamaican Sign Language": "jls", "Jamamadí": "jaa", "Jambi Malay": "jax", "Jamiltepec Mixtec": "mxt", "Jaminjung": "djd", "Jamsay": "djm", "Jamtish": "gmq-jmk", "Jandavra": "jnd", "Janday": "jan", "Jangkang": "djo", "Jangshung": "jna", "Janji": "jni", "Japanese": "ja", "Japanese Sign Language": "jsl", "Japhug": "sit-jap", "Japrería": "jru", "Jaqaru": "jqr", "Jara": "jaf", "Jarai": "jra", "Jarawa": "anq", "Jaru": "ddj", "Jassic": "ysc", "Jaunsari": "jns", "Javanese": "jv", "Javindo": "jvd", "Jawe": "jaz", "Jaya": "jyy", "Jebero": "jeb", "Jeh": "jeh", "Jehai": "jhi", "Jeikó": "sai-jko", "Jeju": "jje", "Jemez": "tow", "Jenaama Bozo": "bze", "Jeng": "jeg", "Jennu Kurumba": "xuj", "Jere": "jer", "Jeri Kuo": "jek", "Jersey Dutch": "gmw-jdt", "Jeru": "akj", "Jerung": "jee", "Jhankot Sign Language": "jhs", "Jiamao": "jio", "Jiba": "juo", "Jibu": "jib", "Jicarilla": "apj", "Jiiddu": "jii", "Jilbe": "jie", "Jili": "mgi", "Jilim": "jil", "Jimi": "jmi", "Jimjimen": "jim", "Jin": "cjy", "Jina": "jia", "Jingpho": "kac", "Jingulu": "jig", "Jiongnai Bunu": "pnu", "Jirajara": "sai-jrj", "Jirel": "jul", "Jiru": "jrr", "Jita": "jit", "Jju": "kaj", "Joba": "job", "Jofotek-Bromnya": "jbr", "Jola-Fonyi": "dyo", "Jola-Kasa": "csk", "Jonkor Bourmataguil": "jeu", "Jordanian Sign Language": "jos", "Jorá": "jor", "Jowulu": "jow", "Ju": "juu", "Juang": "jun", "Juba Arabic": "pga", "Judeo-Italian": "itk", "Judeo-Persian": "jpr", "Judeo-Tat": "jdt", "Jukun Takum": "jbu", "Jumaytepeque": "nai-jum", "Jumjum": "jum", "Jumla Sign Language": "jus", "Jumli": "jml", "Jungle Inga": "inj", "Juquila Mixe": "mxq", "Jur Modo": "bex", "Juray": "juy", "Jurchen": "juc", "Jurúna": "jur", "Jutiapa": "nai-jtp", "Jutish": "jut", "Juwal": "mwb", "Juxtlahuaca Mixtec": "vmc", "Juǀ'hoan": "ktz", "Jwira-Pepesa": "jwi", "Júma": "jua", "K'iche'": "quc", "Kaamba": "xku", "Kaan": "ldl", "Kaang Chin": "ckn", "Kaansa": "gna", "Kaapor Sign Language": "uks", "Kaba": "ksp", "Kabalai": "kvf", "Kabardian": "kbd", "Kabatei": "xkp", "Kabba-Laka": "lap", "Kabishiana": "tup-kab", "Kabiyé": "kbp", "Kabola": "klz", "Kabore One": "onk", "Kabras": "lkb", "Kaburi": "uka", "Kabutra": "kbu", "Kabuverdianu": "kea", "Kabwa": "cwa", "Kabwari": "kcw", "Kabyle": "kab", "Kachama-Ganjule": "kcx", "Kachari": "xac", "Kachchi": "kfr", "Kachi Koli": "gjk", "Kacipo-Balesi": "koe", "Kaco'": "xkk", "Kadai": "kzd", "Kadar": "kej", "Kadara": "kad", "Kadaru": "kdu", "Kadiwéu": "kbc", "Kado": "kdv", "Kadugli": "xtc", "Kaduo": "ktp", "Kaera": "jka", "Kafa": "kbr", "Kafoa": "kpu", "Kagan Kalagan": "kll", "Kagate": "syw", "Kagayanen": "cgc", "Kagoma": "kdm", "Kagoro": "xkg", "Kagulu": "kki", "Kahe": "hka", "Kahua": "agw", "Kaian": "kct", "Kaibobo": "kzb", "Kaidipang": "kzp", "Kaiep": "kbw", "Kaikadi": "kep", "Kaike": "kzq", "Kaiku": "kkq", "Kaimbulawa": "zka", "Kaimbé": "xai", "Kaingang": "kgp", "Kairak": "ckr", "Kairiru": "kxa", "Kairui-Midiki": "krd", "Kais": "kzm", "Kaivi": "kce", "Kaiwá": "kgk", "Kaiy": "tcq", "Kajakse": "ckq", "Kajali": "xkj", "Kajaman": "kag", "Kakabai": "kqf", "Kakabe": "kke", "Kakanda": "kka", "Kaki Ae": "tbd", "Kakihum": "kxe", "Kako": "kkj", "Kakwa": "keo", "Kala": "kcl", "Kala Lagaw Ya": "mwp", "Kalaamaya": "lkm", "Kalabakan": "kve", "Kalabari": "ijn", "Kalabra": "kzz", "Kalagan": "kqe", "Kalaktang Monpa": "kkf", "Kalam": "kmh", "Kalami": "gwc", "Kalamsé": "knz", "Kalanadi": "wkl", "Kalanga": "kck", "Kalao": "kly", "Kalapuya": "kyl", "Kalarko": "kba", "Kalasha": "kls", "Kalasuri": "xme-kls", "Kalenjin": "kln", "Kalkatungu": "ktg", "Kalkoti": "xka", "Kalmyk": "xal", "Kalo Finnish Romani": "rmf", "Kalou": "ywa", "Kaluli": "bco", "Kalumpang": "kli", "Kam": "kdx", "Kamakan": "vkm", "Kamang": "woi", "Kamano": "kbq", "Kamantan": "kci", "Kamar": "keq", "Kamara": "jmr", "Kamarian": "kzx", "Kamaru": "kgx", "Kamarupi Prakrit": "inc-kam", "Kamasa": "klp", "Kamasau": "kms", "Kamassian": "xas", "Kamayo": "kyk", "Kamayurá": "kay", "Kamba": "kam", "Kambaata": "ktb", "Kambaira": "kyy", "Kambera": "xbr", "Kamberataro": "kbv", "Kamberau": "irx", "Kambiwá": "xbw", "Kami": "kmi", "Kamkata-viri": "bsh", "Kamo": "kcq", "Kamoro": "kgq", "Kamta": "rkt", "Kamu": "xmu", "Kamula": "xla", "Kamwe": "hig", "Kanakanabu": "xnb", "Kanakuru": "kna", "Kanamari": "knm", "Kanashi": "xns", "Kanasi": "soq", "Kandas": "kqw", "Kandawo": "gam", "Kande": "kbs", "Kang": "kyp", "Kanga": "kcp", "Kangean": "kkv", "Kanggape": "igm", "Kangjia": "kxs", "Kango": "kty", "Kango-Sua": "kzy", "Kangri": "xnr", "Kaniet": "ktk", "Kanikkaran": "kev", "Kaningdon-Nindem": "kdp", "Kaningi": "kzo", "Kaningra": "knr", "Kaninuwa": "wat", "Kanite": "kmu", "Kanjari": "kft", "Kanju": "kbe", "Kankanaey": "kne", "Kannada": "kn", "Kannada Kurumba": "kfi", "Kannauji": "bjj", "Kanowit": "kxn", "Kanoé": "kxo", "Kansa": "ksk", "Kantosi": "xkt", "Kanu": "khx", "Kanufi": "kni", "Kanuri": "kr", "Kanyok": "kny", "Kao": "kax", "Kaonde": "kqn", "Kap": "ykm", "Kapampangan": "pam", "Kapauri": "khp", "Kapin": "tbx", "Kapinawá": "xpn", "Kapingamarangi": "kpg", "Kapriman": "dju", "Kaptiau": "kbi", "Kapya": "klo", "Kaqchikel": "cak", "Kara (New Guinea)": "leu", "Kara (Tanzania)": "reg", "Karachay-Balkar": "krc", "Karadjeri": "gbd", "Karaga Mandaya": "mry", "Karaim": "kdr", "Karajá": "kpj", "Karakalpak": "kaa", "Karakhanid": "xqa", "Karami": "xar", "Karamojong": "kdj", "Karang": "kzr", "Karanga": "kth", "Karankawa": "zkk", "Karao": "kyj", "Karas": "kgv", "Karata": "kpt", "Karawa": "xrw", "Karbi": "mjw", "Kare (Africa)": "kbn", "Kare (New Guinea)": "kmf", "Karekare": "kai", "Karelian": "krl", "Karey": "kyd", "Kari": "kbj", "Karingani": "kgn", "Karipuna": "kuq", "Karipúna": "kgm", "Karipúna Creole French": "kmv", "Kariri": "kzw", "Karitiâna": "ktn", "Kariya": "kil", "Kariyarra": "vka", "Karkar-Yuri": "yuj", "Karkin": "krb", "Karko": "kko", "Karnai": "bbv", "Karo": "kxh", "Karo Batak": "btx", "Karok": "kyh", "Karolanos": "kyn", "Karon": "krx", "Karon Dori": "kgw", "Karore": "xkx", "Karranga": "xrq", "Karuwali": "rxw", "Kasanga": "ccj", "Kasem": "xsm", "Kashaya": "kju", "Kashmiri": "ks", "Kashubian": "csb", "Kasiguranin": "ksn", "Kaska": "kkz", "Kaskean": "zsk", "Kaskihá": "gva", "Kassite": "und-kas", "Kassonke": "kao", "Kasua": "khs", "Kataang": "kgd", "Katabaga": "ktq", "Katawixi": "xat", "Katembri": "sai-kat", "Kathlamet": "nai-kat", "Kathoriya Tharu": "tkt", "Kathu": "ykt", "Katkari": "kfu", "Katla": "kcr", "Kato": "ktw", "Katso": "kaf", "Katua": "kta", "Katukina": "knt", "Kaulong": "pss", "Kaur": "vkk", "Kaure": "bpp", "Kaurna": "zku", "Kauwera": "xau", "Kavalan": "ckv", "Kavet": "krv", "Kawacha": "kcb", "Kawaiisu": "xaw", "Kawe": "kgb", "Kawishana": "awd-kaw", "Kawésqar": "alc", "Kaxararí": "ktx", "Kaxuyana": "kbb", "Kaya": "zra", "Kayabí": "kyz", "Kayagar": "kyt", "Kayan": "pdu", "Kayan Mahakam": "xay", "Kayan River Kayan": "xkn", "Kayapa Kallahan": "kak", "Kayapó": "txu", "Kayardild": "gyd", "Kayeli": "kzl", "Kayong": "kxy", "Kayort": "kyv", "Kaytetye": "gbb", "Kayupulau": "kzu", "Kazakh": "kk", "Kazukuru": "kzk", "Ke'o": "xxk", "Keak": "keh", "Keapara": "khz", "Kedah Malay": "meo", "Kedang": "ksx", "Keder": "kdy", "Kehu": "khh", "Kei": "kei", "Keiga": "kec", "Kein": "bmh", "Keiyo": "eyo", "Kela-Yela": "kel", "Kelabit": "kzi", "Keley-I Kallahan": "ify", "Keliko": "kbo", "Kelo": "xel", "Kelon": "kyo", "Kemak": "kem", "Kembayan": "xem", "Kemberano": "bzp", "Kembra": "xkw", "Kemezung": "dmo", "Kemi Sami": "sjk", "Kemiehua": "kfj", "Kemtuik": "kmt", "Kenaboi": "xbn", "Kenati": "gat", "Kendayan": "knx", "Kendeje": "klf", "Kendem": "kvm", "Kenga": "kyq", "Keningau Murut": "kxi", "Keninjal": "knl", "Kensiu": "kns", "Kenswei Nsei": "ndb", "Kenyan Sign Language": "xki", "Kenyang": "ken", "Kenyi": "lke", "Keoru-Ahia": "xeu", "Kepkiriwát": "kpn", "Kepo'": "kuk", "Kera": "ker", "Kerak": "hhr", "Kereho": "xke", "Kerek": "krk", "Kerewe": "ked", "Kerewo": "kxz", "Kerinci": "kvr", "Kermanic": "xme-ker", "Kesawai": "xes", "Ket": "ket", "Ketangalan": "kae", "Kete": "kcv", "Ketengban": "xte", "Ketum": "ktt", "Kewa": "kew", "Keyagana": "kyg", "Kgalagadi": "xkv", "Khakas": "kjh", "Khalaj": "klj", "Khaling": "klr", "Kham": "kjl", "Khamnigan Mongol": "ykh", "Khamti": "kht", "Khamyang": "ksu", "Khana": "ogo", "Khandeshi": "khn", "Khanty": "kca", "Khao": "xao", "Kharam Naga": "kfw", "Kharia": "khr", "Kharia Thar": "ksy", "Khasa Prakrit": "inc-kha", "Khasi": "kha", "Khayo": "lko", "Khazar": "zkz", "Khe": "kqg", "Khehek": "tlx", "Khengkha": "xkf", "Khetrani": "xhe", "Khezha Naga": "nkh", "Khiamniungan Naga": "kix", "Khinalug": "kjj", "Khirwar": "kwx", "Khisa": "kqm", "Khitan": "zkt", "Khlor": "llo", "Khlula": "ykl", "Khmer": "km", "Khmu": "kjg", "Khoekhoe": "naq", "Khoibu Naga": "nkb", "Khoini": "xkc", "Kholok": "ktc", "Kholosi": "inc-kho", "Khonso": "kxc", "Khorasani Turkish": "kmz", "Khorezmian Turkic": "zkh", "Khotanese": "kho", "Khowar": "khw", "Khroskyabs": "jiq", "Khua": "xhv", "Khuen": "khf", "Khumi Chin": "cnk", "Khvarshi": "khv", "Khwarezmian": "xco", "Khwe": "xuu", "Kháng": "kjm", "Khün": "kkh", "Kibala": "blv", "Kibena": "bez", "Kibet": "kie", "Kibiri": "prm", "Kichwa": "qwe-kch", "Kickapoo": "kic", "Kikai": "kzg", "Kikami": "kcu", "Kikuyu": "ki", "Kildin Sami": "sjd", "Kilit": "xme-klt", "Kilivila": "kij", "Kiliwa": "klb", "Kilmeri": "kih", "Kim": "kia", "Kim Mun": "mji", "Kimaama": "kig", "Kimaragang": "kqr", "Kimbu": "kiv", "Kimbundu": "kmb", "Kimki": "sbt", "Kimré": "kqp", "Kinabalian": "cbw", "Kinalakna": "kco", "Kinaray-a": "krj", "Kinga": "zga", "Kings River Yokuts": "nai-kry", "Kinikinao": "gqn", "Kinnauri": "kfk", "Kintaq": "knq", "Kinuku": "kkd", "Kioko": "ues", "Kiong": "kkm", "Kiorr": "xko", "Kiowa": "kio", "Kipchak": "qwm", "Kipfokomo": "pkb", "Kipsigis": "sgc", "Kiput": "kyi", "Kir-Balar": "kkr", "Kire": "geb", "Kirfi": "kks", "Kirike": "okr", "Kirikiri": "kiy", "Kirya-Konzel": "fkk", "Kis": "kis", "Kisa": "lks", "Kisan": "xis", "Kisankasa": "kqh", "Kisar": "kje", "Kisi": "kiz", "Kistane": "gru", "Kita Maninkakan": "mwk", "Kitanemuk": "azc-ktn", "Kitembo": "tbt", "Kitja": "gia", "Kitsai": "kii", "Kituba": "ktu", "Kiunum": "wei", "Kla": "lda", "Klallam": "clm", "Klamath-Modoc": "kla", "Klao": "klu", "Klias River Kadazan": "kqt", "Klingon": "tlh", "Knaanic": "czk", "Ko": "fuj", "Koalib": "kib", "Koasati": "cku", "Koba": "kpd", "Kobiana": "kcj", "Kobol": "kgu", "Kobon": "kpw", "Koch": "kdq", "Kochila Tharu": "thq", "Koda": "cdz", "Kodaku": "ksz", "Kodava": "kfa", "Kodeoha": "vko", "Kodi": "kod", "Kodia": "kwp", "Koenoem": "kcs", "Kofa": "kso", "Kofei": "kpi", "Kofyar": "kwl", "Kohin": "kkx", "Kohistani Shina": "plk", "Koho": "kpm", "Kohumono": "bcs", "Koi": "kkt", "Koibal": "zkb", "Koireng": "nkd", "Koitabu": "kqi", "Koiwat": "kxt", "Kok-Nar": "gko", "Kok-Paponk": "okg", "Kokata": "ktd", "Kokborok": "trp", "Koke": "kou", "Koko-Bera": "kkp", "Kokoda": "xod", "Kokola": "kzn", "Kokota": "kkk", "Kol (Cameroon)": "biw", "Kol (New Guinea)": "kol", "Kola": "kvv", "Kolami": "kfb", "Kolbila": "klc", "Kolhe": "ekl", "Kolibugan Subanon": "skn", "Kolom": "klm", "Koluwawa": "klx", "Kom (Cameroon)": "bkm", "Kom (India)": "kmm", "Koma": "kmy", "Komba": "kpf", "Kombai": "tyn", "Kombio": "xbi", "Komering": "kge", "Komi-Permyak": "koi", "Komi-Yazva": "urj-kya", "Komi-Zyrian": "kpv", "Kominimung": "xoi", "Komo": "xom", "Komodo": "kvh", "Kompane": "kvp", "Komyandaret": "kzv", "Kon Keu": "kkn", "Konabéré": "bbo", "Konai": "kxw", "Konda": "knd", "Konda-Dora": "kfc", "Kondekor": "gau", "Koneraw": "kdw", "Kongo": "kg", "Konkani": "kok", "Konkomba": "xon", "Konni": "kma", "Kono (Guinea)": "knu", "Kono (Nigeria)": "klk", "Kono (Sierra Leone)": "kno", "Konomala": "koa", "Konomihu": "nai-knm", "Konongo": "kcz", "Konyak Naga": "nbe", "Konyanka Maninka": "mku", "Konzo": "koo", "Koonzime": "ozm", "Koorete": "kqy", "Kopar": "xop", "Kopkaka": "opk", "Korafe-Yegha": "kpr", "Korak": "koz", "Korana": "kqz", "Korandje": "kcy", "Korean": "ko", "Korean Sign Language": "kvk", "Koreguaje": "coe", "Koresh-e Rostam": "okh", "Korku": "kfq", "Korlai Creole Portuguese": "vkp", "Koro (India)": "jkr", "Koro (New Guinea)": "kxr", "Koro (Vanuatu)": "krf", "Koro (West Africa)": "kfo", "Koromfé": "kfz", "Koromira": "kqj", "Koronadal Blaan": "bpr", "Koroni": "xkq", "Korop": "krp", "Koropó": "xxr", "Koroshi": "ktl", "Korowai": "khe", "Korra Koraga": "kfd", "Korubo": "xor", "Korupun-Sela": "kpq", "Korwa": "kfp", "Koryak": "kpy", "Kosadle": "kiq", "Kosarek Yale": "kkl", "Kosena": "kze", "Koshin": "kid", "Kosraean": "kos", "Kota (Gabon)": "koq", "Kota (India)": "kfe", "Kota Bangun Kutai Malay": "mqg", "Kota Marudu Talantang": "grm", "Kota Marudu Tinagas": "ktr", "Kotafon Gbe": "kqk", "Kotava": "avk", "Koti": "eko", "Kott": "zko", "Kou": "snz", "Kouya": "kyf", "Kovai": "kqb", "Kove": "kvc", "Kowaki": "xow", "Kowiai": "kwh", "Koy Sanjaq Surat": "kqd", "Koya": "kff", "Koyaga": "kga", "Koyo": "koh", "Koyra Chiini": "khq", "Koyraboro Senni": "ses", "Koyukon": "koy", "Kpagua": "kuw", "Kpala": "kpl", "Kpan": "kpk", "Kpasam": "pbn", "Kpati": "koc", "Kpatili": "kym", "Kpee": "cpo", "Kpelle": "kpe", "Kpessi": "kef", "Kplang": "kph", "Krache": "kye", "Krahô": "xra", "Kraol": "rka", "Krenak": "kqq", "Kresh": "krs", "Krevinian": "zkv", "Kreye": "xre", "Krikati-Timbira": "xri", "Krim": "krm", "Krio": "kri", "Kriol": "rop", "Krisa": "ksi", "Kristang": "mcm", "Krobu": "kxb", "Krongo": "kgo", "Kru'ng": "krr", "Krymchak": "jct", "Kryts": "kry", "Kua": "tyu", "Kua-nsi": "ykn", "Kuamasi": "yku", "Kuan": "uan", "Kuanhua": "xnh", "Kube": "kgf", "Kubi": "kof", "Kubo": "jko", "Kubu": "kvb", "Kucong": "lkc", "Kudiya": "kfg", "Kudmali": "kyw", "Kudu-Camo": "kov", "Kugama": "kow", "Kugbo": "kes", "Kugu-Muminh": "xmh", "Kui (India)": "kxu", "Kui (Indonesia)": "kvd", "Kuijau": "dkr", "Kuikúro": "kui", "Kujarge": "vkj", "Kuk": "kfn", "Kukatja": "kux", "Kukele": "kez", "Kukkuzi": "urj-kuk", "Kukna": "kex", "Kuku-Mangk": "xmq", "Kuku-Mu'inh": "xmp", "Kuku-Thaypan": "typ", "Kuku-Ugbanh": "ugb", "Kuku-Uwanh": "uwa", "Kuku-Yalanji": "gvn", "Kula": "tpg", "Kulaal": "glj", "Kulere": "kul", "Kulfa": "kxj", "Kulina": "xpk", "Kulisusu": "vkl", "Kullu Pahari": "kfx", "Kulon": "uon", "Kulon-Pazeh": "uun", "Kulung": "kle", "Kumak": "nee", "Kumalu": "ksl", "Kumam": "kdi", "Kuman": "kue", "Kumaoni": "kfy", "Kumarbhag Paharia": "kmj", "Kumba": "ksm", "Kumbainggar": "kgs", "Kumbaran": "wkb", "Kumbewaha": "xks", "Kumeyaay": "nai-kum", "Kumhali": "kra", "Kumu": "kmw", "Kumukio": "kuo", "Kumyk": "kum", "Kumzari": "zum", "Kuna": "cuk", "Kunama": "kun", "Kunbarlang": "wlg", "Kunda": "kdn", "Kundal Shahi": "shd", "Kunduvadi": "wku", "Kung": "kfl", "Kungarakany": "ggk", "Kungardutyi": "gdt", "Kunggari": "kgl", "Kungkari": "lku", "Kuni": "kse", "Kuni-Boazi": "kvg", "Kunigami": "xug", "Kunimaipa": "kup", "Kunja": "pep", "Kunjen": "kjn", "Kunyi": "njx", "Kunza": "kuz", "Kuo": "xuo", "Kuot": "kto", "Kupa": "kug", "Kupang Malay": "mkn", "Kupia": "key", "Kupsabiny": "kpz", "Kur": "kuv", "Kura Ede Nago": "nqk", "Kurama": "krh", "Kuranko": "knk", "Kuri": "nbn", "Kuria": "kuj", "Kurichiya": "kfh", "Kurmukar": "kfv", "Kurnai": "unn", "Kurrama": "vku", "Kurti": "ktm", "Kurtjar": "gdj", "Kurtöp": "xkz", "Kurudu": "kjr", "Kurukh": "kru", "Kuruáya": "kyr", "Kusaal": "kus", "Kusaghe": "ksg", "Kushi": "kuh", "Kustenau": "awd-kus", "Kusu": "ksv", "Kusunda": "kgg", "Kutang Ghale": "ght", "Kutenai": "kut", "Kutep": "kub", "Kuthant": "xut", "Kutto": "kpa", "Kutu": "kdc", "Kuturmi": "khj", "Kuuk Thaayorre": "thd", "Kuuk Yak": "uky", "Kuuku-Ya'u": "kuy", "Kuvale": "olu", "Kuvi": "kxv", "Kuwaa": "blh", "Kuwaataay": "cwt", "Kuwani": "paa-kwn", "Kuy": "kdt", "Kven": "fkv", "Kw'adza": "wka", "Kwa'": "bko", "Kwaami": "ksq", "Kwadi": "kwz", "Kwaio": "kwd", "Kwaja": "kdz", "Kwak": "kwq", "Kwak'wala": "kwk", "Kwakum": "kwu", "Kwalhioqua-Tlatskanai": "qwt", "Kwama": "kmq", "Kwambi": "kwm", "Kwamera": "tnk", "Kwami": "ktf", "Kwamtim One": "okk", "Kwang": "kvi", "Kwanga": "kwj", "Kwangali": "kwn", "Kwanja": "knp", "Kwanka": "bij", "Kwanyama": "kj", "Kwara'ae": "kwf", "Kwasio": "nmg", "Kwaya": "kya", "Kwaza": "xwa", "Kwegu": "xwg", "Kwer": "kwr", "Kwerba": "kwe", "Kwerba Mamberamo": "xwr", "Kwere": "cwe", "Kwerisa": "kkb", "Kwese": "kws", "Kwesten": "kwt", "Kwini": "gww", "Kwinsu": "kuc", "Kwinti": "kww", "Kwoma": "kmo", "Kwomtari": "kwo", "Kyak": "bka", "Kyaka": "kyc", "Kyakala": "tuw-kkl", "Kyan-Karyaw Naga": "nqq", "Kyenele": "kql", "Kyenga": "tye", "Kyerung": "kgy", "Kyrgyz": "ky", "Kâte": "kmg", "Kélé": "keb", "Kómnzo": "paa-kom", "La'bi": "lbi", "Laal": "gdm", "Laalaa": "cae", "Laba": "lau", "Label": "lbb", "Labir": "jku", "Labo": "mwi", "Labo Phowa": "ypb", "Laboya": "lmy", "Labu": "lbu", "Labuk-Kinabatangan Kadazan": "dtb", "Lacandon": "lac", "Lachi": "lbt", "Lachiguiri Zapotec": "zpa", "Lachixío Zapotec": "zpl", "Ladakhi": "lbj", "Ladin": "lld", "Ladino": "lad", "Ladji-Ladji": "llj", "Laeko-Libuat": "lkl", "Lafofa": "laf", "Laghu": "lgb", "Laghuu": "lgh", "Lagwan": "kot", "Laha (Indonesia)": "lhh", "Laha (Vietnam)": "lha", "Lahanan": "lhn", "Lahnda": "lah", "Lahta Karen": "kvt", "Lahu": "lhu", "Lahu Shi": "lhi", "Lahul Lohar": "lhl", "Lai": "cnh", "Laimbue": "lmx", "Laitu Chin": "clj", "Laiyolo": "lji", "Lak": "lbe", "Laka": "lak", "Lakalei": "lka", "Lake Miwok": "lmw", "Lakha": "lkh", "Laki": "lki", "Lakkia": "lbc", "Lakon": "lkn", "Lakondê": "lkd", "Lakota": "lkt", "Lakota Dida": "dic", "Lala (New Guinea)": "nrz", "Lala (South Africa)": "bnt-lal", "Lala-Bisa": "leb", "Lala-Roba": "lla", "Lalana Chinantec": "cnl", "Lama Bai": "lay", "Lamaholot": "slp", "Lamalera": "lmr", "Lamang": "hia", "Lamatuka": "lmq", "Lamba": "lam", "Lambadi": "lmn", "Lambichhong": "lmh", "Lambya": "lai", "Lame": "bma", "Lamenu": "lmu", "Lamet": "lbn", "Lamja-Dengsa-Tola": "ldh", "Lamkang": "lmk", "Lamma": "lev", "Lamnso'": "lns", "Lamogai": "lmg", "Lampung Api": "ljp", "Lamu": "llh", "Lamu-Lamu": "lby", "Lanas Lobu": "ruu", "Landoma": "ldm", "Lang'e": "yne", "Langam": "lnm", "Langbashe": "lna", "Langi": "lag", "Langnian Buyang": "yln", "Lango (Sudan)": "lno", "Lango (Uganda)": "laj", "Lanima": "lnw", "Lanoh": "lnh", "Lao": "lo", "Lao Naga": "nlq", "Laomian": "lwm", "Laopang": "lbg", "Laos Sign Language": "lso", "Lapaguía-Guivini Zapotec": "ztl", "Lapine": "art-lap", "Lapuyan Subanun": "laa", "Laragia": "lrg", "Larantuka Malay": "lrt", "Lardil": "lbz", "Larestani": "lrl", "Larevat": "lrv", "Larike-Wakasihu": "alo", "Laro": "lro", "Larteh": "lar", "Laru": "lan", "Lasalimu": "llm", "Lasgerdi": "lsa", "Lashi": "lsi", "Lasi": "lss", "Latgalian": "ltg", "Latin": "la", "Latu": "ltu", "Latundê": "ltn", "Latvian": "lv", "Latvian Sign Language": "lsl", "Lau": "llu", "Laua": "luf", "Lauan": "llx", "Lauje": "law", "Laura": "lur", "Laurentian": "lre", "Lautu Chin": "clt", "Lavatbura-Lamusong": "lbv", "Lave": "brb", "Laven": "lbo", "Lavukaleve": "lvk", "Lawangan": "lbx", "Lawi": "lvi", "Lawu": "lwu", "Lawunuia": "tgi", "Layakha": "lya", "Laz": "lzz", "Laze": "tbq-laz", "Lealao Chinantec": "cle", "Leco": "lec", "Ledo Kaili": "lew", "Leelau": "ldk", "Lefa": "lfa", "Lega-Mwenga": "lgm", "Lega-Shabunda": "lea", "Legbo": "agb", "Legenyem": "lcc", "Lehali": "tql", "Lehalurup": "urr", "Leinong Naga": "lzn", "Leipon": "lek", "Lela": "dri", "Lelak": "llk", "Lele (Chad)": "lln", "Lele (Congo)": "lel", "Lele (Guinea)": "llc", "Lele (New Guinea)": "lle", "Lelemi": "lef", "Lelepa": "lpa", "Lembena": "leq", "Lemerig": "lrz", "Lemio": "lei", "Lemnian": "xle", "Lemolang": "ley", "Lemoro": "ldj", "Lenakel": "tnl", "Lendu": "led", "Lengilu": "lgi", "Lengo": "lgr", "Lengola": "lej", "Lenje": "leh", "Lenkau": "ler", "Lenyima": "ldg", "Leonese": "roa-leo", "Lepcha": "lep", "Lepki": "lpe", "Lepontic": "xlp", "Lere": "gnh", "Lese": "les", "Lesing-Gelimi": "let", "Letemboi": "nms", "Leti (Cameroon)": "leo", "Leti (Indonesia)": "lti", "Levuka": "lvu", "Lewo": "lww", "Lewo Eleng": "lwe", "Lewotobi": "lwt", "Leyigha": "ayi", "Lezgi": "lez", "Lhao Vo": "mhx", "Lhokpu": "lhp", "Li'o": "ljl", "Liabuku": "lix", "Liana-Seti": "ste", "Liangmai Naga": "njn", "Liberia Kpelle": "xpe", "Liberian English": "lir", "Libido": "liq", "Libinza": "liz", "Libon Bikol": "lbl", "Liburnian": "xli", "Libyan Arabic": "ayl", "Libyan Sign Language": "lbs", "Ligbi": "lig", "Ligenza": "lgz", "Ligurian": "lij", "Lihir": "lih", "Lika": "lik", "Liki": "lio", "Likila": "lie", "Likuba": "kxx", "Likum": "lib", "Likwala": "kwc", "Lilau": "lll", "Lillooet": "lil", "Limassa": "bme", "Limbu": "lif", "Limbum": "lmp", "Limburgish": "li", "Limi": "ylm", "Limilngan": "lmc", "Limos Kalinga": "kmk", "Lindu": "klw", "Linear A": "lab", "Lingala": "ln", "Lingao": "onb", "Lingkhim": "lii", "Lingua Franca Nova": "lfn", "Linngithigh": "lnj", "Lipan": "apl", "Lipo": "lpo", "Lisabata-Nuniali": "lcs", "Lisela": "lcl", "Lish": "lsh", "Lishana Deni": "lsd", "Lishanid Noshan": "aij", "Lishán Didán": "trg", "Lisu": "lis", "Literary Chinese": "lzh", "Lithuanian": "lt", "Lithuanian Sign Language": "lls", "Little Swanport": "aus-lsw", "Litzlitz": "lzl", "Livonian": "liv", "Livvi": "olo", "Lizu": "sit-liz", "Lo-Toga": "lht", "Loarki": "lrk", "Lobala": "loq", "Lobi": "lob", "Lodhi": "lbm", "Logba": "lgq", "Logo": "log", "Logol": "lof", "Logooli": "rag", "Logorik": "liu", "Lojban": "jbo", "Lokaa": "yaz", "Loko": "lok", "Lokoya": "lky", "Lola": "lcd", "Lolak": "llq", "Lole": "llg", "Lolo": "llb", "Loloda": "loa", "Lolopo": "ycl", "Lomaiviti": "lmv", "Lomakka": "loi", "Lomavren": "rmi", "Lombard": "lmo", "Lombi": "lmi", "Lombo": "loo", "Lomwe": "ngl", "Loncong": "lce", "Long Phuri Naga": "lpn", "Long Wat": "ttw", "Longgu": "lgu", "Longto": "wok", "Longuda": "lnu", "Loniu": "los", "Lonwolwol": "crc", "Loo": "ldo", "Looma": "lom", "Lopa": "lop", "Lopi": "lov", "Lopit": "lpx", "Lorang": "lrn", "Lorediakarkar": "lnn", "Lorrain": "roa-lor", "Lote": "uvl", "Lotha Naga": "njh", "Lotud": "dtr", "Lotuko": "lot", "Lou": "loj", "Louisiana Creole": "lou", "Loun": "lox", "Loup A": "xlo", "Loup B": "xlb", "Lovono": "vnk", "Low German": "nds", "Lower Burdekin": "xbb", "Lower Chehalis": "cea", "Lower Grand Valley Dani": "dni", "Lower Nossob": "nsb", "Lower Sorbian": "dsb", "Lower Southern Aranda": "axl", "Lower Ta'oih": "tto", "Lower Tanana": "taa", "Lowland Oaxaca Chontal": "clo", "Lowland Tarahumara": "tac", "Loxicha Zapotec": "ztp", "Lozi": "loz", "Luang": "lex", "Luba-Kasai": "lua", "Luba-Katanga": "lu", "Lubila": "kcc", "Lubu": "lcf", "Lubuagan Kalinga": "knb", "Luchazi": "lch", "Lucumí": "luq", "Ludian": "lud", "Lufu": "ldq", "Luganda": "lg", "Lugbara": "lgg", "Luguru": "ruf", "Luhu": "lcq", "Luhya": "luy", "Luimbi": "lum", "Luiseño": "lui", "Lukpa": "dop", "Lule": "ule", "Lule Sami": "smj", "Lumba-Yakkha": "luu", "Lumbee": "lmz", "Lumbu": "lup", "Lumun": "lmd", "Lun Bawang": "lnd", "Luna": "luj", "Lunanakha": "luk", "Lunda": "lun", "Lungga": "lga", "Luo": "luo", "Luopohe Hmong": "hml", "Luri (Nigeria)": "ldd", "Lusengo": "lse", "Lushootseed": "lut", "Lusi": "khl", "Lusitanian": "xls", "Lutachoni": "lts", "Lutos": "ndy", "Luvale": "lue", "Luwati": "luv", "Luwian": "xlu", "Luwo": "lwo", "Luxembourgish": "lb", "Luyana": "lyn", "Lwalu": "lwa", "Lwel": "bnt-lwl", "Lycian": "xlc", "Lydian": "xld", "Lyngngam": "lyg", "Lyélé": "lee", "Láadan": "ldn", "Láá Láá Bwamu": "bwj", "Lü": "khb", "Ma": "msj", "Ma Manda": "skc", "Ma'anyan": "mhy", "Ma'di": "mhi", "Ma'ya": "slz", "Maa": "cma", "Maaka": "mew", "Maale": "mdy", "Maasai": "mas", "Maay": "ymm", "Maba": "mqa", "Mabaale": "mmz", "Mabaan": "mfz", "Mabaka Valley Kalinga": "kkg", "Mabire": "muj", "Maca": "mca", "Macaguaje": "mcl", "Macaguán": "mbn", "Macanese": "mzs", "Macau Pidgin Portuguese": "crp-mpp", "Macedonian": "mk", "Machame": "jmc", "Machiguenga": "mcb", "Machinere": "mpd", "Machinga": "mvw", "Macoris": "nai-mac", "Macuna": "myy", "Macushi": "mbc", "Mada (Cameroon)": "mxu", "Mada (Nigeria)": "mda", "Madagascar Sign Language": "mzc", "Madak": "mmx", "Maden": "xmx", "Madhi Madhi": "dmd", "Madi": "grg", "Madngele": "zml", "Madukayang Kalinga": "kmd", "Madurese": "mad", "Mae": "mme", "Maek": "hmk", "Maeng Itneg": "itt", "Mafa": "maf", "Mafea": "mkv", "Mag-Anchi Ayta": "sgb", "Mag-Indi Ayta": "blx", "Magadhi Prakrit": "inc-mgd", "Magahat": "mtw", "Magahi": "mag", "Magdalena Peñasco Mixtec": "xtm", "Magiyi": "gmg", "Magoma": "gmx", "Magori": "zgr", "Maguindanao": "mdh", "Magɨ": "gkd", "Mahali": "mjx", "Maharastri Prakrit": "pmh", "Mahasu Pahari": "bfz", "Mahican": "mjy", "Mahongwe": "mhb", "Mahou": "mxx", "Maia": "sks", "Maiadomu": "mzz", "Maiani": "tnh", "Maii": "mmm", "Mailu": "mgu", "Maindo": "cwb", "Mairasi": "zrs", "Maisin": "mbq", "Maithili": "mai", "Maiwa (Indonesia)": "wmm", "Maiwa (New Guinea)": "mti", "Maiwala": "mum", "Majang": "mpe", "Majera": "xmj", "Majhi": "mjz", "Majhwar": "mmj", "Mak (China)": "mkg", "Mak (Nigeria)": "pbl", "Makaa": "mcp", "Makah": "myh", "Makalero": "mjb", "Makasae": "mkz", "Makasar": "mak", "Makassar Malay": "mfp", "Makayam": "aup", "Makhuwa": "vmw", "Makhuwa-Marrevone": "xmc", "Makhuwa-Meetto": "mgh", "Makhuwa-Moniga": "mhm", "Makhuwa-Saka": "xsq", "Makhuwa-Shirima": "vmk", "Maklew": "mgf", "Makolkol": "zmh", "Makonde": "kde", "Maku": "xak", "Maku'a": "lva", "Makuri Naga": "jmn", "Makuráp": "mpu", "Makwe": "ymk", "Makyan Naga": "umn", "Mal": "mlf", "Mal Paharia": "mkb", "Mala (New Guinea)": "ped", "Mala (Nigeria)": "ruy", "Mala Malasar": "ima", "Malaccan Creole Malay": "ccm", "Malagasy": "mg", "Malalamai": "mmt", "Malalí": "sai-mal", "Malango": "mln", "Malankuravan": "mjo", "Malapandaram": "mjp", "Malaryan": "mjq", "Malas": "mkr", "Malasanga": "mqz", "Malasar": "ymr", "Malavedan": "mjr", "Malawi Lomwe": "lon", "Malawian Sign Language": "lws", "Malay": "ms", "Malayalam": "ml", "Malayic Dayak": "xdy", "Malaynon": "mlz", "Malaysian Sign Language": "xml", "Malba Birifor": "bfo", "Male": "mdc", "Malecite-Passamaquoddy": "pqm", "Maleng": "pkt", "Maleu-Kilenge": "mgl", "Malfaxal": "mlx", "Malgana": "vml", "Malgbe": "mxf", "Mali": "gcc", "Malibu": "sai-mlb", "Malila": "mgq", "Malimba": "mzd", "Malimpung": "mli", "Malinaltepec Tlapanec": "tcf", "Malol": "mbk", "Maltese": "mt", "Maltese Sign Language": "mdl", "Malua Bay": "mll", "Malvi": "mup", "Maléku Jaíka": "gut", "Mam": "mam", "Mama": "mma", "Mamaa": "mhf", "Mamaindé": "wmd", "Mamanwa": "mmn", "Mamara Senoufo": "myk", "Mamasa": "mqj", "Mambae": "mgm", "Mambai": "mcs", "Mamboru": "mvd", "Mambwe-Lungu": "mgr", "Mampruli": "maw", "Mamuju": "mqx", "Mamulique": "emm", "Mamusi": "kdf", "Mamvu": "mdi", "Man Met": "mml", "Manado Malay": "xmm", "Manam": "mva", "Manambu": "mle", "Manangba": "nmm", "Manangkari": "znk", "Manao": "awd-man", "Manchu": "mnc", "Manda (Australia)": "zma", "Manda (India)": "mha", "Manda (Tanzania)": "mgs", "Mandahuaca": "mht", "Mandaic": "mid", "Mandailing Batak": "btm", "Mandalorian": "art-man", "Mandan": "mhq", "Mandandanyi": "zmk", "Mandar": "mdr", "Mandara": "tbf", "Mandari": "mqu", "Mandarin": "cmn", "Mandeali": "mjl", "Mander": "mqr", "Mandingo": "man", "Mandinka": "mnk", "Mandjak": "mfv", "Mandobo Atas": "aax", "Mandobo Bawah": "bwp", "Manem": "jet", "Mang": "zng", "Mangala": "mem", "Mangarayi": "mpc", "Mangarevan": "mrv", "Mangas": "zns", "Mangayat": "myj", "Mangbetu": "mdj", "Mangbutu": "mdk", "Mangerr": "zme", "Mangga Buang": "mmo", "Manggarai": "mqy", "Mangghuer": "xgn-mgr", "Mango": "mge", "Mangole": "mqc", "Mangseng": "mbh", "Manigri-Kambolé Ede Nago": "xkb", "Manikion": "mnx", "Manipa": "mqp", "Manipuri": "mni", "Mankanya": "knf", "Mankiyali": "nlm", "Manna-Dora": "mju", "Mannan": "mjv", "Mano": "mev", "Manombai": "woo", "Mansaka": "msk", "Mansi": "mns", "Mansoanka": "msw", "Manta": "myg", "Mantsi": "nty", "Manumanaw Karen": "kxf", "Manusela": "wha", "Manx": "gv", "Manya": "mzj", "Manyawa": "mny", "Manza": "mzv", "Mao Naga": "nbi", "Maonan": "mmd", "Maore Comorian": "swb", "Maori": "mi", "Mape": "mlh", "Mapena": "mnm", "Mapia": "mpy", "Mapidian": "mpw", "Mapos Buang": "bzh", "Mapoyo": "mcg", "Mapudungun": "arn", "Mapun": "sjm", "Maquiritari": "mch", "Mara": "mec", "Mara Chin": "mrh", "Marachi": "lri", "Maraghei": "vmh", "Maragus": "mrs", "Maram Naga": "nma", "Marama": "lrm", "Maranao": "mrw", "Maranungku": "zmr", "Mararit": "mgb", "Marathi": "mr", "Maratino": "sai-mar", "Marau": "mvr", "Marawan": "awd-mar", "Marba": "mpg", "Marenje": "vmr", "Marfa": "mvu", "Margany": "zmc", "Marghi South": "mfm", "Margi": "mrt", "Margu": "mhg", "Maria": "mds", "Mariaté": "awd-mrt", "Maricopa": "mrc", "Maridan": "zmd", "Maridjabin": "zmj", "Marik": "dad", "Marimanindji": "zmm", "Marind": "mrz", "Maring": "mbw", "Maring Naga": "nng", "Maringarr": "zmt", "Marino": "mrb", "Mariri": "mqi", "Maritime Sign Language": "nsr", "Maritsauá": "msp", "Mariupol Greek": "grk-mar", "Mariyedi": "zmy", "Marka": "rkm", "Markweeta": "enb", "Marma": "rmz", "Maroon Spirit Language": "cpe-mar", "Marovo": "mvo", "Marriammu": "xru", "Marrithiyel": "mfr", "Marrucinian": "umc", "Marshallese": "mh", "Marsian": "ims", "Martha's Vineyard Sign Language": "mre", "Marti Ke": "zmg", "Martu Wangka": "mpj", "Martuthunira": "vma", "Marwari": "mwr", "Marúbo": "mzr", "Masaba": "myx", "Masadiit Itneg": "tis", "Masakará": "sai-msk", "Masalit": "mls", "Masana": "mcn", "Masbate Sorsogon": "bks", "Masbatenyo": "msb", "Mashco Piro": "cuj", "Mashi": "mho", "Masimasi": "ism", "Masiwang": "bnf", "Maskelynes": "klv", "Maslam": "msv", "Masmaje": "mes", "Massachusett": "wam", "Massalat": "mdg", "Massep": "mvs", "Matagalpa": "mtn", "Matal": "mfh", "Matanawi": "sai-mat", "Matbat": "xmt", "Matengo": "mgv", "Matepi": "mqe", "Matigsalug Manobo": "mbt", "Matipuhy": "mzo", "Matlatzinca": "mat", "Mato": "met", "Mato Grosso Arára": "axg", "Mator": "mtm", "Matsés": "mcf", "Mattole": "mvb", "Matukar": "mjk", "Matumbi": "mgw", "Matya Samo": "stj", "Matís": "mpq", "Maung": "mph", "Mauritian Creole": "mfe", "Mauritian Sign Language": "lsy", "Mauwake": "mhl", "Mawa": "mcw", "Mawak": "mjj", "Mawan": "mcz", "Mawayana": "mzx", "Mawchi": "mke", "Mawes": "mgk", "Maxakalí": "mbl", "Maxi Gbe": "mxl", "Maya Samo": "sym", "Mayaguduna": "xmy", "Mayangna": "yan", "Mayawali": "yxa", "Maybrat": "ayz", "Mayeka": "myc", "Mayi-Thakurti": "xyt", "Maykulan": "mnt", "Maynas": "sai-mys", "Mayo": "mfy", "Mayogo": "mdm", "Mayoyao Ifugao": "ifu", "Maypure": "awd-mpr", "Mazagway": "dkx", "Mazaltepec Zapotec": "zpy", "Mazanderani": "mzn", "Mazatlán Mazatec": "vmz", "Mazatlán Mixe": "mzl", "Mba": "mfc", "Mbabaram": "vmb", "Mbala": "mdp", "Mbalanhu": "lnb", "Mbandja": "zmz", "Mbangala": "mxg", "Mbangi": "mgn", "Mbangwe": "zmn", "Mbara (Australia)": "mvl", "Mbara (Chad)": "mpk", "Mbariman-Gudhinma": "zmv", "Mbati": "mdn", "Mbato": "gwa", "Mbay": "myb", "Mbe": "mfo", "Mbe'": "mtk", "Mbelime": "mql", "Mbere": "mdt", "Mbesa": "zms", "Mbiywom": "aus-mbi", "Mbo (Cameroon)": "mbo", "Mbo (Congo)": "zmw", "Mboi": "moi", "Mboko": "mdu", "Mbole": "mdq", "Mbonga": "xmb", "Mbongno": "bgu", "Mbosi": "mdw", "Mbowe": "mxo", "Mbre": "mka", "Mbu'": "muc", "Mbudum": "xmd", "Mbugu": "mhd", "Mbugwe": "mgz", "Mbuko": "mqb", "Mbukushu": "mhw", "Mbula": "mna", "Mbula-Bwazza": "mbu", "Mbule": "mlb", "Mbulungish": "mbv", "Mbum": "mdd", "Mbunda": "mck", "Mbunga": "mgy", "Mburku": "bbt", "Mbuun": "zmp", "Mbwela": "mfu", "Mbyá Guaraní": "gun", "Me'en": "mym", "Mea": "meg", "Mebu": "mjn", "Mecayapan Nahuatl": "nhx", "Medebur": "mjm", "Medefaidrin": "dmf", "Media Lengua": "mue", "Mednyj Aleut": "mud", "Medumba": "byv", "Mefele": "mfj", "Megam": "mef", "Megleno-Romanian": "ruq", "Mehek": "nux", "Mehináku": "mmh", "Mehri": "gdq", "Mekeo": "mek", "Mekmek": "mvk", "Mekwei": "msf", "Mel-Khaonh": "hkn", "Mele-Fila": "mxe", "Melo": "mfx", "Melpa": "med", "Memoni": "mby", "Mendalam Kayan": "xkd", "Mendankwe-Nkwen": "mfd", "Mende": "men", "Mengaka": "xmg", "Mengen": "mee", "Menien": "sai-men", "Menka": "mea", "Menominee": "mez", "Mentawai": "mwv", "Menya": "mcr", "Meoswar": "mvx", "Mer": "mnu", "Meramera": "mxm", "Merei": "lmb", "Merey": "meq", "Meriam": "ulk", "Merlav": "mrm", "Meroitic": "xmr", "Meru": "mer", "Mesaka": "iyo", "Mese": "mci", "Mesme": "zim", "Mesmes": "mys", "Mesqan": "mvz", "Messapic": "cms", "Meta'": "mgo", "Metlatónoc Mixtec": "mxv", "Mewari": "mtr", "Mewati": "wtm", "Mexican Sign Language": "mfs", "Meyah": "mej", "Mezontla Popoloca": "pbe", "Mezquital Otomi": "ote", "Meänkieli": "fit", "Mfinu": "zmf", "Mfumte": "nfu", "Mgbo": "gmz", "Mi'kmaq": "mic", "Miami": "mia", "Mian": "mpt", "Miani": "pla", "Michif": "crg", "Michigamea": "cmm", "Michoacán Mazahua": "mmc", "Michoacán Nahuatl": "ncl", "Mid Grand Valley Dani": "dnt", "Mid-Southern Banda": "bjo", "Middle Armenian": "axm", "Middle Assamese": "inc-mas", "Middle Bengali": "inc-mbn", "Middle Breton": "xbm", "Middle Chinese": "ltc", "Middle Cornish": "cnx", "Middle Dutch": "dum", "Middle English": "enm", "Middle French": "frm", "Middle Gujarati": "inc-mgu", "Middle High German": "gmh", "Middle Irish": "mga", "Middle Kannada": "dra-mkn", "Middle Khmer": "xhm", "Middle Korean": "okm", "Middle Low German": "gml", "Middle Median": "xme-mid", "Middle Mon": "mkh-mmn", "Middle Mongol": "xng", "Middle Newar": "nwx", "Middle Norwegian": "gmq-mno", "Middle Oriya": "inc-mor", "Middle Persian": "pal", "Middle Vietnamese": "mkh-mvi", "Middle Watut": "mpl", "Middle Welsh": "wlm", "Midob": "mei", "Migaama": "mmy", "Migabac": "mpp", "Miji": "sjl", "Miju": "mxj", "Mikasuki": "mik", "Milang": "und-mil", "Mili": "ymh", "Millcayac": "sai-mil", "Miltu": "mlj", "Miluk": "iml", "Milyan": "imy", "Mimi of Decorse": "und-mmd", "Mimi of Nachtigal": "und-mmn", "Min Bei": "mnp", "Min Dong": "cdo", "Min Nan": "nan", "Min Zhong": "czo", "Mina": "hna", "Minaean": "inm", "Minang": "xrg", "Minangkabau": "min", "Minanibai": "mcv", "Minaveha": "mvn", "Minderico": "drc", "Mindiri": "mpn", "Mingang Doso": "mko", "Mingo": "iro-min", "Mingrelian": "xmf", "Minica Huitoto": "hto", "Minidien": "wii", "Minigir": "vmg", "Minjungbal": "xjb", "Minkin": "xxm", "Minoan": "omn", "Minokok": "mqq", "Minriq": "mnq", "Mintil": "mzt", "Miqie": "yiq", "Mirandese": "mwl", "Miraya Bikol": "rbl", "Mire": "mvh", "Mirgan": "zrg", "Miriti": "mmv", "Miriwoong Sign Language": "rsm", "Miriwung": "mep", "Mirpur Panjabi": "pmu", "Misantla Totonac": "tlc", "Miship": "mjs", "Misima-Paneati": "mpx", "Mising": "mrg", "Miskito": "miq", "Mitla Zapotec": "zaw", "Mitlatongo Mixtec": "vmm", "Mittu": "mwu", "Mituku": "zmq", "Miu": "mpo", "Miwa": "vmi", "Mixed Great Andamanese": "gac", "Mixifore": "mfg", "Mixtepec Mixtec": "mix", "Mixtepec Zapotec": "zpm", "Miya": "mkf", "Miyako": "mvi", "Miyobe": "soy", "Mizo": "lus", "Mlabri": "mra", "Mlahsö": "lhs", "Mlap": "kja", "Mlomp": "mlo", "Mmaala": "mmu", "Mmani": "buy", "Mmen": "bfm", "Mo": "wkd", "Mo'da": "gbn", "Moabite": "obm", "Moba": "mfq", "Mobilian": "mod", "Mobumrin Aizi": "ahm", "Mocana": "sai-mcn", "Mochi": "old", "Mochica": "omc", "Mocho": "mhc", "Mocoví": "moc", "Modang": "mxd", "Modole": "mqo", "Moere": "mvq", "Mofu-Gudur": "mif", "Mogholi": "mhj", "Mogum": "mou", "Mohawk": "moh", "Mohegan-Pequot": "xpq", "Moi (Congo)": "mow", "Moi (Indonesia)": "mxn", "Moikodi": "mkp", "Moingi": "mwz", "Mojave": "mov", "Moji": "ymi", "Mok": "mqt", "Moken": "mwt", "Mokerang": "mft", "Mokilese": "mkj", "Moklen": "mkm", "Mokole": "mkl", "Mokpwe": "bri", "Moksha": "mdf", "Molale": "mbe", "Molbog": "pwm", "Moldova Sign Language": "vsi", "Molengue": "bxc", "Molima": "mox", "Molmo One": "aun", "Molo": "zmo", "Molof": "msl", "Moloko": "mlw", "Mom Jango": "ver", "Moma": "myl", "Momare": "msz", "Mombo Dogon": "dmb", "Mombum": "mso", "Momina": "mmb", "Momuna": "mqf", "Mon": "mnw", "Monastic Sign Language": "mzg", "Mondropolon": "npn", "Mondé": "mnd", "Mongghul": "xgn-mgl", "Mongo": "lol", "Mongol": "mgt", "Mongolian": "mn", "Mongolian Sign Language": "msr", "Mongondow": "mog", "Moni": "mnz", "Monimbo": "mom", "Mono (California)": "mnr", "Mono (Cameroon)": "mru", "Mono (Congo)": "mnh", "Monom": "moo", "Monsang Naga": "nmh", "Montagnais": "moe", "Montana Salish": "fla", "Montol": "mtl", "Monumbo": "mxk", "Monzombo": "moj", "Moo": "gwg", "Moore": "mos", "Moose Cree": "crm", "Mopan Maya": "mop", "Mor (Austronesian)": "mhz", "Mor (Papuan)": "moq", "Moraid": "msg", "Moran": "sit-mor", "Morawa": "mze", "Morelos Nahuatl": "nhm", "Morerebi": "xmo", "Moresada": "msx", "Mori Atas": "mzq", "Mori Bawah": "xmz", "Morigi": "mdb", "Moro": "mor", "Moroccan Amazigh": "zgh", "Moroccan Arabic": "ary", "Moroccan Sign Language": "xms", "Morokodo": "mgc", "Morom": "bdo", "Moronene": "mqn", "Morori": "mok", "Morouas": "mrp", "Mortlockese": "mrl", "Moru": "mgd", "Mosimo": "mqv", "Moskona": "mtj", "Mota": "mtt", "Motembo": "tmv", "Motu": "meu", "Mouk-Aria": "mwh", "Mount Iraya Agta": "atl", "Mount Iriga Agta": "agz", "Mountain Koiari": "kpx", "Mouwase": "jmw", "Movima": "mzp", "Moyadan Itneg": "ity", "Moyon Naga": "nmo", "Mozambican Sign Language": "mzy", "Mozarabic": "mxi", "Mpade": "mpi", "Mpalitjanh": "xpj", "Mpi": "mpz", "Mpiemo": "mcx", "Mpiin": "bnt-mpi", "Mpinda": "pnd", "Mpongmpong": "mgg", "Mpoto": "mpa", "Mpotovoro": "mvt", "Mpuono": "bnt-mpu", "Mpur": "akc", "Mro Chin": "cmr", "Mru": "mro", "Mser": "kqx", "Muak Sa-aak": "ukk", "Mualang": "mtd", "Mubami": "tsx", "Mubi": "mub", "Mucuchí": "sai-muc", "Muda": "ymd", "Mudburra": "dmw", "Mudu Koraga": "vmd", "Muduapa": "wiv", "Muduga": "udg", "Muellama": "sai-mue", "Mufian": "aoj", "Muher": "sem-mhr", "Muinane": "bmr", "Mukha-Dora": "mmk", "Mukulu": "moz", "Mulaha": "mfw", "Mulam": "mlm", "Mulao": "giu", "Mullu Kurumba": "kpb", "Mullukmulluk": "mpb", "Muluridyi": "vmu", "Mum": "kqa", "Mumuye": "mzm", "Muna": "mnb", "Munda": "unx", "Mundabli": "boe", "Mundang": "mua", "Mundani": "mnf", "Mundari": "unr", "Mundat": "mmf", "Mundolinco": "art-mun", "Mundurukú": "myu", "Mungaka": "mhk", "Mungbam": "mij", "Munggui": "mth", "Mungkip": "mpv", "Muniche": "myr", "Munit": "mtc", "Munji": "mnj", "Munsee": "umu", "Muong": "mtq", "Mur Pano": "tkv", "Muratayak": "asx", "Murik (Malaysia)": "mxr", "Murik (New Guinea)": "mtf", "Murkim": "rmh", "Murle": "mur", "Murrinh-Patha": "mwf", "Mursi": "muz", "Murui Huitoto": "huu", "Murupi": "mqw", "Muruwari": "zmu", "Musan": "mmp", "Musar": "mmi", "Musasa": "smm", "Musey": "mse", "Musgu": "mug", "Musi": "mui", "Muskum": "mje", "Musom": "msu", "Mussau-Emira": "emi", "Muthuvan": "muv", "Mutu": "tuc", "Muya": "mvm", "Muyang": "muy", "Muyuw": "myw", "Muzi": "ymz", "Muzo": "sai-muz", "Mvanip": "mcj", "Mvuba": "mxh", "Mwaghavul": "sur", "Mwali Comorian": "wlc", "Mwan": "moa", "Mwani": "wmw", "Mwatebu": "mwa", "Mwera": "mwe", "Mwimbi-Muthambi": "mws", "Mwotlap": "mlv", "Mycenaean Greek": "gmy", "Myene": "mye", "Mysian": "yms", "Mzieme Naga": "nme", "Mághdì": "gmd", "Mòcheno": "mhn", "Mün Chin": "mwq", "Mündü": "muh", "N'Ko": "nqo", "Na": "nbt", "Na'vi": "art-nav", "Naaba": "nao", "Naba": "mne", "Nabak": "naf", "Nabi": "mty", "Nachering": "ncd", "Nadruvian": "ndf", "Nadëb": "mbj", "Nafaanra": "nfr", "Nafi": "srf", "Nafri": "nxx", "Naga Pidgin": "nag", "Nagarchal": "nbg", "Nage": "nxe", "Nagtipunan Agta": "phi-nag", "Nagu": "ngr", "Nagumi": "ngv", "Nahali": "nlx", "Nahari": "nhh", "Nahavaq": "sns", "Nahuatl": "nah", "Nai": "bio", "Najdi Arabic": "ars", "Naka'ela": "nae", "Nakai": "nkj", "Nakame": "nib", "Nakanai": "nak", "Nakara": "nck", "Nake": "nbk", "Naki": "mff", "Nakwi": "nax", "Nalca": "nlc", "Nali": "nss", "Nalik": "nal", "Nalu": "naj", "Naluo Yi": "ylo", "Nalögo": "nlz", "Namakura": "nmk", "Namat": "nkm", "Nambikwara": "nab", "Nambo": "ncm", "Nambya": "nmq", "Namia": "nnm", "Namiae": "nvm", "Namibian Sign Language": "nbs", "Namla": "naa", "Namo": "mxw", "Namonuito": "nmt", "Namosi-Naitasiri-Serua": "bwb", "Namuyi": "nmy", "Nanai": "gld", "Nancere": "nnc", "Nande": "nnb", "Nandi": "niq", "Nanerigé Sénoufo": "sen", "Nanga Dama Dogon": "nzz", "Nankina": "nnk", "Nanti": "cox", "Nanticoke": "nnt", "Nanubae": "afk", "Naolan": "nai-nao", "Napu": "npy", "Nar Phu": "npa", "Nara": "nrb", "Narak": "nac", "Narango": "nrg", "Narau": "nxu", "Narim": "loh", "Naro": "nhr", "Narom": "nrm", "Narragansett": "xnt", "Narua": "nru", "Narungga": "nnr", "Nasal": "nsy", "Nasarian": "nvh", "Nasioi": "nas", "Naskapi": "nsk", "Nasu": "ywq", "Natagaimas": "nts", "Natchez": "ncz", "Nateni": "ntm", "Nathembo": "nte", "Natioro": "nti", "Natú": "sai-nat", "Natügu": "ntu", "Nauete": "nxa", "Naukanski": "ynk", "Nauna": "ncn", "Nauo": "nwo", "Nauruan": "na", "Navajo": "nv", "Navarro-Aragonese": "roa-oan", "Navut": "nsw", "Nawaru": "nwr", "Nawathinehena": "nwa", "Nawdm": "nmz", "Nawuri": "naw", "Naxi": "nxq", "Nayi": "noz", "Ncane": "ncr", "Nchumbulu": "nlu", "Nda'nda'": "nnz", "Ndai": "gke", "Ndaka": "ndk", "Ndali": "ndh", "Ndam": "ndm", "Ndamba": "ndj", "Ndambomo": "nxo", "Ndasa": "nda", "Ndau": "ndc", "Nde-Gbite": "ned", "Nde-Nsele-Nta": "ndd", "Ndemli": "nml", "Ndendeule": "dne", "Ndengereko": "ndg", "Nding": "eli", "Ndjébbana": "djj", "Ndo": "ndp", "Ndobo": "ndw", "Ndoe": "nbb", "Ndogo": "ndz", "Ndolo": "ndl", "Ndom": "nqm", "Ndombe": "ndq", "Ndonga": "ng", "Ndoola": "ndr", "Ndrulo": "dno", "Nduga": "ndx", "Ndumu": "nmd", "Ndunda": "nuh", "Ndunga": "ndt", "Ndut": "ndv", "Ndyuka-Trio Pidgin": "njt", "Ndzwani Comorian": "wni", "Neapolitan": "nap", "Nedebang": "nec", "Nefamese": "nef", "Nefusa": "jbn", "Negerhollands": "dcr", "Negeri Sembilan Malay": "zmi", "Negidal": "neg", "Nehan": "nsn", "Nek": "nif", "Nekgini": "nkg", "Neko": "nej", "Neku": "nek", "Neme": "nex", "Nemi": "nem", "Nen": "nqn", "Nend": "anh", "Nengone": "nen", "Neo": "neu", "Nepalese Sign Language": "nsp", "Nepali": "ne", "Nepali Kurux": "kxl", "Nete": "net", "Neve'ei": "vnm", "Neverver": "lgk", "New Caledonian Javanese": "jas", "New River Shasta": "nai-nrs", "New Zealand Sign Language": "nzs", "Newar": "new", "Neyo": "ney", "Nez Perce": "nez", "Nga La": "hlt", "Ngaanyatjarra": "ntj", "Ngadha": "nxg", "Ngadjunmaya": "nju", "Ngadjuri": "jui", "Ngaing": "nnf", "Ngaju": "nij", "Ngala": "nud", "Ngalakan": "nig", "Ngalkbun": "ngk", "Ngalum": "szb", "Ngam": "nmc", "Ngamambo": "nbv", "Ngambay": "sba", "Ngamini": "nmv", "Ngamo": "nbh", "Ngan'gityemerri": "nam", "Nganakarti": "xnk", "Nganasan": "nio", "Ngandi": "nid", "Ngando (Central African Republic)": "ngd", "Ngando (Congo)": "nxd", "Ngandyera": "nne", "Ngangam": "gng", "Ngantangarra": "ntg", "Nganyaywana": "nyx", "Ngardi": "rxd", "Ngarigu": "xni", "Ngarinman": "nbj", "Ngarinyin": "ung", "Ngarla": "nrk", "Ngarluma": "nrl", "Ngarrindjeri": "nay", "Ngas": "anc", "Ngasa": "nsg", "Ngatik Men's Creole": "ngm", "Ngawn Chin": "cnw", "Ngawun": "nxn", "Ngazidja Comorian": "zdj", "Ngbaka": "nga", "Ngbaka Ma'bo": "nbm", "Ngbaka Manza": "ngg", "Ngbee": "jgb", "Ngbinda": "nbd", "Ngbundu": "nuu", "Ngelima": "agh", "Ngemba": "nge", "Ngen": "gnj", "Ngendelengo": "nql", "Ngeq": "ngt", "Ngete": "nnn", "Nggem": "nbq", "Nggwahyi": "ngx", "Ngie": "ngj", "Ngiemboon": "nnh", "Ngile": "jle", "Ngindo": "nnq", "Ngiti": "niy", "Ngiyambaa": "wyb", "Ngizim": "ngi", "Ngkoth": "aus-ngk", "Ngkâlmpw Kanum": "kcd", "Ngochang": "tbq-ngo", "Ngom": "nra", "Ngomba": "jgo", "Ngombale": "nla", "Ngombe (Central African Republic)": "nmj", "Ngombe (Congo)": "ngc", "Ngong": "nnx", "Ngongo": "noq", "Ngoni": "ngo", "Ngoreme": "ngq", "Ngoshie": "nsh", "Ngul": "nlo", "Ngulu": "ngp", "Nguluwan": "nuw", "Ngumbi": "nui", "Ngunawal": "xul", "Ngundi": "ndn", "Ngundu": "nue", "Ngungwel": "ngz", "Ngurmbur": "nrx", "Nguôn": "nuo", "Ngwaba": "ngw", "Ngwe": "nwe", "Ngwo": "ngn", "Ngäbere": "gym", "Nhanda": "nha", "Nheengatu": "yrl", "Nhirrpi": "hrp", "Nhuwala": "nhf", "Nias": "nia", "Nicaraguan Creole": "bzk", "Nicaraguan Sign Language": "ncs", "Nicola": "ath-nic", "Niellim": "nie", "Nigeria Mambila": "mzk", "Nigerian Pidgin": "pcm", "Nigerian Sign Language": "nsi", "Nihali": "nll", "Nii": "nii", "Niksek": "gbe", "Nila": "nil", "Nilamba": "nim", "Nimadi": "noe", "Nimanbur": "nmp", "Nimbari": "nmr", "Nimboran": "nir", "Nimi": "nis", "Nimo": "niw", "Nimoa": "nmw", "Ninam": "shb", "Nindi": "nxi", "Ningera": "nby", "Ninggerum": "nxr", "Ningil": "niz", "Ninia Yali": "nlk", "Ninzo": "nin", "Nipsan": "nps", "Nisa": "njs", "Nisenan": "nsz", "Nisga'a": "ncg", "Nisi": "yso", "Niuafo'ou": "num", "Niuatoputapu": "nkp", "Niuean": "niu", "Nivaclé": "cag", "Nivkh": "niv", "Niwer Mil": "hrc", "Niya Prakrit": "pra-niy", "Njalgulgule": "njl", "Njebi": "nzb", "Njen": "njj", "Njerep": "njr", "Njyem": "njy", "Nkami": "nkq", "Nkangala": "nkn", "Nkari": "nkz", "Nkem-Nkum": "isi", "Nkhumbi": "khu", "Nkongho": "nkc", "Nkonya": "nko", "Nkoroo": "nkx", "Nkoya": "nka", "Nkukoli": "nbo", "Nkutu": "nkw", "Nnam": "nbp", "Nobiin": "fia", "Nobonob": "gaw", "Nocamán": "nom", "Nocte Naga": "njb", "Nogai": "nog", "Noiri": "noi", "Nokuku": "nkk", "Nomaande": "lem", "Nomane": "nof", "Nomatsiguenga": "not", "Nomlaki": "nol", "Nomu": "noh", "Nong Zhuang": "zhn", "Nonuya": "noj", "Nooksack": "nok", "Noon": "snf", "Noone": "nhu", "Nootka": "nuk", "Nopala Chatino": "cya", "Noric": "nrc", "Norman": "nrf", "Norn": "nrn", "Norra": "nrr", "North Alaskan Inupiatun": "esi", "North Ambrym": "mmg", "North Asmat": "nks", "North Awyu": "yir", "North Babar": "bcd", "North Boma": "boh", "North Central Mixe": "neq", "North Efate": "llp", "North Fali": "fll", "North Frisian": "frr", "North Giziga": "gis", "North Levantine Arabic": "apc", "North Marquesan": "mrq", "North Mesopotamian Arabic": "ayp", "North Mofu": "mfk", "North Moluccan Malay": "max", "North Muyu": "kti", "North Nuaulu": "nni", "North Picene": "nrp", "North Slavey": "scs", "North Tairora": "tbg", "North Tanna": "tnn", "North Wahgi": "whg", "North Watut": "una", "Northeast Kiwai": "kiw", "Northeast Maidu": "nmu", "Northeast Pashayi": "aee", "Northeastern Dinka": "dip", "Northeastern Pomo": "pef", "Northern Alta": "aqn", "Northern Altai": "atv", "Northern Amami-Oshima": "ryn", "Northern Bai": "bfc", "Northern Bontoc": "rbk", "Northern Catanduanes Bicolano": "cts", "Northern Dagara": "dgi", "Northern East Cree": "crl", "Northern Emberá": "emp", "Northern Ghale": "ghh", "Northern Grebo": "gbo", "Northern Guiyang Hmong": "huj", "Northern Haida": "hdn", "Northern Hindko": "hno", "Northern Huishui Hmong": "hmi", "Northern Kalapuya": "nrt", "Northern Kam": "doc", "Northern Kankanay": "xnn", "Northern Khmer": "kxm", "Northern Kissi": "kqs", "Northern Kurdish": "kmr", "Northern Lorung": "lbr", "Northern Luri": "lrc", "Northern Mashan Hmong": "hmp", "Northern Muji": "ymx", "Northern Ndebele": "nd", "Northern Ngbandi": "ngb", "Northern Nisu": "yiv", "Northern Nuni": "nuv", "Northern Oaxaca Nahuatl": "nhy", "Northern Ohlone": "cst", "Northern One": "onr", "Northern Paiute": "pao", "Northern Pame": "pmq", "Northern Pomo": "pej", "Northern Puebla Nahuatl": "ncj", "Northern Pumi": "pmi", "Northern Pwo": "pww", "Northern Qiandong Miao": "hea", "Northern Qiang": "cng", "Northern Rengma Naga": "nnl", "Northern Roglai": "rog", "Northern Saharan Berber": "mzb", "Northern Sami": "se", "Northern Selkup": "sel-nor", "Northern Sierra Miwok": "nsq", "Northern Sotho": "nso", "Northern Subanen": "stb", "Northern Tarahumara": "thh", "Northern Tepehuan": "ntp", "Northern Thai": "nod", "Northern Tidong": "ntd", "Northern Tlaxiaco Mixtec": "xtn", "Northern Toussian": "tsp", "Northern Tujia": "tji", "Northern Tutchone": "ttm", "Northern Valley Yokuts": "nai-nvy", "Northern Yukaghir": "ykg", "Northwest Alaska Inupiatun": "esk", "Northwest Gbaya": "gya", "Northwest Maidu": "mjd", "Northwest Oaxaca Mixtec": "mxa", "Northwest Pashayi": "glh", "Northwestern Dinka": "diw", "Northwestern Fars": "faz", "Northwestern Ojibwa": "ojb", "Northwestern Tamang": "tmk", "Norwegian": "no", "Norwegian Bokmål": "nb", "Norwegian Nynorsk": "nn", "Norwegian Sign Language": "nsl", "Notre": "bly", "Notsi": "ncf", "Nottoway": "ntw", "Nottoway-Meherrin": "nwy", "Novial": "nov", "Noxilo": "art-nox", "Noy": "noy", "Nsari": "asj", "Nsenga": "nse", "Nshi": "nsc", "Nsong": "soo", "Nsongo": "nsx", "Ntcham": "bud", "Ntomba": "nto", "Ntra'ngith": "dgt", "Nubaca": "baf", "Nubi": "kcn", "Nuer": "nus", "Nuguria": "nur", "Nuk": "noc", "Nukak Makú": "mbr", "Nukna": "klt", "Nukuini": "nuc", "Nukumanu": "nuq", "Nukunu": "nnv", "Nukunul": "xnu", "Nukuoro": "nkr", "Numana": "nbr", "Numanggang": "nop", "Numbami": "sij", "Nume": "tgs", "Numee": "kdk", "Numidian": "nxm", "Nung": "nut", "Nungali": "nug", "Nunggubuyu": "nuy", "Nungon": "paa-nun", "Nungu": "rin", "Nupbikha": "npb", "Nupe": "nup", "Nusa Laut": "nul", "Nusu": "nuf", "Nutabe": "cba-nut", "Nyabwa": "nwb", "Nyah Kur": "cbn", "Nyaheun": "nev", "Nyakyusa": "nyy", "Nyali": "nlj", "Nyam": "nmi", "Nyamal": "nly", "Nyambo": "now", "Nyamusa-Molo": "nwm", "Nyamwanga": "mwn", "Nyamwezi": "nym", "Nyaneka": "nyk", "Nyang'i": "nyp", "Nyanga (Congo)": "nyj", "Nyanga (Togo)": "ayg", "Nyanga-li": "nyc", "Nyangatom": "nnj", "Nyangbo": "nyb", "Nyangga": "nny", "Nyangumarta": "nna", "Nyankole": "nyn", "Nyarafolo Senoufo": "sev", "Nyaturu": "rim", "Nyaw": "nyw", "Nyawaygi": "nyt", "Nyemba": "nba", "Nyengo": "nye", "Nyenkha": "neh", "Nyeu": "nyl", "Nyigina": "nyh", "Nyiha": "nih", "Nyika": "nkt", "Nyimang": "nyi", "Nyindrou": "lid", "Nyindu": "nyg", "Nyishi": "njz", "Nyiyaparli": "xny", "Nyokon": "nvo", "Nyole (Kenya)": "nyd", "Nyole (Uganda)": "nuj", "Nyong": "muo", "Nyoro": "nyo", "Nyulnyul": "nyv", "Nyunga": "nys", "Nyungwe": "nyu", "Nyâlayu": "yly", "Nzadi": "nzd", "Nzakambay": "nzy", "Nzakara": "nzk", "Nzanyi": "nja", "Nzima": "nzi", "Ná-Meo": "neo", "Nüpode Huitoto": "hux", "Nǀuu": "ngh", "O'chi'chi'": "xoc", "O'du": "tyh", "O'odham": "ood", "Obanliku": "bzy", "Obispeño": "obi", "Oblo": "obl", "Obo Manobo": "obo", "Obokuitai": "afz", "Obolo": "ann", "Obulom": "obu", "Ocaina": "oca", "Occitan": "oc", "Ocotepec Mixtec": "mie", "Ocotlán Zapotec": "zac", "Od": "odk", "Odiai": "bhf", "Odoodee": "kkc", "Odual": "odu", "Odut": "oda", "Ofayé": "opy", "Ofo": "ofo", "Ogbah": "ogc", "Ogbia": "ogb", "Ogbogolo": "ogg", "Ogbronuagum": "ogu", "Ogea": "eri", "Oirata": "oia", "Ojibwe": "oj", "Ojitlán Chinantec": "chj", "Okanagan": "oka", "Oki-No-Erabu": "okn", "Okiek": "oki", "Okinawan": "ryu", "Oko-Eni-Osayen": "oks", "Oko-Juwoi": "okj", "Okobo": "okb", "Okodia": "okd", "Okolod": "kqv", "Okpamheri": "opa", "Okpe (Northwestern Edo)": "okx", "Okpe (Southwestern Edo)": "oke", "Okpela": "atg", "Oksapmin": "opm", "Oku": "oku", "Okwanuchu": "nai-okw", "Old Anatolian Turkish": "trk-oat", "Old Armenian": "xcl", "Old Avar": "oav", "Old Bengali": "inc-obn", "Old Breton": "obt", "Old Burmese": "obr", "Old Catalan": "roa-oca", "Old Chinese": "och", "Old Church Slavonic": "cu", "Old Cornish": "oco", "Old Czech": "zlw-ocs", "Old Danish": "gmq-oda", "Old Dutch": "odt", "Old East Slavic": "orv", "Old English": "ang", "Old French": "fro", "Old Frisian": "ofs", "Old Galician-Portuguese": "roa-opt", "Old Georgian": "oge", "Old Gujarati": "inc-ogu", "Old High German": "goh", "Old Hindi": "inc-ohi", "Old Hungarian": "ohu", "Old Irish": "sga", "Old Japanese": "ojp", "Old Javanese": "kaw", "Old Kamta": "inc-ork", "Old Kannada": "dra-okn", "Old Kentish Sign Language": "okl", "Old Khmer": "okz", "Old Komi": "urj-koo", "Old Korean": "oko", "Old Leonese": "roa-ole", "Old Lithuanian": "olt", "Old Manipuri": "omp", "Old Marathi": "omr", "Old Median": "xme-old", "Old Mon": "omx", "Old Norse": "non", "Old Novgorodian": "zle-ono", "Old Nubian": "onw", "Old Occitan": "pro", "Old Oriya": "inc-oor", "Old Ossetic": "oos", "Old Persian": "peo", "Old Polish": "zlw-opl", "Old Prussian": "prg", "Old Punjabi": "inc-opa", "Old Ruthenian": "zle-ort", "Old Saxon": "osx", "Old South Arabian": "sem-srb", "Old Spanish": "osp", "Old Sundanese": "osn", "Old Swedish": "gmq-osw", "Old Tamil": "oty", "Old Tati": "xme-ott", "Old Telugu": "dra-ote", "Old Tibetan": "otb", "Old Tupi": "tpw", "Old Turkic": "otk", "Old Uyghur": "oui", "Old Welsh": "owl", "Olekha": "ole", "Ollari": "gdb", "Olo": "ong", "Oloma": "olm", "Olrat": "olr", "Olu'bo": "lul", "Olukumi": "ulb", "Olulumo-Ikom": "iko", "Oluta Popoluca": "plo", "Olutsotso": "lto", "Omagua": "omg", "Omaha-Ponca": "oma", "Omani Arabic": "acx", "Omba": "omb", "Ombamba": "mbm", "Ombo": "oml", "Ometepec Nahuatl": "nht", "Omi": "omi", "Omok": "omk", "Omotik": "omt", "Omurano": "omu", "Oneida": "one", "Ong": "oog", "Ongota": "bxe", "Onin": "oni", "Onjob": "onj", "Ono": "ons", "Onobasulu": "onn", "Onondaga": "ono", "Ontenu": "ont", "Ontong Java": "ojv", "Oorlams": "oor", "Opao": "opo", "Opata": "opt", "Opuuo": "lgn", "Opón": "sai-opo", "Oraon Sadri": "sdr", "Orejón": "ore", "Oring": "org", "Oriya": "or", "Orizaba Nahuatl": "nlv", "Orléanais": "roa-orl", "Ormu": "orz", "Ormuri": "oru", "Oro": "orx", "Oro Win": "orw", "Oroch": "oac", "Oroha": "ora", "Orok": "oaa", "Orokaiva": "okv", "Oroko": "bdu", "Orokolo": "oro", "Oromo": "om", "Oroqen": "orh", "Orowe": "bpk", "Oruma": "orr", "Orya": "ury", "Osage": "osa", "Osamayi": "syx", "Osatu": "ost", "Oscan": "osc", "Osing": "osi", "Ososo": "oso", "Ossetian": "os", "Ot Danum": "otd", "Otank": "uta", "Oti": "oti", "Otomaco": "sai-oto", "Otoro": "otr", "Ottawa": "otw", "Ottoman Turkish": "ota", "Otuke": "otu", "Ouma": "oum", "Oune": "oue", "Owa": "stn", "Owenia": "wsr", "Owiniga": "owi", "Oy": "oyb", "Oya'oya": "oyy", "Oyda": "oyd", "Ozolotepec Zapotec": "zao", "Ozumacín Chinantec": "chz", "Pa": "ppt", "Pa Di": "pdi", "Pa'a": "pqa", "Pa'o Karen": "blk", "Pa-Hng": "pha", "Paama": "pma", "Paasaal": "sig", "Pacahuara": "pcp", "Pacoh": "pac", "Padoe": "pdo", "Paelignian": "pgn", "Paeonian": "ine-pae", "Pagi": "pgi", "Pagibete": "pae", "Pagu": "pgu", "Pahanan Agta": "apf", "Pahari-Potwari": "phr", "Pahi": "lgt", "Pahlavani": "phv", "Pai Tavytera": "pta", "Pai-lang": "tbq-plg", "Paicî": "pri", "Paikoneka": "awd-pai", "Paipai": "ppi", "Paisaci Prakrit": "inc-psc", "Paite": "pck", "Paiwan": "pwn", "Pajapan Nahuatl": "nhp", "Pak-Tong": "pkg", "Pakanha": "pkn", "Pakistan Sign Language": "pks", "Paku": "pku", "Paku Karen": "kpp", "Pal": "abw", "Palaic": "plq", "Palaka Senoufo": "plr", "Palantla Chinantec": "cpa", "Palauan": "pau", "Palawan Batak": "bya", "Paleni": "pnl", "Palenquero": "pln", "Palewyami": "nai-ply", "Pali": "pi", "Palikur": "plu", "Paliyan": "pcf", "Pallanganmiddang": "pmd", "Palor": "fap", "Palta": "sai-pal", "Palu'e": "ple", "Paluan": "plz", "Palya Bareli": "bpx", "Pam": "pmn", "Pambia": "pmb", "Pamigua": "sai-pam", "Pamlico": "pmk", "Pamona": "pmf", "Pamosu": "hih", "Pamplona Atta": "att", "Pana (Central Africa)": "pnz", "Pana (West Africa)": "pnq", "Panamanian Sign Language": "lsp", "Panamint": "par", "Panare": "pbh", "Panará": "kre", "Panasuan": "psn", "Panawa": "pwb", "Pancana": "pnp", "Panchpargania": "tdb", "Pande": "bkj", "Pangasinan": "pag", "Pangseng": "pgs", "Pangutaran Sama": "slm", "Pangwa": "pbr", "Pangwali": "pgg", "Panim": "pnr", "Paniya": "pcg", "Pankararé": "pax", "Pankararú": "paz", "Pankhu": "pkh", "Pannei": "pnc", "Panobo": "pno", "Panyjima": "pnw", "Panzaleo": "sai-pnz", "Pao": "ppa", "Papantla Totonac": "top", "Papapana": "ppn", "Papar": "dpp", "Papasena": "pas", "Papel": "pbo", "Papi": "ppe", "Papiamentu": "pap", "Papitalai": "pat", "Papora": "ppu", "Papua New Guinean Sign Language": "pgz", "Papuan Malay": "pmy", "Papuma": "ppm", "Para Naga": "pzn", "Parachi": "prc", "Paraguayan Guaraní": "gug", "Paraguayan Sign Language": "pys", "Parakanã": "pak", "Paranan": "prf", "Paranawát": "paf", "Paratió": "sai-par", "Paraujano": "pbg", "Parauk": "prk", "Parawen": "prw", "Pardhan": "pch", "Pardhi": "pcl", "Pare": "asa", "Pareci": "pab", "Paredarerme": "xpd", "Parenga": "pcj", "Parkari Koli": "kvx", "Parthian": "xpr", "Parya": "paq", "Pará Arára": "aap", "Pará Gavião": "gvp", "Pashto": "ps", "Pasi": "psq", "Pass Valley Yali": "yac", "Passé": "awd-pas", "Patagón": "sai-ptg", "Patamona": "pbc", "Patani": "ptn", "Pataxó Hã-Ha-Hãe": "pth", "Patep": "ptp", "Pathiya": "pty", "Patpatar": "gfk", "Pattani": "lae", "Pattani Malay": "mfa", "Pattapu": "ptq", "Patwin": "pwi", "Paulohi": "plh", "Paumarí": "pad", "Paunaca": "pnk", "Pauri Bareli": "bfb", "Pauserna": "psm", "Pawaia": "pwa", "Pawnee": "paw", "Payaguá": "sai-pyg", "Paynamar": "pmr", "Pazeh": "pzh", "Pe": "pai", "Pear": "pcb", "Pech": "pay", "Pecheneg": "xpc", "Peerapper": "xpw", "Peere": "pfe", "Pei": "ppq", "Pekal": "pel", "Pela": "bxd", "Pele-Ata": "ata", "Pemon": "aoc", "Penang Sign Language": "psg", "Penchal": "pek", "Pendau": "ums", "Pengo": "peg", "Pennsylvania German": "pdc", "Penobscot": "aaq", "Penrhyn": "pnh", "Pentlatch": "ptw", "Perai": "wet", "Peranakan Indonesian": "pea", "Perema": "wom", "Pericú": "nai-per", "Pero": "pip", "Persian": "fa", "Persian Sign Language": "psc", "Peruvian Sign Language": "prl", "Petapa Zapotec": "zpe", "Petats": "pex", "Petjo": "pey", "Peñoles Mixtec": "mil", "Phai": "prt", "Phake": "phk", "Phala": "ypa", "Phalura": "phl", "Phana'": "phq", "Phangduwali": "phw", "Phende": "pem", "Philippine Sign Language": "psp", "Philistine": "und-phi", "Phimbi": "phm", "Phoenician": "phn", "Phola": "ypg", "Pholo": "yip", "Phom": "nph", "Phong-Kniang": "pnx", "Phrae Pwo": "kjt", "Phrygian": "xpg", "Phu Thai": "pht", "Phuan": "phu", "Phudagi": "phd", "Phuie": "pug", "Phukha": "phh", "Phuma": "ypm", "Phunoi": "pho", "Phuong": "phg", "Phupa": "ypp", "Phupha": "yph", "Phuthi": "bnt-phu", "Phuza": "ypz", "Piamatsina": "ptr", "Piame": "pin", "Piapoco": "pio", "Piaroa": "pid", "Picard": "pcd", "Pichinglis": "fpe", "Pichis Ashéninka": "cpu", "Pictish": "xpi", "Picuris": "nai-pic", "Pidgin Delaware": "dep", "Pidgin Iha": "ihb", "Pidgin Onin": "onx", "Piedmontese": "pms", "Pijao": "pij", "Pije": "piz", "Pijin": "pis", "Pilagá": "plg", "Pileni": "piv", "Pima Bajo": "pia", "Pimbwe": "piw", "Pinai-Hagahai": "pnn", "Pingelapese": "pif", "Pini": "pii", "Pinigura": "pnv", "Pinjarup": "pnj", "Pinji": "pic", "Pinotepa Nacional Mixtec": "mio", "Pintiini": "pti", "Pintupi-Luritja": "piu", "Pinyin": "pny", "Pipil": "ppl", "Pirahã": "myp", "Piratapuyo": "pir", "Pirlatapa": "bxi", "Piro": "pie", "Pirriya": "xpa", "Pisabo": "pig", "Pisaflores Tepehua": "tpp", "Piscataway": "psy", "Pisidian": "xps", "Pitcairn-Norfolk": "pih", "Pite Sami": "sje", "Piti": "pcn", "Pitjantjatjara": "pjt", "Pitta-Pitta": "pit", "Piu": "pix", "Piya-Kwonci": "piy", "Plains Apache": "apk", "Plains Cree": "crk", "Plains Indian Sign Language": "psd", "Plains Miwok": "pmw", "Plapo Krumen": "ktj", "Plautdietsch": "pdt", "Playero": "gob", "Pnar": "pbv", "Pochuri Naga": "npo", "Pochutec": "xpo", "Podoko": "pbi", "Pogolo": "poy", "Pohnpeian": "pon", "Poitevin-Saintongeais": "roa-poi", "Pokangá": "pok", "Poke": "pof", "Pol": "pmm", "Polabian": "pox", "Polci": "plj", "Polish": "pl", "Polish Sign Language": "pso", "Polonombauk": "plb", "Pom": "pmo", "Ponam": "ncc", "Pongu": "png", "Ponosakan": "pns", "Pontic Greek": "pnt", "Ponyo": "npg", "Poqomam": "poc", "Poqomchi'": "poh", "Porohanon": "prh", "Port Sandwich": "psw", "Port Sorell": "xpl", "Port Vato": "ptv", "Portuguese": "pt", "Portuguese Sign Language": "psr", "Potawatomi": "pot", "Potiguára": "pog", "Poumei Naga": "pmx", "Pouye": "bye", "Powari": "pwr", "Powhatan": "pim", "Poyanáwa": "pyn", "Prakrit": "inc-pra", "Prasuni": "prn", "Primitive Irish": "pgl", "Principense": "pre", "Proto-Abkhaz-Abaza": "cau-abz-pro", "Proto-Afroasiatic": "afa-pro", "Proto-Albanian": "sqj-pro", "Proto-Algic": "aql-pro", "Proto-Algonquian": "alg-pro", "Proto-Amuesha-Chamicuro": "awd-amc-pro", "Proto-Anatolian": "ine-ana-pro", "Proto-Apachean": "apa-pro", "Proto-Arawa": "auf-pro", "Proto-Arawak": "awd-pro", "Proto-Armenian": "hyx-pro", "Proto-Arnhem": "aus-arn-pro", "Proto-Aroid": "omv-aro-pro", "Proto-Aslian": "mkh-asl-pro", "Proto-Atayalic": "map-ata-pro", "Proto-Athabaskan": "ath-pro", "Proto-Atlantic-Congo": "alv-pro", "Proto-Austroasiatic": "aav-pro", "Proto-Austronesian": "map-pro", "Proto-Avaro-Andian": "cau-ava-pro", "Proto-Bahnaric": "mkh-ban-pro", "Proto-Balto-Slavic": "ine-bsl-pro", "Proto-Bantoid": "nic-bod-pro", "Proto-Bantu": "bnt-pro", "Proto-Basque": "euq-pro", "Proto-Batak": "btk-pro", "Proto-Be": "qfa-onb-pro", "Proto-Be-Tai": "qfa-bet-pro", "Proto-Benue-Congo": "nic-bco-pro", "Proto-Berber": "ber-pro", "Proto-Bodo-Garo": "tbq-bdg-pro", "Proto-Bongo-Bagirmi": "csu-bba-pro", "Proto-Boran": "sai-bor-pro", "Proto-Brythonic": "cel-bry-pro", "Proto-Bua": "alv-bua-pro", "Proto-Bungku-Tolaki": "poz-btk-pro", "Proto-Caddoan": "cdd-pro", "Proto-Cangin": "alv-cng-pro", "Proto-Cariban": "sai-car-pro", "Proto-Celtic": "cel-pro", "Proto-Central Chadic": "cdc-cbm-pro", "Proto-Central Indo-Aryan": "inc-cen-pro", "Proto-Central Jê": "sai-cje-pro", "Proto-Central New South Wales": "aus-cww-pro", "Proto-Central Sudanic": "csu-pro", "Proto-Central Togo": "alv-gtm-pro", "Proto-Central-Eastern Malayo-Polynesian": "poz-cet-pro", "Proto-Cerrado": "sai-cer-pro", "Proto-Chadic": "cdc-pro", "Proto-Chamic": "cmc-pro", "Proto-Chatino": "omq-cha-pro", "Proto-Chibchan": "cba-pro", "Proto-Chimakuan": "chi-pro", "Proto-Chinookan": "nai-ckn-pro", "Proto-Chukotko-Kamchatkan": "qfa-cka-pro", "Proto-Chumash": "nai-chu-pro", "Proto-Circassian": "cau-cir-pro", "Proto-Cupan": "azc-cup-pro", "Proto-Cushitic": "cus-pro", "Proto-Daju": "sdv-daj-pro", "Proto-Daly": "aus-dal-pro", "Proto-Dargwa": "cau-drg-pro", "Proto-Dizoid": "omv-diz-pro", "Proto-Dravidian": "dra-pro", "Proto-Eastern Jebel": "sdv-eje-pro", "Proto-Eastern Malayo-Polynesian": "pqe-pro", "Proto-Eastern Oti-Volta": "nic-eov-pro", "Proto-Eastern Polynesian": "poz-pep-pro", "Proto-Edekiri": "alv-edk-pro", "Proto-Edoid": "alv-edo-pro", "Proto-Eskimo": "esx-esk-pro", "Proto-Eskimo-Aleut": "esx-pro", "Proto-Fali": "alv-fli-pro", "Proto-Finnic": "urj-fin-pro", "Proto-Gbe": "alv-gbe-pro", "Proto-Georgian-Zan": "ccs-gzn-pro", "Proto-Germanic": "gem-pro", "Proto-Grassfields": "nic-grf-pro", "Proto-Great Andamanese": "qfa-adm-pro", "Proto-Guang": "alv-gng-pro", "Proto-Gur": "nic-gur-pro", "Proto-Gurunsi": "nic-gns-pro", "Proto-Halmahera-Cenderawasih": "poz-hce-pro", "Proto-Heiban": "alv-hei-pro", "Proto-Hellenic": "grk-pro", "Proto-Highland East Cushitic": "cus-hec-pro", "Proto-Hlai": "qfa-lic-pro", "Proto-Hmong": "hmn-pro", "Proto-Hmong-Mien": "hmx-pro", "Proto-Hrusish": "sit-hrs-pro", "Proto-Huitoto-Ocaina": "sai-hoc-pro", "Proto-Hurro-Urartian": "qfa-hur-pro", "Proto-Idomoid": "alv-ido-pro", "Proto-Igboid": "alv-igb-pro", "Proto-Ijoid": "ijo-pro", "Proto-Indo-Aryan": "inc-pro", "Proto-Indo-European": "ine-pro", "Proto-Indo-Iranian": "iir-pro", "Proto-Inuit": "esx-inu-pro", "Proto-Iranian": "ira-pro", "Proto-Iroquoian": "iro-pro", "Proto-Italic": "itc-pro", "Proto-Iwaidjan": "aus-wdj-pro", "Proto-Japonic": "jpx-pro", "Proto-Jukunoid": "nic-jkn-pro", "Proto-Jê": "sai-jee-pro", "Proto-Kadu": "qfa-kad-pro", "Proto-Kalamian": "phi-kal-pro", "Proto-Kalapuyan": "nai-klp-pro", "Proto-Kam-Sui": "qfa-kms-pro", "Proto-Kampa": "awd-kmp-pro", "Proto-Karen": "kar-pro", "Proto-Kartvelian": "ccs-pro", "Proto-Katuic": "mkh-kat-pro", "Proto-Kham": "sit-kha-pro", "Proto-Khasian": "aav-khs-pro", "Proto-Khmeric": "mkh-kmr-pro", "Proto-Khmuic": "mkh-khm-pro", "Proto-Khoe": "khi-kho-pro", "Proto-Koman": "ssa-kom-pro", "Proto-Komisenian": "ira-kms-pro", "Proto-Koreanic": "qfa-kor-pro", "Proto-Kra": "qfa-kra-pro", "Proto-Kra-Dai": "qfa-tak-pro", "Proto-Kru": "kro-pro", "Proto-Kuki-Chin": "tbq-kuk-pro", "Proto-Kuliak": "ssa-klk-pro", "Proto-Kurdish": "ku-pro", "Proto-Kwa": "alv-kwa-pro", "Proto-Lalo": "tbq-lal-pro", "Proto-Lampungic": "poz-lgx-pro", "Proto-Lezghian": "cau-lzg-pro", "Proto-Lolo-Burmese": "tbq-lob-pro", "Proto-Loloish": "tbq-lol-pro", "Proto-Lower Cross River": "nic-lcr-pro", "Proto-Luish": "sit-luu-pro", "Proto-Maidun": "nai-mdu-pro", "Proto-Malayic": "poz-mly-pro", "Proto-Malayo-Chamic": "poz-mcm-pro", "Proto-Malayo-Polynesian": "poz-pro", "Proto-Malayo-Sumbawan": "poz-msa-pro", "Proto-Mande": "dmn-pro", "Proto-Mangbetu": "csu-maa-pro", "Proto-Mari": "chm-pro", "Proto-Masa": "cdc-mas-pro", "Proto-Mayan": "myn-pro", "Proto-Mazatec": "omq-maz-pro", "Proto-Medo-Parthian": "ira-mpr-pro", "Proto-Mien": "hmx-mie-pro", "Proto-Min": "zhx-min-pro", "Proto-Mixe-Zoque": "nai-miz-pro", "Proto-Mixtec": "omq-mxt-pro", "Proto-Mixtecan": "omq-mix-pro", "Proto-Mon-Khmer": "mkh-pro", "Proto-Mongolic": "xgn-pro", "Proto-Monic": "mkh-mnc-pro", "Proto-Mordvinic": "urj-mdv-pro", "Proto-Mumuye": "alv-mum-pro", "Proto-Munda": "mun-pro", "Proto-Munji-Yidgha": "ira-mny-pro", "Proto-Muskogean": "nai-mus-pro", "Proto-Na-Dene": "xnd-pro", "Proto-Nahuan": "azc-nah-pro", "Proto-Nakh": "cau-nkh-pro", "Proto-Nawiki": "awd-nwk-pro", "Proto-Nguni": "bnt-ngu-pro", "Proto-Nicobarese": "aav-nic-pro", "Proto-Niger-Congo": "nic-pro", "Proto-Nilo-Saharan": "ssa-pro", "Proto-Nilotic": "sdv-nil-pro", "Proto-Norse": "gmq-pro", "Proto-North Caucasian": "ccn-pro", "Proto-North Halmahera": "paa-nha-pro", "Proto-North Iroquoian": "iro-nor-pro", "Proto-North Sarawak": "poz-swa-pro", "Proto-Northeast Caucasian": "cau-nec-pro", "Proto-Northern Jê": "sai-nje-pro", "Proto-Northwest Caucasian": "cau-nwc-pro", "Proto-Nubian": "nub-pro", "Proto-Nuclear Polynesian": "poz-pnp-pro", "Proto-Numic": "azc-num-pro", "Proto-Nupoid": "alv-nup-pro", "Proto-Nuristani": "iir-nur-pro", "Proto-Nyima": "sdv-nyi-pro", "Proto-Nyulnyulan": "aus-nyu-pro", "Proto-Oceanic": "poz-oce-pro", "Proto-Ogoni": "nic-ogo-pro", "Proto-Omotic": "omv-pro", "Proto-Ongan": "qfa-ong-pro", "Proto-Ossetic": "os-pro", "Proto-Oti-Volta": "nic-ovo-pro", "Proto-Oto-Manguean": "omq-pro", "Proto-Oto-Pamean": "omq-otp-pro", "Proto-Otomi": "oto-otm-pro", "Proto-Otomian": "oto-pro", "Proto-Pakanic": "mkh-pkn-pro", "Proto-Palaungic": "mkh-pal-pro", "Proto-Pama-Nyungan": "aus-pam-pro", "Proto-Paresi-Waura": "awd-prw-pro", "Proto-Pathan": "ira-pat-pro", "Proto-Pearic": "mkh-pea-pro", "Proto-Permic": "urj-prm-pro", "Proto-Philippine": "phi-pro", "Proto-Plateau": "nic-plt-pro", "Proto-Plateau Penutian": "nai-plp-pro", "Proto-Pnar-Khasi-Lyngngam": "aav-pkl-pro", "Proto-Polynesian": "poz-pol-pro", "Proto-Pomeranian": "zlw-pom-pro", "Proto-Pomo": "nai-pom-pro", "Proto-Rukai": "dru-pro", "Proto-Ryukyuan": "jpx-ryu-pro", "Proto-Saka": "xsc-sak-pro", "Proto-Saka-Wakhi": "xsc-skw-pro", "Proto-Salish": "sal-pro", "Proto-Samic": "smi-pro", "Proto-Samoyedic": "syd-pro", "Proto-Sanglechi-Ishkashimi": "ira-sgi-pro", "Proto-Sara": "csu-sar-pro", "Proto-Scythian": "xsc-pro", "Proto-Selkup": "sel-pro", "Proto-Semitic": "sem-pro", "Proto-Shughni-Roshani": "ira-shr-pro", "Proto-Shughni-Yazghulami": "ira-shy-pro", "Proto-Shughni-Yazghulami-Munji": "ira-sym-pro", "Proto-Sino-Tibetan": "sit-pro", "Proto-Siouan": "sio-pro", "Proto-Siouan-Catawban": "nai-sca-pro", "Proto-Slavic": "sla-pro", "Proto-Sogdic": "ira-sgc-pro", "Proto-Somaloid": "cus-som-pro", "Proto-Songhay": "son-pro", "Proto-Sotho-Tswana": "bnt-sts-pro", "Proto-South Cushitic": "cus-sou-pro", "Proto-South Sulawesi": "poz-ssw-pro", "Proto-Southern Jê": "sai-sje-pro", "Proto-Southwestern Tai": "tai-swe-pro", "Proto-Sunda-Sulawesi": "poz-sus-pro", "Proto-Ta-Arawak": "awd-taa-pro", "Proto-Tai": "tai-pro", "Proto-Takic": "azc-tak-pro", "Proto-Taman": "sdv-tmn-pro", "Proto-Tani": "sit-tan-pro", "Proto-Taranoan": "sai-tar-pro", "Proto-Tatic": "xme-ttc-pro", "Proto-Tocharian": "ine-toc-pro", "Proto-Totozoquean": "nai-tot-pro", "Proto-Trans-New Guinea": "ngf-pro", "Proto-Trique": "omq-tri-pro", "Proto-Tsezian": "cau-tsz-pro", "Proto-Tsimshianic": "nai-tsi-pro", "Proto-Tungusic": "tuw-pro", "Proto-Tupi-Guarani": "tup-gua-pro", "Proto-Tupian": "tup-pro", "Proto-Turkic": "trk-pro", "Proto-Ubangian": "nic-ubg-pro", "Proto-Ugric": "urj-ugr-pro", "Proto-Upper Cross River": "nic-ucr-pro", "Proto-Uralic": "urj-pro", "Proto-Utian": "nai-utn-pro", "Proto-Uto-Aztecan": "azc-pro", "Proto-Vietic": "mkh-vie-pro", "Proto-Volta-Congo": "nic-vco-pro", "Proto-Volta-Niger": "alv-von-pro", "Proto-West Germanic": "gmw-pro", "Proto-West Semitic": "sem-wes-pro", "Proto-Western Mande": "dmn-mdw-pro", "Proto-Witotoan": "sai-wit-pro", "Proto-Yeniseian": "qfa-yen-pro", "Proto-Yoruba": "alv-yor-pro", "Proto-Yoruboid": "alv-yrd-pro", "Proto-Yukaghir": "qfa-yuk-pro", "Proto-Yupik": "ypk-pro", "Proto-Zapotec": "omq-zpc-pro", "Proto-Zapotecan": "omq-zap-pro", "Proto-Zaza-Gorani": "ira-zgr-pro", "Providencia Sign Language": "prz", "Psikye": "kvj", "Puare": "pux", "Pudtol Atta": "atp", "Puebla Mazatec": "pbm", "Puelche": "pue", "Puerto Rican Sign Language": "psl", "Puimei Naga": "npu", "Puinave": "pui", "Puiron": "sit-prn", "Pukapukan": "pkp", "Pulabu": "pup", "Puluwat": "puw", "Puma": "pum", "Pumpokol": "xpm", "Pumé": "yae", "Punan Aput": "pud", "Punan Bah-Biau": "pna", "Punan Batu": "pnm", "Punan Merah": "puf", "Punan Merap": "puc", "Punan Tubu": "puj", "Punic": "xpu", "Punjabi": "pa", "Punu": "puu", "Puoc": "puo", "Puquina": "puq", "Puragi": "pru", "Purari": "iar", "Purepecha": "pua", "Puri": "prr", "Purik": "prx", "Purisimeño": "puy", "Puruborá": "pur", "Puruhá": "sai-prh", "Purukotó": "sai-pur", "Purum": "pub", "Putai": "mfl", "Putoh": "put", "Putukwam": "afe", "Puxian": "cpx", "Puyo-Paekche": "xpp", "Puyuma": "pyu", "Pwaamei": "pme", "Pwapwa": "pop", "Pyapun": "pcw", "Pye Krumen": "pye", "Pyemmairre": "xpb", "Pyen": "pyy", "Pykobjê": "sai-pyk", "Pyu": "pby", "Páez": "pbb", "Pááfang": "pfa", "Päri": "lkr", "Pémono": "pev", "Pévé": "lme", "Pökoot": "pko", "Q'anjob'al": "kjb", "Q'eqchi": "kek", "Qabiao": "laq", "Qaqet": "byx", "Qatabanian": "xqt", "Qau": "gqu", "Qila Muji": "ymq", "Qimant": "ahg", "Quapaw": "qua", "Quebec Sign Language": "fcs", "Quechua": "qu", "Quenya": "qya", "Querétaro Otomi": "otq", "Quetzaltepec Mixe": "pxm", "Queyu": "qvy", "Quiavicuzas Zapotec": "zpj", "Quileute": "qui", "Quimbaya": "sai-qmb", "Quinault": "qun", "Quinigua": "nai-qng", "Quinqui": "quq", "Quioquitani-Quierí Zapotec": "ztq", "Quiotepec Chinantec": "chq", "Quiripi": "qyp", "Quitemo": "sai-qtm", "Rabha": "rah", "Rabona": "sai-rab", "Rade": "rad", "Raetic": "xrr", "Raga": "lml", "Rahambuu": "raz", "Rajah Kabunsuwan Manobo": "mqk", "Rajasthani": "raj", "Rajbanshi": "rjs", "Raji": "rji", "Rajong": "rjg", "Rajput Garasia": "gra", "Rakahanga-Manihiki": "rkh", "Rakhine": "rki", "Ralte": "ral", "Rama": "rma", "Ramandi": "tks", "Ramanos": "sai-ram", "Ramoaaina": "rai", "Ramopa": "kjx", "Rampi": "lje", "Rana Tharu": "thr", "Rang": "rax", "Rangkas": "rgk", "Ranglong": "rnl", "Rao": "rao", "Rapa": "ray", "Rapa Nui": "rap", "Rapoisi": "kyx", "Rapting": "rpt", "Rara Bakati'": "lra", "Rarotongan": "rar", "Rasawa": "rac", "Ratagnon": "btn", "Ratahan": "rth", "Rathawi": "rtw", "Rathwi Bareli": "bgd", "Raute": "rau", "Ravula": "yea", "Rawa": "rwo", "Rawang": "raw", "Rawat": "jnl", "Rawo": "rwa", "Rayón Zoque": "zor", "Razajerdi": "rat", "Razihi": "rzh", "Reang": "ria", "Red Gelao": "gir", "Reel": "atu", "Rejang": "rej", "Rejang Kayan": "ree", "Reli": "rei", "Rema": "bow", "Rembarunga": "rmb", "Rembong": "reb", "Remo": "rem", "Remontado Agta": "agv", "Rempi": "rmp", "Remun": "lkj", "Rendille": "rel", "Rengao": "ren", "Rennellese": "mnv", "Repanbitip": "rpn", "Rer Bare": "rer", "Rerau": "rea", "Rerep": "pgk", "Reshe": "res", "Resígaro": "rgr", "Retta": "ret", "Reyesano": "rey", "Rhine Franconian": "gmw-rfr", "Riang": "ril", "Riantana": "ran", "Ribun": "rir", "Rigwe": "iri", "Rikbaktsa": "rkb", "Rincón Zapotec": "zar", "Ringgou": "rgu", "Ririo": "rri", "Ritarungo": "rit", "Riung": "riu", "Riverain Sango": "snj", "Rogo": "rod", "Rohingya": "rhg", "Roma": "rmm", "Romagnol": "rgn", "Romam": "rmx", "Romani": "rom", "Romani Greek": "rge", "Romanian": "ro", "Romanian Sign Language": "rms", "Romano-Serbian": "rsb", "Romanova": "rmv", "Romansch": "rm", "Romblomanon": "rol", "Rombo": "rof", "Romkun": "rmk", "Ron": "cla", "Ronga": "rng", "Rongga": "ror", "Rongmei Naga": "nbu", "Rongpo": "rnp", "Ronji": "roe", "Roon": "rnn", "Roria": "rga", "Roro": "rro", "Rotokas": "roo", "Rotuman": "rtm", "Rouran": "xgn-rou", "Roviana": "rug", "Ruching Palaung": "pce", "Rudbari": "rdb", "Rufiji": "rui", "Ruga": "ruh", "Rukai": "dru", "Rukiga": "cgg", "Ruma": "ruz", "Rumai Palaung": "rbb", "Rumu": "klq", "Runga": "rou", "Rungtu": "rtc", "Rungus": "drg", "Rungwa": "rnw", "Russenorsk": "crp-rsn", "Russian": "ru", "Russian Sign Language": "rsl", "Rusyn": "rue", "Rutul": "rut", "Ruuli": "ruc", "Ruwund": "rnd", "Rwa": "rwk", "Rwanda-Rundi": "rw", "Réunion Creole French": "rcf", "S'gaw Karen": "ksw", "Sa": "sax", "Sa'a": "apb", "Sa'ban": "snv", "Sa'och": "scq", "Saafi-Saafi": "sav", "Saam": "raq", "Saamia": "lsm", "Saanich": "str", "Saare": "uss", "Saaroa": "sxr", "Saba": "saa", "Sabaean": "xsa", "Sabah Bisaya": "bsy", "Sabah Malay": "msi", "Sabanê": "sae", "Sabaot": "spy", "Sabine": "sbv", "Sabir": "pml", "Sabu": "hvn", "Sabüm": "sbo", "Sacapulteco": "quv", "Sadri": "sck", "Saek": "skb", "Saep": "spd", "Safaitic": "sem-saf", "Safaliba": "saf", "Safeyoka": "apz", "Safwa": "sbk", "Sagala": "sbm", "Sagalla": "tga", "Sahaptin": "nai-spt", "Saho": "ssy", "Sahu": "saj", "Saisiyat": "xsy", "Sajau Basap": "sjb", "Sakachep": "sch", "Sakam": "skm", "Sakao": "sku", "Sakata": "skt", "Sake": "sak", "Sakirabiá": "skf", "Sakizaya": "szy", "Sala": "shq", "Salampasu": "slx", "Salar": "slr", "Salas": "sgu", "Salchuq": "slq", "Saleman": "sau", "Saliba (Colombia)": "slc", "Saliba (New Guinea)": "sbe", "Salinan": "sln", "Salt-Yui": "sll", "Saluan": "loe", "Salumá": "slj", "Salvadoran Lenca": "nai-sln", "Salvadoran Sign Language": "esn", "Sam": "snx", "Sama": "smd", "Samaritan Aramaic": "sam", "Samaritan Hebrew": "smp", "Samarokena": "tmj", "Samatao": "ysd", "Samba": "smx", "Sambali": "xsb", "Sambalpuri": "spv", "Sambe": "xab", "Samberigi": "ssx", "Samburu": "saq", "Samei": "smh", "Samo": "smq", "Samoan": "sm", "Samoan Plantation Pidgin": "cpe-spp", "Samogitian": "sgs", "Samosa": "swm", "Sampang": "rav", "Samre": "sxm", "Samtao": "stu", "Samvedi": "smv", "San Agustín Mixtepec Zapotec": "ztm", "San Baltazar Loxicha Zapotec": "zpx", "San Felipe Otlaltepec Popoloca": "pow", "San Jerónimo Tecóatl Mazatec": "maa", "San Juan Atzingo Popoloca": "poe", "San Juan Colorado Mixtec": "mjc", "San Juan Guelavía Zapotec": "zab", "San Juan Quiahije Chatino": "ctp-san", "San Juan Teita Mixtec": "xtj", "San Luís Temalacayuca Popoloca": "pps", "San Marcos Tlalcoyalco Popoloca": "pls", "San Martín Itunyoso Triqui": "trq", "San Miguel Creole French": "scf", "San Miguel Piedras Mixtec": "xtp", "San Miguel el Grande Mixtec": "mig", "San Pablo Güilá Zapotec": "ztu", "San Pedro Amuzgos Amuzgo": "azg", "San Pedro Quiatoni Zapotec": "zpf", "San Vicente Coatlán Zapotec": "zpt", "Sanapaná": "spn", "Sanaviron": "sai-san", "Sandawe": "sad", "Sanga (Congo)": "sng", "Sanga (Nigeria)": "xsn", "Sanggau": "scg", "Sangil": "snl", "Sangir": "sxn", "Sangisari": "sgr", "Sangkong": "sgk", "Sanglechi": "sgy", "Sango": "sg", "Sangtam Naga": "nsa", "Sangu (Gabon)": "snq", "Sangu (Tanzania)": "sbp", "Sani": "ysn", "Sanie": "ysy", "Saniyo-Hiyewe": "sny", "Sankaran Maninka": "msc", "Sansi": "ssi", "Sanskrit": "sa", "Santa Catarina Albarradas Zapotec": "ztn", "Santa Inés Ahuatempan Popoloca": "pca", "Santa Inés Yatzechi Zapotec": "zpn", "Santa Lucía Monteverde Mixtec": "mdv", "Santa María La Alta Nahuatl": "nhz", "Santa María Quiegolani Zapotec": "zpi", "Santa María Zacatepec Mixtec": "mza", "Santa Teresa Cora": "cok", "Santali": "sat", "Santiago Xanica Zapotec": "zpr", "Santo Domingo Albarradas Zapotec": "zas", "Sanumá": "xsu", "Sapa": "tys", "Saparua": "spr", "Sapará": "sai-sap", "Sapo": "krn", "Saponi": "spi", "Saposa": "sps", "Sapuan": "spu", "Sapé": "spc", "Sar": "mwm", "Sara": "sre", "Sara Kaba": "sbz", "Sara Kaba Deme": "kwg", "Sara Kaba Náà": "kwv", "Saraiki": "skr", "Saramaccan": "srm", "Sarangani Blaan": "bps", "Sarangani Manobo": "mbs", "Sarasira": "zsa", "Saraveca": "sar", "Sarcee": "srs", "Sardinian": "sc", "Sarikoli": "srh", "Sarli": "sdf", "Sartang": "onp", "Sarua": "swy", "Sarudu": "sdu", "Saruga": "sra", "Sasak": "sas", "Sasaru": "sxs", "Sassarese": "sdc", "Satawalese": "stw", "Saterland Frisian": "stq", "Sateré-Mawé": "mav", "Sathmar Swabian": "gmw-stm", "Saudi Arabian Sign Language": "sdl", "Sauraseni Apabhramsa": "inc-sap", "Sauraseni Prakrit": "psu", "Saurashtra": "saz", "Sauri": "srt", "Sause": "sao", "Sausi": "ssj", "Savi": "sdg", "Savosavo": "svs", "Sawai": "szw", "Saweru": "swr", "Sawi": "saw", "Sawila": "swt", "Sawriya Paharia": "mjt", "Saxwe Gbe": "sxw", "Saya": "say", "Sayula Popoluca": "pos", "Scanian": "gmq-scy", "Scots": "sco", "Scottish Gaelic": "gd", "Seba": "kdg", "Sebat Bet Gurage": "sgw", "Seberuang": "sbx", "Sebop": "sib", "Sebuyau": "snb", "Sechelt": "sec", "Sechura": "sai-sec", "Secoya": "sey", "Sedang": "sed", "Sedoa": "tvw", "Seenku": "sos", "Segai": "sge", "Segeju": "seg", "Seget": "sbg", "Sehwi": "sfw", "Seim": "sim", "Seimat": "ssg", "Seit-Kaitetu": "hik", "Sekani": "sek", "Sekapan": "skp", "Sekar": "skz", "Seke": "skj", "Sekele": "vaj", "Seki": "syi", "Seko Padang": "skx", "Seko Tengah": "sko", "Sekpele": "lip", "Selangor Sign Language": "kgi", "Selaru": "slu", "Selayar": "sly", "Selee": "snw", "Selepet": "spl", "Selk'nam": "ona", "Selonian": "sxl", "Selungai Murut": "slg", "Seluwasan": "sws", "Sema": "nsm", "Semai": "sea", "Semandang": "sdm", "Semaq Beri": "szc", "Sembakung Murut": "sbr", "Semelai": "sza", "Semimi": "etz", "Semnam": "ssm", "Semnani": "smy", "Sempan": "xse", "Sena": "seh", "Senara Sénoufo": "seq", "Senaya": "syn", "Sene": "sej", "Seneca": "see", "Sengele": "szg", "Senggi": "snu", "Sengo": "spk", "Sengseng": "ssz", "Senhaja De Srair": "sjs", "Sensi": "sni", "Sentani": "set", "Senthang Chin": "sez", "Sentinelese": "std", "Sepa (Indonesia)": "spb", "Sepa (New Guinea)": "spe", "Sepen": "spm", "Sepik Iwam": "iws", "Sepik Mari": "mbx", "Sera": "sry", "Serbo-Croatian": "sh", "Sere": "swf", "Serer": "srr", "Seri": "sei", "Serili": "sve", "Seroa": "kqu", "Serrano": "ser", "Seru": "szd", "Serua": "srw", "Serudung Murut": "srk", "Serui-Laut": "seu", "Seta": "stf", "Setaman": "stm", "Seti": "sbi", "Severn Ojibwa": "ojs", "Sewa Bay": "sew", "Seychellois Creole": "crs", "Seze": "sze", "Sha": "scw", "Shabak": "sdb", "Shabo": "sbf", "Shahmirzadi": "srz", "Shahrudi": "shm", "Shall-Zwall": "sha", "Shama-Sambuga": "sqa", "Shamang": "xsh", "Shambala": "ksb", "Shan": "shn", "Shanenawa": "swo", "Shanga": "sho", "Shangzhai": "jih", "Shaozhou Tuhua": "zhx-sht", "Sharanahua": "mcd", "Shark Bay": "ssv", "Sharwa": "swq", "Shasta": "sht", "Shatt": "shj", "Shau": "sqh", "Shawnee": "sjw", "She": "shx", "Shebayo": "awd-she", "Shehri": "shv", "Shekkacho": "moy", "Sheko": "she", "Shelta": "sth", "Shendu": "shl", "Sheni": "scv", "Sherbro": "bun", "Sherdukpen": "sdp", "Sherpa": "xsr", "Sheshi Kham": "kip", "Shi": "shr", "Shihhi Arabic": "ssh", "Shiki": "gua", "Shilluk": "shk", "Shina": "scl", "Shinasha": "bwo", "Shipibo-Conibo": "shp", "Shixing": "sxg", "Sholaga": "sle", "Shom Peng": "sii", "Shona": "sn", "Shoo-Minda-Nye": "bcv", "Shor": "cjs", "Shoshone": "shh", "Shua": "shg", "Shuar": "jiv", "Shuba": "cbq", "Shughni": "sgh", "Shumashti": "sts", "Shumcho": "scu", "Shuswap": "shs", "Shuwa-Zamani": "ksa", "Shwai": "shw", "Shwe Palaung": "pll", "Sialum": "slw", "Siamou": "sif", "Sian": "spg", "Siane": "snp", "Siang": "sya", "Siar-Lak": "sjr", "Sibe": "nco", "Siberian Tatar": "sty", "Sibu Melanau": "sdx", "Sicanian": "sxc", "Sicel": "scx", "Sichuan Yi": "ii", "Sicilian": "scn", "Siculo-Arabic": "sqr", "Sidamo": "sid", "Sidetic": "xsd", "Sie": "erg", "Sierra Leone Sign Language": "sgx", "Sierra Negra Nahuatl": "nsu", "Sierra de Juárez Zapotec": "zaa", "Sighu": "sxe", "Sihan": "snr", "Sika": "ski", "Sikaiana": "sky", "Sikaritai": "tty", "Sikiana": "sik", "Sikkimese": "sip", "Sikule": "skh", "Sila": "slt", "Silacayoapan Mixtec": "mks", "Sileibi": "sbq", "Silesian": "szl", "Silimo": "wul", "Siliput": "mkc", "Silopi": "xsp", "Silt'e": "stv", "Simaa": "sie", "Simalungun Batak": "bts", "Simba": "sbw", "Simbali": "smg", "Simbari": "smb", "Simbo": "sbb", "Simeku": "smz", "Simeulue": "smr", "Simte": "smt", "Sinacantán": "nai-sin", "Sinagen": "siu", "Sinasina": "sst", "Sinaugoro": "snc", "Sindarin": "sjn", "Sindhi": "sd", "Sindhi Bhil": "sbn", "Sindihui Mixtec": "xts", "Singa": "sgm", "Singapore Sign Language": "sls", "Singpho": "sgp", "Sinhalese": "si", "Sinicahua Mixtec": "xti", "Sininkere": "skq", "Sinte Romani": "rmo", "Sinyar": "sys", "Sinúfana": "sai-sin", "Sio": "xsi", "Siona": "snn", "Sipakapense": "qum", "Sira": "swj", "Siraya": "fos", "Sirenik": "ysr", "Siri": "sir", "Siriano": "sri", "Sirionó": "srq", "Sirmauri": "srx", "Siroi": "ssd", "Sissala": "sld", "Sissano": "sso", "Situ": "sit-sit", "Siuslaw": "sis", "Sivandi": "siy", "Siwai": "siw", "Siwi": "siz", "Siwu": "akp", "Siyin Chin": "csy", "Skagit": "ska", "Skalvian": "svx", "Ske": "ske", "Skepi Creole Dutch": "skw", "Skolt Sami": "sms", "Skou": "skv", "Slavey": "den", "Slavomolisano": "svm", "Slovak": "sk", "Slovakian Sign Language": "svk", "Slovene": "sl", "Slovincian": "zlw-slv", "Small Flowery Miao": "sfm", "Smärky Kanum": "kxq", "Snohomish": "sno", "So'a": "ssq", "Sobei": "sob", "Sochiapam Chinantec": "cso", "Soga": "xog", "Sogdian": "sog", "Sok": "skk", "Sokna": "swn", "Soko": "soc", "Sokoro": "sok", "Solano": "xso", "Soli": "sby", "Solon": "tuw-sol", "Solong": "aaw", "Solos": "sol", "Som": "smc", "Somali": "so", "Somba-Siawari": "bmu", "Somra": "ntx", "Somrai": "sor", "Somray": "smu", "Somyev": "kgt", "Sonaga": "ysg", "Sonde": "shc", "Songe": "sop", "Songlai Chin": "csj", "Songomeno": "soe", "Songoora": "sod", "Sonha": "soi", "Sonia": "siq", "Soninke": "snk", "Sonsorolese": "sov", "Soo": "teu", "Sop": "urw", "Soqotri": "sqt", "Sora": "srb", "Sori-Harengan": "sbh", "Sorkhei": "sqo", "Sorothaptic": "sxo", "Sorsogon Ayta": "ays", "Sos Kundi": "sdk", "Sota Kanum": "krz", "Sotho": "st", "Sou": "sqq", "South African Sign Language": "sfs", "South Awyu": "aws", "South Boma": "bnt-sbo", "South Central Banda": "lnl", "South Central Dinka": "dib", "South Efate": "erk", "South Fali": "fal", "South Giziga": "giz", "South Lembata": "lmf", "South Levantine Arabic": "ajp", "South Marquesan": "mqm", "South Muyu": "kts", "South Nuaulu": "nxl", "South Picene": "spx", "South Slavey": "xsl", "South Tairora": "omw", "South Ucayali Ashéninka": "cpy", "South Watut": "mcy", "Southeast Ambrym": "tvk", "Southeast Babar": "vbb", "Southeast Ijo": "ijs", "Southeast Pashayi": "psi", "Southeast Tasmanian": "xpf", "Southeastern Dinka": "dks", "Southeastern Ixtlán Zapotec": "zpd", "Southeastern Kolami": "nit", "Southeastern Nochixtlán Mixtec": "mxy", "Southeastern Pomo": "pom", "Southeastern Puebla Nahuatl": "npl", "Southeastern Tarahumara": "tcu", "Southeastern Tepehuan": "stp", "Southern Alta": "agy", "Southern Altai": "alt", "Southern Amami-Oshima": "ams", "Southern Bai": "bfs", "Southern Birifor": "biv", "Southern Bobo": "bwq", "Southern Bontoc": "obk", "Southern Carrier": "caf", "Southern Catanduanes Bicolano": "bln", "Southern Dagaare": "dga", "Southern East Cree": "crj", "Southern Ghale": "ghe", "Southern Grebo": "grj", "Southern Guiyang Hmong": "hmy", "Southern Haida": "hax", "Southern Hindko": "hnd", "Southern Kalapuya": "sxk", "Southern Kalinga": "ksc", "Southern Kam": "kmc", "Southern Kissi": "kss", "Southern Kiwai": "kjd", "Southern Kurdish": "sdh", "Southern Lolopo": "ysp", "Southern Lorung": "lrr", "Southern Luri": "luz", "Southern Ma'di": "snm", "Southern Mashan Hmong": "hma", "Southern Mnong": "mnn", "Southern Muji": "ymc", "Southern Ndebele": "nr", "Southern Ngbandi": "nbw", "Southern Nicobarese": "nik", "Southern Nisu": "nsd", "Southern Nuni": "nnw", "Southern Ohlone": "css", "Southern One": "osu", "Southern Pame": "pmz", "Southern Pomo": "peq", "Southern Puebla Mixtec": "mit", "Southern Puget Sound Salish": "slh", "Southern Pumi": "pmj", "Southern Qiandong Miao": "hms", "Southern Qiang": "qxs", "Southern Rengma Naga": "nre", "Southern Rincon Zapotec": "zsr", "Southern Roglai": "rgs", "Southern Sama": "ssb", "Southern Sami": "sma", "Southern Samo": "sbd", "Southern Selkup": "sel-sou", "Southern Sierra Miwok": "skd", "Southern Thai": "sou", "Southern Tidong": "itd", "Southern Tiwa": "tix", "Southern Toussian": "wib", "Southern Tujia": "tjs", "Southern Tutchone": "tce", "Southern Valley Yokuts": "nai-svy", "Southern Yukaghir": "yux", "Southwest Gbaya": "gso", "Southwest Palawano": "plv", "Southwest Pashayi": "psh", "Southwest Tanna": "nwi", "Southwestern Bontoc": "vbk", "Southwestern Dinka": "dik", "Southwestern Fars": "fay", "Southwestern Guiyang Hmong": "hmg", "Southwestern Huishui Hmong": "hmh", "Southwestern Nisu": "nsv", "Southwestern Tamang": "tsf", "Southwestern Tarahumara": "twr", "Southwestern Tepehuan": "tla", "Southwestern Tlaxiaco Mixtec": "meh", "Sowa": "sww", "Sowanda": "sow", "Soyaltepec Mazatec": "vmp", "Soyaltepec Mixtec": "vmq", "Spanish": "es", "Spanish Sign Language": "ssp", "Spiti Bhoti": "spt", "Spokane": "spo", "Squamish": "squ", "Sranan Tongo": "srn", "Sri Lankan Creole Malay": "sci", "Sri Lankan Sign Language": "sqs", "Stod Bhoti": "sbu", "Stoney": "sto", "Suabo": "szp", "Suarmin": "seo", "Suau": "swp", "Suba": "sxb", "Suba-Simbiti": "ssc", "Subi": "xsj", "Subiya": "sbs", "Subtiaba": "sut", "Sudanese Arabic": "apd", "Sudest": "tgo", "Sudovian": "xsv", "Suena": "sue", "Suga": "sgi", "Suganga": "sug", "Sugut Dusun": "kzs", "Sui": "swi", "Suki": "sui", "Suku": "sub", "Sukuma": "suk", "Sukur": "syk", "Sukurum": "zsu", "Sula": "szn", "Sulka": "sua", "Sulod": "srg", "Sulung": "suv", "Suma": "sqm", "Sumariup": "siv", "Sumau": "six", "Sumbawa": "smw", "Sumbwa": "suw", "Sumerian": "sux", "Sumtu Chin": "csv", "Sunam": "ssk", "Sundanese": "su", "Sunum": "ymn", "Sunwar": "suz", "Suoy": "syo", "Supyire": "spp", "Sur": "tdl", "Surbakhal": "sbj", "Suri": "suq", "Surigaonon": "sgd", "Surjapuri": "sjp", "Sursurunga": "sgz", "Suruahá": "swx", "Surubu": "sde", "Suruí": "sru", "Suruí Do Pará": "mdz", "Susquehannock": "sqn", "Susu": "sus", "Susuami": "ssu", "Suundi": "sdj", "Suwawa": "swu", "Suyá": "suy", "Svan": "sva", "Swabian": "swg", "Swahili": "sw", "Swampy Cree": "csw", "Swazi": "ss", "Swedish": "sv", "Swedish Sign Language": "swl", "Swiss-French Sign Language": "ssr", "Swiss-German Sign Language": "sgg", "Swiss-Italian Sign Language": "slf", "Swo": "sox", "Syenara Senoufo": "shz", "Sylheti": "syl", "Sácata": "sai-sac", "São Paulo Kaingáng": "zkp", "Sãotomense": "cri", "Sìcìté Sénoufo": "sep", "Sô": "sss", "T'en": "tct", "Taabwa": "tap", "Tabaa Zapotec": "zat", "Tabancale": "sai-tab", "Tabaru": "tby", "Tabasaran": "tab", "Tabasco Chontal": "chf", "Tabasco Nahuatl": "nhc", "Tabasco Zoque": "zoq", "Tabla": "tnm", "Tabo": "knv", "Tabriak": "tzx", "Tacahua Mixtec": "xtt", "Tacana": "tna", "Tachawit": "shy", "Tadaksahak": "dsq", "Tadyawan": "tdy", "Tae'": "rob", "Tafi": "tcd", "Tafreshi": "xme-taf", "Tagabawa": "bgs", "Tagakaulu Kalagan": "klg", "Tagal Murut": "mvv", "Tagalog": "tl", "Tagbanwa": "tbw", "Tagbu": "tbm", "Tagdal": "tda", "Tagish": "tgx", "Tagoi": "tag", "Tagwana Senoufo": "tgw", "Tahitian": "ty", "Tahltan": "tht", "Tai": "taw", "Tai Daeng": "tyr", "Tai Dam": "blt", "Tai Do": "tyj", "Tai Dón": "twh", "Tai Hang Tong": "thc", "Tai Hongjin": "tiz", "Tai Laing": "tjl", "Tai Loi": "tlq", "Tai Long": "thi", "Tai Nüa": "tdd", "Tai Pao": "tpo", "Tai Thanh": "tmm", "Tai Ya": "cuu", "Taiap": "gpn", "Taikat": "aos", "Taimyr Pidgin Russian": "crp-tpr", "Tainae": "ago", "Tairuma": "uar", "Taishanese": "zhx-tai", "Taita": "dav", "Taivoan": "tvx", "Taiwan Sign Language": "tss", "Taje": "pee", "Tajik": "tg", "Tajiki Arabic": "abh", "Tajio": "tdj", "Tajuasohn": "tja", "Takelma": "tkm", "Takia": "tbc", "Takka Apabhramsa": "inc-tak", "Takua": "tkz", "Takuu": "nho", "Takwane": "tke", "Tal": "tal", "Tala": "tak", "Talaud": "tld", "Taliabu": "tlv", "Talieng": "tdf", "Talinga-Bwisi": "tlj", "Talise": "tlr", "Tallán": "sai-tal", "Talodi": "tlo", "Taloki": "tlk", "Talondo'": "tln", "Talossan": "tzl", "Talu": "yta", "Talysh": "tly", "Tama (Chad)": "tma", "Tama (Colombia)": "ten", "Tamagario": "tcg", "Tamambo": "mla", "Taman (Indonesia)": "tmn", "Taman (Myanmar)": "tcl", "Tamanaku": "tmz", "Tamazola Mixtec": "vmx", "Tambas": "tdk", "Tambora": "xxt", "Tambotalo": "tls", "Tambunan Dusun": "kzt", "Tami": "tmy", "Tamil": "ta", "Tamki": "tax", "Tamnim Citak": "tml", "Tampias Lobu": "low", "Tampuan": "tpu", "Tampulma": "tpm", "Tanacross": "tcb", "Tanahmerah": "tcm", "Tanapag": "tpv", "Tandaganon": "tgn", "Tandia": "tni", "Tanema": "tnx", "Tangale": "tan", "Tangam": "sit-tgm", "Tangchangya": "tnv", "Tanggu": "tgu", "Tangkhul Naga": "nmf", "Tangko": "tkx", "Tanglang": "ytl", "Tangoa": "tgp", "Tangsa": "nst", "Tanguat": "tbs", "Tangut": "txg", "Tangwang": "crp-tnw", "Tanimbili": "tbe", "Tanimuca-Retuarã": "tnc", "Tanjijili": "uji", "Tanudan Kalinga": "kml", "Tanzanian Sign Language": "tza", "Taos": "twf", "Tapachultec": "nai-tap", "Taparita": "sai-tpr", "Tapayuna": "sai-tap", "Tapeba": "tbb", "Tapei": "afp", "Tapieté": "tpj", "Tapirapé": "taf", "Tar Gula": "kcm", "Tara Baka": "bdh", "Tarairiú": "sai-trr", "Tarantino": "roa-tar", "Tarao": "tro", "Taraon": "mhu", "Tareng": "tgr", "Tariana": "tae", "Tarifit": "rif", "Tarjumo": "txj", "Tarok": "yer", "Taroko": "trv", "Tarpia": "tpf", "Tartessian": "txr", "Taruma": "tdm", "Tasawaq": "twq", "Tashelhit": "shi", "Tasmanian": "xtz", "Tasmate": "tmt", "Tat": "ttt", "Tataltepec Chatino": "cta", "Tatana": "txx", "Tatar": "tt", "Tataviam": "azc-tat", "Tatuyo": "tav", "Tauade": "ttd", "Taulil": "tuh", "Taungyo": "tco", "Taupota": "tpa", "Tause": "tad", "Taushiro": "trr", "Tausug": "tsg", "Tauya": "tya", "Taveta": "tvs", "Tavoyan": "tvn", "Tavringer Romani": "rmu", "Tawala": "tbo", "Tawandê": "xtw", "Tawang Monpa": "twm", "Tawasa": "nai-taw", "Taworta": "tbp", "Tawoyan": "twy", "Tawr Chin": "tcp", "Tay Khang": "tnu", "Tayabas Ayta": "ayy", "Taymanitic": "sem-tay", "Tayo": "cks", "Taíno": "tnq", "Tboli": "tbl", "Tchitchege": "tck", "Tchumbuli": "bqa", "Te'un": "tve", "Teanu": "tkw", "Tebul Sign Language": "tsy", "Tebul Ure Dogon": "dtu", "Tecpatlán Totonac": "tcw", "Tedaga": "tuq", "Tedim Chin": "ctd", "Tee": "tkq", "Tefaro": "tfo", "Tegali": "ras", "Tehit": "kps", "Tehuelche": "teh", "Teiwa": "twe", "Tejalapan Zapotec": "ztt", "Teke-Fuumu": "ifm", "Teke-Kukuya": "kkw", "Teke-Laali": "lli", "Teke-Tege": "teg", "Teke-Tsaayi": "tyi", "Teke-Tyee": "tyx", "Tektiteko": "ttc", "Tela-Masbuar": "tvm", "Telefol": "tlf", "Telugu": "te", "Teluti": "tlt", "Tem": "kdh", "Temascaltepec Nahuatl": "nhv", "Tembé": "tqb", "Teme": "tdo", "Temein": "teq", "Temi": "soz", "Temiar": "tea", "Temne": "tem", "Temoaya Otomi": "ott", "Temoq": "tmo", "Tempasuk Dusun": "tdu", "Ten'edn": "tnz", "Tenango Otomi": "otn", "Tene Kan Dogon": "dtk", "Tenggarong Kutai Malay": "vkt", "Tengger": "tes", "Tenharim": "pah", "Tenino": "tqn", "Tenis": "tns", "Tennet": "tex", "Teochew": "zhx-teo", "Teojomulco Chatino": "omq-teo", "Teop": "tio", "Teor": "tev", "Tepecano": "tep", "Tepetotutla Chinantec": "cnt", "Tepeuxila Cuicatec": "cux", "Tepinapa Chinantec": "cte", "Tepo Krumen": "ted", "Teposcolula Mixtec": "omq-tel", "Tequistlatec": "nai-teq", "Ter Sami": "sjt", "Tera": "ttr", "Terebu": "trb", "Terei": "buo", "Tereno": "ter", "Teressa": "tef", "Tereweng": "twg", "Teribe": "tfr", "Terik": "tec", "Termanu": "twu", "Ternate": "tft", "Ternateño": "tmg", "Tese": "keg", "Teshenawa": "twc", "Tetela": "tll", "Tetelcingo Nahuatl": "nhg", "Tetete": "teb", "Tetserret": "tez", "Tetum": "tet", "Tetun Dili": "tdt", "Teushen": "sai-teu", "Teutila Cuicatec": "cut", "Tewa": "tew", "Texcatepec Otomi": "otx", "Texistepec Popoluca": "poq", "Texmelucan Zapotec": "zpz", "Tezoatlán Mixtec": "mxb", "Tha": "thy", "Thachanadan": "thn", "Thado Chin": "tcz", "Thai": "th", "Thai Mon": "mnw-tha", "Thai Sign Language": "tsq", "Thai Song": "soa", "Thaiphum Chin": "cth", "Thakali": "ths", "Thamudic": "sem-tha", "Thangal Naga": "nki", "Thangmi": "thf", "Thao": "ssf", "Tharaka": "thk", "Tharrgari": "dhr", "Thavung": "thm", "Thawa": "xtv", "Tho": "tou", "Thompson": "thp", "Thopho": "ytp", "Thracian": "txh", "Thu Lao": "tyl", "Thulung": "tdh", "Thurawal": "tbh", "Thuri": "thu", "Tiagbamrin Aizi": "ahi", "Tiale": "mnl", "Tiang": "tbj", "Tibea": "ngy", "Tibetan": "bo", "Ticuna": "tca", "Tidaá Mixtec": "mtx", "Tidore": "tvo", "Tiemacèwè Bozo": "boo", "Tiene": "tii", "Tifal": "tif", "Tigak": "tgc", "Tigon Mbembe": "nza", "Tigre": "tig", "Tigrinya": "ti", "Tii": "txq", "Tijaltepec Mixtec": "xtl", "Tikar": "tik", "Tikopia": "tkp", "Tilapa Otomi": "otl", "Tillamook": "til", "Tilquiapan Zapotec": "zts", "Tilung": "tij", "Tima": "tms", "Timbe": "tim", "Timor Pidgin": "tvy", "Timote": "sai-tim", "Timucua": "tjm", "Timugon Murut": "tih", "Tinani": "lbf", "Tindi": "tin", "Tingui-Boto": "tgv", "Tinigua": "tit", "Tinoc Kallahan": "tne", "Tinputz": "tpz", "Tipai": "nai-tip", "Tippera": "tpe", "Tira": "tic", "Tirahi": "tra", "Tiranige Diga Dogon": "tde", "Tircul": "pyx", "Tiri": "cir", "Tiruray": "tiy", "Tita": "tdq", "Titan": "ttv", "Tiv": "tiv", "Tiwa": "lax", "Tiwi": "tiw", "Tiéfo": "tiq", "Tiéyaxo Bozo": "boz", "Tjurruru": "tju", "Tlachichilco Tepehua": "tpt", "Tlacoapa Me'phaa": "tpl", "Tlacoatzintepec Chinantec": "ctl", "Tlacolulita Zapotec": "zpk", "Tlahuica": "ocu", "Tlahuitoltepec Mixe": "mxp", "Tlamacazapa Nahuatl": "nuz", "Tlazoyaltepec Mixtec": "mqh", "Tlingit": "tli", "To": "toz", "To'abaita": "mlu", "Toaripi": "tqo", "Toba": "tob", "Toba Batak": "bbc", "Toba-Maskoy": "tmf", "Tobagonian Creole English": "tgh", "Tobanga": "tng", "Tobati": "tti", "Tobelo": "tlb", "Tobian": "tox", "Tobilung": "tgb", "Tobo": "tbv", "Tocantins Asurini": "asu", "Tocharian A": "xto", "Tocharian B": "txb", "Tocho": "taz", "Toda": "tcx", "Todrah": "tdr", "Tofa": "kim", "Tofanma": "tlg", "Tofin Gbe": "tfi", "Togbo-Vara Banda": "tor", "Togoyo": "tgy", "Tojolabal": "toj", "Tok Pisin": "tpi", "Toka-Leya": "dov", "Tokano": "zuh", "Tokelauan": "tkl", "Toki Pona": "tok", "Toku-No-Shima": "tkn", "Tol": "jic", "Tolai": "ksd", "Tolaki": "lbw", "Tolomako": "tlm", "Tolowa": "tol", "Toma": "tod", "Tomadino": "tdi", "Tombelala": "ttp", "Tombonuo": "txa", "Tombulu": "tom", "Tomini": "txm", "Tommeginne": "xpv", "Tommo So": "dto", "Tomo Kan Dogon": "dtm", "Tomoip": "tqp", "Tondano": "tdn", "Tonga (Malawi)": "tog", "Tonga (Mozambique)": "toh", "Tonga (Zambia)": "toi", "Tongan": "to", "Tongwe": "tny", "Tonjon": "tjn", "Tonkawa": "tqw", "Tonsawang": "tnw", "Tonsea": "txs", "Tontemboan": "tnt", "Toogee": "xpx", "Tooro": "ttj", "Topoiyo": "toy", "Toposa": "toq", "Toraja-Sa'dan": "sda", "Toram": "trj", "Torau": "ttu", "Toro": "tdv", "Toro So Dogon": "dts", "Toro Tegu Dogon": "dtt", "Toromono": "tno", "Torona": "tqr", "Torres Strait Creole": "tcs", "Torricelli": "tei", "Torricelli Yau": "yyu", "Torwali": "trw", "Torá": "trz", "Tosu": "sit-tos", "Totela": "ttl", "Toto": "txo", "Totoli": "txe", "Totomachapan Zapotec": "zph", "Totontepec Mixe": "mto", "Totoro": "ttk", "Touo": "tqu", "Toura": "neb", "Tourangeau": "roa-tou", "Towei": "ttn", "Translingual": "mul", "Transylvanian Saxon": "gmw-tsx", "Traveller Danish": "rmd", "Traveller Norwegian": "rmg", "Traveller Scottish": "trl", "Tregami": "trm", "Tremembé": "tme", "Trieng": "stg", "Trimuris": "tip", "Tring": "tgq", "Tringgus": "trx", "Trinidad and Tobago Sign Language": "lst", "Trinidadian Creole English": "trf", "Trinitario": "trn", "Trió": "tri", "Truká": "tka", "Trumai": "tpy", "Ts'ün-Lao": "tsl", "Tsaangi": "tsa", "Tsafiki": "cof", "Tsakhur": "tkr", "Tsakonian": "tsd", "Tsakwambo": "kvz", "Tsamai": "tsb", "Tsat": "huq", "Tsetsaut": "txc", "Tsez": "ddo", "Tshangla": "tsj", "Tshobdun": "sit-tsh", "Tshwa": "hio", "Tsikimba": "kdl", "Tsimané": "cas", "Tsimshian": "tsi", "Tsishingini": "tsw", "Tso": "ldp", "Tsogo": "tsv", "Tsonga": "ts", "Tsotsitaal": "fly", "Tsou": "tsu", "Tsum": "ttz", "Tsuvadi": "tvd", "Tsuvan": "tsh", "Tswa": "tsc", "Tswana": "tn", "Tswapong": "two", "Tuamotuan": "pmt", "Tuareg": "tmh", "Tubar": "tbu", "Tucano": "tuo", "Tugen": "tuy", "Tugun": "tzn", "Tugutil": "tuj", "Tukang Besi North": "khc", "Tukang Besi South": "bhq", "Tuki": "bag", "Tukpa": "tpq", "Tukudede": "tkd", "Tukumanféd": "tkf", "Tula": "tul", "Tule-Kaweah Yokuts": "nai-tky", "Tulehu": "tlu", "Tulishi": "tey", "Tulu": "tcy", "Tulu-Bohuai": "rak", "Tulua": "aus-tul", "Tuma-Irumu": "iou", "Tumak": "tmc", "Tumbuka": "tum", "Tumi": "kku", "Tumleo": "tmq", "Tumshuqese": "xtq", "Tumtum": "tbr", "Tumulung Sisaala": "sil", "Tundra Enets": "enh", "Tundra Nenets": "yrk", "Tunen": "tvu", "Tungag": "lcm", "Tunggare": "trt", "Tunia": "tug", "Tunica": "tun", "Tunisian Arabic": "aeb", "Tunisian Berber": "sds", "Tunisian Sign Language": "tse", "Tunjung": "tjg", "Tunni": "tqq", "Tunumiisut": "esx-tut", "Tunzu": "dza", "Tuoba": "qfa-xgx-tuo", "Tuotomb": "ttf", "Tuparí": "tpr", "Tupinambá": "tpn", "Tupinikin": "tpk", "Tupuri": "tui", "Turaka": "trh", "Turi": "trd", "Turiwára": "twt", "Turka": "tuz", "Turkana": "tuv", "Turkish": "tr", "Turkish Sign Language": "tsm", "Turkmen": "tk", "Turks and Caicos Creole English": "tch", "Turoyo": "tru", "Turumsa": "tqm", "Turung": "try", "Tuscarora": "tus", "Tutelo": "tta", "Tutong": "ttg", "Tutsa Naga": "tvt", "Tutuba": "tmi", "Tututepec Mixtec": "mtu", "Tututni": "tuu", "Tuvaluan": "tvl", "Tuvan": "tyv", "Tuwali Ifugao": "ifk", "Tuwari": "tww", "Tuwuli": "bov", "Tuxináwa": "tux", "Tuxá": "tud", "Tuyuca": "tue", "Tuyuhun": "qfa-xgx-tuh", "Twana": "twa", "Twendi": "twn", "Tyap": "kcg", "Tyaraity": "woa", "Tyerrernotepanner": "xph", "Tz'utujil": "tzj", "Tzeltal": "tzh", "Tzotzil": "tzo", "Tày": "tyz", "Tày Tac": "tyt", "Tây Bồi": "tas", "Téén": "lor", "Tübatulabal": "tub", "U": "uuu", "Uab Meto": "aoz", "Uamué": "uam", "Uare": "ksj", "Ubaghara": "byc", "Ubang": "uba", "Ubi": "ubi", "Ubir": "ubr", "Ubykh": "uby", "Ucayali-Yurúa Ashéninka": "cpb", "Uda": "uda", "Udi": "udi", "Udihe": "ude", "Udmurt": "udm", "Uduk": "udu", "Ufim": "ufi", "Ugandan Sign Language": "ugn", "Ugaritic": "uga", "Ughele": "uge", "Uhami": "uha", "Uisai": "uis", "Ujir": "udj", "Ukaan": "kcf", "Ukhwejo": "ukh", "Ukit": "umi", "Ukpe-Bayobiri": "ukp", "Ukpet-Ehom": "akd", "Ukrainian": "uk", "Ukrainian Sign Language": "ukl", "Ukue": "uku", "Ukuriguma": "ukg", "Ukwa": "ukq", "Ukwuani-Aboh-Ndoni": "ukw", "Ulau-Suain": "svb", "Ulch": "ulc", "Uldeme": "udl", "Ulithian": "uli", "Ullatan": "ull", "Ulumanda'": "ulm", "Ulwa": "ulw", "Uma": "ppk", "Uma' Lasan": "xky", "Uma' Lung": "ulu", "Umanakaina": "gdn", "Umatilla": "uma", "Umbindhamu": "umd", "Umbrian": "xum", "Umbu-Ungu": "ubu", "Umbugarla": "umr", "Umbundu": "umb", "Umbuygamu": "umg", "Ume Sami": "sju", "Umeda": "upi", "Umiida": "xud", "Umiray Dumaget Agta": "due", "Umon": "umm", "Umotína": "umo", "Umpila": "ump", "Una": "mtg", "Unami": "unm", "Unas": "art-una", "Unde Kaili": "unz", "Undetermined": "und", "Uneapa": "bbn", "Uneme": "une", "Unggaranggu": "xun", "Unggumi": "xgu", "Unserdeutsch": "uln", "Unua": "onu", "Unubahe": "unu", "Uokha": "uok", "Upper Chehalis": "cjh", "Upper Grand Valley Dani": "dna", "Upper Kinabatangan": "dmg", "Upper Kuskokwim": "kuu", "Upper Necaxa Totonac": "tku", "Upper Sorbian": "hsb", "Upper Ta'oih": "tth", "Upper Tanana": "tau", "Upper Taromi": "tov", "Upper Umpqua": "xup", "Ura (New Guinea)": "uro", "Ura (Vanuatu)": "uur", "Uradhi": "urf", "Urak Lawoi'": "urk", "Urali": "url", "Urapmin": "urm", "Urarina": "ura", "Urartian": "xur", "Urat": "urt", "Urdu": "ur", "Urhobo": "urh", "Uri": "uvh", "Urigina": "urg", "Urim": "uri", "Urimo": "urx", "Uripiv-Wala-Rano-Atchin": "upv", "Urningangg": "urc", "Uru": "ure", "Uru-Eu-Wau-Wau": "urz", "Uru-Pa-In": "urp", "Uruangnirin": "urn", "Uruava": "urv", "Urubú-Kaapor": "urb", "Uruguayan Sign Language": "ugy", "Urum": "uum", "Urumi": "uru", "Usaghade": "usk", "Usan": "wnu", "Usarufa": "usa", "Ushojo": "ush", "Usila Chinantec": "cuc", "Uspanteco": "usp", "Usui": "usi", "Utarmbung": "omo", "Ute": "ute", "Utu": "utu", "Uvbie": "evh", "Uwinymil": "aus-uwi", "Uya": "usu", "Uyajitaya": "duk", "Uyghur": "ug", "Uzbek": "uz", "Uzbeki Arabic": "auz", "Uzekwe": "eze", "Vaagri Booli": "vaa", "Vaghri": "vgr", "Vaghua": "tva", "Vagla": "vag", "Vai": "vai", "Vaiphei": "vap", "Vale": "vae", "Valencian Sign Language": "vsv", "Valle Nacional Chinantec": "cvn", "Valley Maidu": "vmv", "Valman": "van", "Valpei": "vlp", "Vamale": "mkt", "Vame": "mlr", "Vandalic": "xvn", "Vangunu": "mpr", "Vanimo": "vam", "Vanji": "ira-wnj", "Vanuma": "vau", "Vao": "vao", "Varhadi": "vah", "Varisi": "vrs", "Varli": "vav", "Vasavi": "vas", "Vayu": "vay", "Veddah": "ved", "Vehes": "val", "Vemgo-Mabas": "vem", "Venda": "ve", "Venetian": "vec", "Venetic": "xve", "Venezuelan Sign Language": "vsl", "Ventureño": "veo", "Veps": "vep", "Vera'a": "vra", "Vestinian": "xvs", "Vidunda": "vid", "Viemo": "vig", "Vietnamese": "vi", "Vilamovian": "wym", "Vilela": "vil", "Vili": "vif", "Villa Viciosa Agta": "dyg", "Vincentian Creole English": "svc", "Virgin Islands Creole": "vic", "Vishavan": "vis", "Viti": "vit", "Vitou": "vto", "Viya": "gev", "Vlax Romani": "rmy", "Volapük": "vo", "Volga German": "gmw-vog", "Volscian": "xvo", "Vono": "kch", "Voro": "vor", "Votic": "vot", "Vracada Apabhramsa": "inc-vra", "Vumbu": "vum", "Vunapu": "vnp", "Vunjo": "vun", "Vurës": "msn", "Vute": "vut", "Võro": "vro", "Wa": "wbm", "Wa'ema": "wag", "Waama": "wwa", "Waamwang": "wmn", "Wab": "wab", "Wabo": "wbb", "Waboda": "kmx", "Waci Gbe": "wci", "Wadaginam": "wdg", "Waddar": "wbq", "Wadi Wadi": "xwd", "Wadiyara Koli": "kxp", "Wadjabangayi": "wdy", "Wadjiginy": "wdj", "Wadjigu": "wdu", "Wae Rana": "wrx", "Waffa": "waj", "Wagawaga": "wgb", "Wagaya": "wga", "Wagdi": "wbr", "Wageman": "waq", "Wagi": "fad", "Wahau Kayan": "whu", "Wahau Kenyah": "whk", "Wahgi": "wgi", "Waigali": "wbk", "Waigeo": "wgo", "Waikuri": "nai-wai", "Wailaki": "wlk", "Wailapa": "wlr", "Waima'a": "wmh", "Waimaha": "bao", "Waimiri-Atroari": "atr", "Wainumá": "awd-wai", "Waioli": "wli", "Waitaká": "sai-wai", "Waiwai": "waw", "Waja": "wja", "Wajarri": "wbv", "Wajuk": "xwj", "Waka": "wav", "Wakawaka": "wkw", "Wakhi": "wbl", "Wakoná": "waf", "Wala": "lgl", "Walak": "wlw", "Walangama": "nlw", "Wali (Ghana)": "wlx", "Wali (Sudan)": "wll", "Waling": "wly", "Walio": "wla", "Walla Walla": "waa", "Wallisian": "wls", "Walloon": "wa", "Walmajarri": "wmt", "Wam": "wmo", "Wamas": "wmc", "Wambaya": "wmb", "Wambon": "wms", "Wambule": "wme", "Wamey": "cou", "Wamin": "wmi", "Wampar": "lbq", "Wampur": "waz", "Wan": "wan", "Wanambre": "wnb", "Wanap": "wnp", "Wancho": "nnp", "Wanda": "wbh", "Wandala": "mfi", "Wandamen": "wad", "Wandarang": "wnd", "Wandji": "wdd", "Waneci": "wne", "Wanga": "lwg", "Wanggamala": "wnm", "Wangganguru": "wgg", "Wanggom": "wng", "Wangkayutyuru": "wky", "Wangkumara": "xwk", "Wanham": "sai-wnm", "Wanji": "wbi", "Wanman": "wbt", "Wannu": "jub", "Wano": "wno", "Wantoat": "wnc", "Wanukaka": "wnk", "Wanyi": "wny", "Wané": "hwa", "Wapan": "juk", "Wapishana": "wap", "Wappo": "wao", "War-Jaintia": "aml", "Wara": "wbf", "Warao": "wba", "Warapu": "wra", "Waray Sorsogon": "srv", "Waray-Waray": "war", "Wardaman": "wrr", "Wardandi": "wxw", "Warekena": "gae", "Warembori": "wsa", "Wari'": "pav", "Waris": "wrs", "Waritai": "wbe", "Wariyangga": "wri", "Warji": "wji", "Warkay-Bipim": "bgv", "Warlmanpa": "wrl", "Warlpiri": "wbp", "Warluwara": "wrb", "Warnang": "wrn", "Waropen": "wrp", "Warray": "wrz", "Warrgamay": "wgy", "Warrwa": "wwr", "Waru": "wru", "Warumungu": "wrm", "Waruna": "wrv", "Warungu": "wrg", "Warwar Feni": "hrw", "Wasa": "wss", "Wasco-Wishram": "wac", "Wasembo": "gsp", "Washo": "was", "Waskia": "wsk", "Wastek": "hus", "Wasu": "wsu", "Watakataui": "wtk", "Watam": "wax", "Wathaurong": "wth", "Watiwa": "wtf", "Watubela": "wah", "Waube": "kop", "Wauja": "wau", "Wauyai": "wuy", "Wawa": "www", "Wawonii": "wow", "Waxianghua": "wxa", "Wayampi": "oym", "Wayana": "way", "Wayanad Chetti": "ctt", "Wayoró": "wyr", "Wayumará": "sai-way", "Wayuu": "guc", "Wedau": "wed", "Weh": "weh", "Welaung": "weu", "Weliki": "klh", "Welsh": "cy", "Welsh Romani": "rmw", "Wemale": "weo", "Wemba-Wemba": "xww", "Weme Gbe": "wem", "Wendat": "wdt", "Weri": "wer", "Wersing": "kvw", "West Albay Bikol": "fbl", "West Ambae": "nnd", "West Central Banda": "bbp", "West Coast Bajau": "bdr", "West Damar": "drn", "West Flemish": "vls", "West Frisian": "fy", "West Greenlandic Pidgin": "crp-gep", "West Lembata": "lmj", "West Makian": "mqs", "West Masela": "mss", "West Tarangan": "txn", "West Uvean": "uve", "West-Central Limba": "lia", "Western Apache": "apw", "Western Arrernte": "are", "Western Bolivian Guaraní": "gnw", "Western Bru": "brv", "Western Bukidnon Manobo": "mbb", "Western Cham": "cja", "Western Dani": "dnw", "Western Durango Nahuatl": "azn", "Western Fijian": "wyy", "Western Gurung": "gvr", "Western Highland Chatino": "ctp", "Western Huasteca Nahuatl": "nhw", "Western Jicaque": "und-wji", "Western Juxtlahuaca Mixtec": "jmx", "Western Karaboro": "kza", "Western Katu": "kuf", "Western Kayah": "kyu", "Western Keres": "kjq", "Western Krahn": "krw", "Western Lalu": "ywl", "Western Lawa": "lcp", "Western Magar": "mrd", "Western Maninkakan": "mlq", "Western Mari": "mrj", "Western Mashan Hmong": "hmw", "Western Meohang": "raf", "Western Muria": "mut", "Western Neo-Aramaic": "amw", "Western Ojibwa": "ojw", "Western Panjabi": "pnb", "Western Penan": "pne", "Western Pwo": "pwo", "Western Sisaala": "ssl", "Western Subanon": "suc", "Western Tamang": "tdg", "Western Tawbuid": "twb", "Western Totonac": "tqt", "Western Tunebo": "tnb", "Western Xiangxi Miao": "mmr", "Western Xwla Gbe": "xwl", "Western Yugur": "ybe", "Wewaw": "wea", "Weyewa": "wew", "White Gelao": "giw", "White Hmong": "mww", "White Lachi": "lwh", "Whitesands": "tnp", "Wiarumus": "tua", "Wichita": "wic", "Wichí Lhamtés Güisnay": "mzh", "Wichí Lhamtés Nocten": "mtp", "Wichí Lhamtés Vejoz": "wlv", "Wik-Epa": "wie", "Wik-Iiyanh": "wij", "Wik-Keyangan": "wif", "Wik-Me'anha": "wih", "Wik-Mungkan": "wim", "Wik-Ngathana": "wig", "Wikalkan": "wik", "Wikngenchera": "wua", "Wilawila": "wil", "Winnebago": "win", "Wintu": "wnw", "Winyé": "kst", "Wipi": "gdr", "Wiradhuri": "wrh", "Wiraféd": "wir", "Wirangu": "wgu", "Wiru": "wiu", "Wirö": "wpc", "Wiwa": "mbp", "Wiyot": "wiy", "Woccon": "xwc", "Wogamusin": "wog", "Wogeo": "woc", "Woi": "wbw", "Woiwurrung": "wyi", "Wojenaka": "jod", "Wolane": "wle", "Wolani": "wod", "Wolaytta": "wal", "Woleaian": "woe", "Wolio": "wlo", "Wolof": "wo", "Womo": "wmx", "Wong-gie": "aus-won", "Wongo": "won", "Woods Cree": "cwd", "Woria": "wor", "Worimi": "kda", "Worodougou": "jud", "Worora": "wro", "Wotapuri-Katarqalai": "wsv", "Wotu": "wtw", "Woun Meu": "noa", "Written Oirat": "xwo", "Wu": "wuu", "Wudu": "wud", "Wuhuan": "qfa-xgx-wuh", "Wulguru": "aus-wul", "Wuliwuli": "wlu", "Wulna": "wux", "Wumboko": "bqm", "Wumbvu": "wum", "Wumeng Nasu": "ywu", "Wunai Bunu": "bwn", "Wunambal": "wub", "Wurrugu": "wur", "Wusa Nasu": "yig", "Wushi": "bse", "Wusi": "wsi", "Wutung": "wut", "Wutunhua": "wuh", "Wuvulu-Aua": "wuv", "Wyandot": "wya", "Wára": "tci", "Wãpha": "juw", "Wè Northern": "wob", "Wè Southern": "gxx", "Wè Western": "wec", "Xadani Zapotec": "zax", "Xakriabá": "xkr", "Xamtanga": "xan", "Xanaguía Zapotec": "ztg", "Xaragure": "axx", "Xavante": "xav", "Xerénte": "xer", "Xetá": "xet", "Xhosa": "xh", "Xianbei": "qfa-xgx-xbi", "Xiang": "hsn", "Xibe": "sjo", "Xicotepec de Juárez Totonac": "too", "Xinca": "xin", "Xingú Asuriní": "asn", "Xipaya": "xiy", "Xiri": "xii", "Xiriâna": "xir", "Xishanba Lalo": "ywt", "Xocó": "sai-xoc", "Xokleng": "xok", "Xukurú": "xoo", "Xwela Gbe": "xwe", "Xârâcùù": "ane", "Yaa": "iyx", "Yaaku": "muu", "Yabarana": "yar", "Yabaâna": "ybn", "Yaben": "ybm", "Yabong": "ybo", "Yabula Yabula": "yxy", "Yace": "ekr", "Yaeyama": "rys", "Yafi": "wfg", "Yagara": "yxg", "Yagaria": "ygr", "Yagnobi": "yai", "Yagomi": "ygm", "Yagua": "yad", "Yagwoia": "ygw", "Yahadian": "ner", "Yahang": "rhp", "Yahuna": "ynu", "Yaka": "yaf", "Yakaikeke": "ykk", "Yakan": "yka", "Yakima": "yak", "Yakkha": "ybh", "Yakoma": "yky", "Yakut": "sah", "Yala": "yba", "Yalahatan": "jal", "Yalakalore": "xyl", "Yalarnnga": "ylr", "Yale": "nce", "Yaleba": "ylb", "Yalunka": "yal", "Yalálag Zapotec": "zpu", "Yamap": "ymp", "Yamba": "yam", "Yambes": "ymb", "Yambeta": "yat", "Yamdena": "jmd", "Yameo": "yme", "Yami": "tao", "Yaminahua": "yaa", "Yamongeri": "ymg", "Yamphu": "ybi", "Yan-nhangu": "jay", "Yana": "ynn", "Yanda": "yda", "Yanda Dogon": "dym", "Yandjibara": "xyb", "Yandruwandha": "ynd", "Yanesha'": "ame", "Yangben": "yav", "Yangkaal": "aus-ynk", "Yangkam": "bsx", "Yangman": "jng", "Yango": "yng", "Yangulam": "ynl", "Yangum Dey": "yde", "Yangum Gel": "ygl", "Yangum Mon": "ymo", "Yankunytjatjara": "kdd", "Yanomamö": "guu", "Yanomámi": "wca", "Yansi": "yns", "Yanyuwa": "jao", "Yao": "yao", "Yao (South America)": "sai-yao", "Yaosakor Asmat": "asy", "Yaouré": "yre", "Yapese": "yap", "Yapunda": "yev", "Yaqay": "jaq", "Yaqui": "yaq", "Yarawata": "yrw", "Yareba": "yrb", "Yareni Zapotec": "zae", "Yarli": "yxl", "Yarluyandi": "yry", "Yaroamë": "yro", "Yarumá": "sai-yar", "Yarí": "yri", "Yasa": "yko", "Yatay": "yty", "Yatee Zapotec": "zty", "Yatzachi Zapotec": "zav", "Yaul": "yla", "Yaur": "jau", "Yautepec Zapotec": "zpb", "Yavitero": "yvt", "Yawa": "yva", "Yawalapití": "yaw", "Yawanawa": "ywn", "Yawarawarga": "yww", "Yaweyuha": "yby", "Yawijibaya": "jbw", "Yawiyo": "ybx", "Yawuru": "ywr", "Yaygir": "xya", "Yazghulami": "yah", "Yei": "jei", "Yekhee": "ets", "Yekora": "ykr", "Yele": "yle", "Yelmek": "jel", "Yelogu": "ylg", "Yemba": "ybb", "Yemeni Arabic": "ayn", "Yemsa": "jnj", "Yendang": "yen", "Yeni": "yei", "Yeniche": "yec", "Yerakai": "yra", "Yeretuar": "gop", "Yerong": "yrn", "Yerukula": "yeu", "Yeskwa": "yes", "Yessan-Mayo": "yss", "Yetfa": "yet", "Yevanic": "yej", "Yeyi": "yey", "Yiddish": "yi", "Yidgha": "ydg", "Yidiny": "yii", "Yil": "yll", "Yilan Creole": "ycr", "Yimas": "yee", "Yimchungru Naga": "yim", "Yinbaw Karen": "kvu", "Yinchia": "yin", "Yindjibarndi": "yij", "Yindjilandji": "yil", "Yine": "pib", "Yinggarda": "yia", "Yinhawangka": "ywg", "Yiningayi": "ygi", "Yintale Karen": "kvy", "Yinwum": "yxm", "Yir-Yoront": "yiy", "Yirandali": "ljw", "Yis": "yis", "Yitha Yitha": "xth", "Yoba": "yob", "Yocoboué Dida": "gud", "Yogad": "yog", "Yoidik": "ydk", "Yoke": "yki", "Yola": "yol", "Yolmo": "scp", "Yolngu Sign Language": "ygs", "Yoloxochitl Mixtec": "xty", "Yom": "pil", "Yombe": "yom", "Yonaguni": "yoi", "Yong": "yno", "Yongkom": "yon", "Yopno": "yut", "Yora": "mts", "Yoron": "yox", "Yorta Yorta": "xyy", "Yoruba": "yo", "Yosondúa Mixtec": "mpm", "Youle Jinuo": "jiu", "Younuo Bunu": "buh", "Yout Wam": "ytw", "Yoy": "yoy", "Yuaga": "nua", "Yucatec Maya": "yua", "Yucatec Maya Sign Language": "msd", "Yuchi": "yuc", "Yucuañe Mixtec": "mvg", "Yucuna": "ycn", "Yug": "yug", "Yugambal": "yub", "Yugoslavian Sign Language": "ysl", "Yugul": "ygu", "Yuhup": "yab", "Yuki": "yuk", "Yukpa": "yup", "Yukuben": "ybl", "Yulu": "yul", "Yuma": "yum", "Yumana": "awd-yum", "Yup'ik": "esu", "Yupiltepeque": "nai-yup", "Yupua": "sai-yup", "Yuqui": "yuq", "Yuracare": "yuz", "Yuri": "sai-yri", "Yurok": "yur", "Yuru": "ljx", "Yurumanguí": "sai-yur", "Yurutí": "yui", "Yutanduchi Mixtec": "mab", "Yuwana": "yau", "Yuyu": "yxu", "Yámana": "yag", "Zaachila Zapotec": "ztx", "Zabana": "kji", "Zacatepec Chatino": "ctz", "Zacatlán-Ahuacatlán-Tepetzintla Nahuatl": "nhi", "Zaghawa": "zag", "Zaiwa": "atb", "Zakhring": "zkr", "Zambian Sign Language": "zsl", "Zan Gula": "zna", "Zanaki": "zak", "Zande": "zne", "Zangskari": "zau", "Zangwal": "zah", "Zaniza Zapotec": "zpw", "Zapotec": "zap", "Zaramo": "zaj", "Zari": "zaz", "Zarma": "dje", "Zauzou": "zal", "Zay": "zwa", "Zayein Karen": "kxk", "Zayse-Zergulla": "zay", "Zazaki": "zza", "Zazao": "jaj", "Zbu": "sit-zbu", "Zealandic": "zea", "Zeem": "zua", "Zemba": "dhm", "Zeme Naga": "nzm", "Zemgalian": "xzm", "Zenag": "zeg", "Zenaga": "zen", "Zenzontepec Chatino": "czn", "Zhaba": "zhb", "Zhang-Zhung": "xzh", "Zhire": "zhi", "Zhoa": "zhw", "Zhuang": "za", "Zhár": "jjr", "Zia": "zia", "Zialo": "zil", "Zigula": "ziw", "Zimakani": "zik", "Zimba": "zmb", "Zimbabwe Sign Language": "zib", "Zinza": "zin", "Zipser German": "gmw-zps", "Zire": "sih", "Zirenkel": "zrn", "Ziriya": "zir", "Zizilivakan": "ziz", "Zo'é": "pto", "Zokhuo": "yzk", "Zoogocho Zapotec": "zpq", "Zotung Chin": "czt", "Zou": "zom", "Zulgo-Gemzek": "gnd", "Zulu": "zu", "Zumaya": "zuy", "Zumbun": "jmb", "Zuni": "zun", "Zuojiang Zhuang": "zzj", "Zuwara": "ber-zuw", "Zyphe": "zyp", "Záparo": "zro", "Àhàn": "ahn", "Áncá": "acb", "Ömie": "aom", "Önge": "oon", "ǀXam": "xam", "ǁAni": "hnh", "ǁGana": "gnk", "ǁXegwi": "xeg", "ǂHoan": "huc", "ǃKung": "khi-kun", "ǃXóõ": "nmn" } jk6v7zj4hgu9zza365ftql5xtiqh00e 487552 487548 2026-09-01T15:23:20Z SM7 6218 असमिया, हिंदी, बिहारी 487552 json application/json { "'Are'are": "alu", "A'ou": "aou", "A-Hmao": "hmd", "A-Pucikwar": "apq", "Aari": "aiw", "Aasax": "aas", "Aba": "utp", "Abaga": "abg", "Abai": "poz-abi", "Abai Sungai": "abf", "Abanyom": "abm", "Abau": "aau", "Abaza": "abq", "Abenaki": "abe", "Abenlen Ayta": "abp", "Abidji": "abi", "Abinomn": "bsa", "Abipon": "axb", "Abishira": "ash", "Abkhaz": "ab", "Abom": "aob", "Abon": "abo", "Abron": "abr", "Abu": "ado", "Abu' Arapesh": "aah", "Abua": "abn", "Abui": "abz", "Abun": "kgr", "Abung": "abl", "Abure": "abu", "Abureni": "mgj", "Abé": "aba", "Acatepec Me'phaa": "tpx", "Acehnese": "ace", "Achagua": "aca", "Achang": "acn", "Ache": "yif", "Acheron": "acz", "Achi": "acr", "Acholi": "ach", "Achuar": "acu", "Achumawi": "acv", "Aché": "guq", "Acroá": "acs", "Adabe": "adb", "Adai": "xad", "Adamorobe Sign Language": "ads", "Adang": "adn", "Adangbe": "adq", "Adangme": "ada", "Adap": "adp", "Adasen": "tiu", "Adele": "ade", "Adhola": "adh", "Adi": "adi", "Adioukrou": "adj", "Adithinngithigh": "dth", "Adivasi Oriya": "ort", "Adiwasi Garasia": "gas", "Adja": "ajg", "Adnyamathanha": "adt", "Adonara": "adr", "Aduge": "adu", "Adyghe": "ady", "Adzera": "adz", "Aeka": "aez", "Aekyom": "awi", "Aequian": "xae", "Aer": "aeq", "Afade": "aal", "Afar": "aa", "Afghan Sign Language": "afg", "Afitti": "aft", "Afra": "ulf", "Afrihili": "afh", "Afrikaans": "af", "Afro-Seminole Creole": "afs", "Agarabi": "agd", "Agariya": "agi", "Agatu": "agc", "Agavotaguerra": "avo", "Agawam": "alg-aga", "Aghem": "agq", "Aghu": "ahh", "Aghu Tharrnggala": "gtu", "Aghul": "agx", "Aghwan": "xag", "Agi": "aif", "Agob": "kit", "Agoi": "ibm", "Aguacateca": "agu", "Aguano": "aga", "Aguaruna": "agr", "Aguna": "aug", "Agusan Manobo": "msm", "Agutaynen": "agn", "Agwagwune": "yay", "Ahanta": "aha", "Ahirani": "ahr", "Ahom": "aho", "Ahtna": "aht", "Ahwai": "nfd", "Ai-Cham": "aih", "Aighon": "aix", "Aikanã": "tba", "Aiklep": "mwg", "Aimele": "ail", "Aimol": "aim", "Ainbai": "aic", "Ainu": "ain", "Aiome": "aki", "Airoran": "air", "Aisi": "mmq", "Aiton": "aio", "Aiwoo": "nfl", "Aja": "aja", "Ajagua": "sai-ajg", "Ajawa": "ajw", "Ajië": "aji", "Ajyíninka Apurucayali": "cpc", "Ak": "akq", "Aka (Central Africa)": "axk", "Aka (Sudan)": "soh", "Aka-Bea": "abj", "Aka-Bo": "akm", "Aka-Cari": "aci", "Aka-Kede": "akx", "Aka-Kol": "aky", "Aka-Kora": "ack", "Akan": "ak", "Akar-Bale": "acl", "Akaselem": "aks", "Akatek": "knj", "Akawaio": "ake", "Ake": "aik", "Akebu": "keu", "Akei": "tsr", "Akeu": "aeu", "Akha": "ahk", "Akhvakh": "akv", "Akkadian": "akk", "Akkala Sami": "sia", "Aklanon": "akl", "Akolet": "akt", "Akoose": "bss", "Akoye": "miw", "Akpa": "akf", "Akpes": "ibe", "Akrukay": "afi", "Akuku": "ayk", "Akum": "aku", "Akuntsu": "aqz", "Akurio": "ako", "Akuwagel": "bey", "Akwa": "akw", "Akyaung Ari": "nqy", "Al-Sayyid Bedouin Sign Language": "syy", "Alaba": "alw", "Alabama": "akz", "Alabat Island Agta": "dul", "Alacatlatzala Mixtec": "mim", "Alago": "ala", "Alagwa": "wbj", "Alak": "alk", "Alamblak": "amp", "Alangan": "alj", "Alapmunte": "apv", "Alas-Kluet Batak": "btz", "Alawa": "alh", "Alazapa": "nai-ala", "Albanian": "sq", "Albanian Sign Language": "sqk", "Alcozauca Mixtec": "xta", "Alege": "alf", "Alekano": "gah", "Alemannic German": "gsw", "Aleut": "ale", "Algerian Arabic": "arq", "Algerian Sign Language": "asp", "Algonquin": "alq", "Ali": "aiy", "Alladian": "ald", "Allar": "all", "Allentiac": "sai-all", "Alngith": "aid", "Alo Phola": "ypo", "Alor": "aol", "Aloápam Zapotec": "zaq", "Alsea": "aes", "Alu": "mte", "Alu Kurumba": "xua", "Alugu": "aub", "Alumu-Tesu": "aab", "Alune": "alp", "Alungul": "aus-alu", "Aluo": "yna", "Alur": "alz", "Alutiiq": "ems", "Alutor": "alr", "Alviri-Vidari": "avd", "Alyawarr": "aly", "Ama": "amm", "Amahai": "amq", "Amahuaca": "amc", "Amaimon": "ali", "Amal": "aad", "Amanab": "amn", "Amanayé": "ama", "Amara": "aie", "Amarakaeri": "amr", "Amarasi": "aaz", "Amarizana": "awd-ama", "Amasi": "alv-ama", "Amatlán Zapotec": "zpo", "Amba": "rwm", "Ambai": "amk", "Ambakich": "aew", "Ambala Ayta": "abc", "Ambelau": "amv", "Ambele": "ael", "Amblong": "alm", "Ambo": "amb", "Ambonese Malay": "abs", "Ambrak": "aag", "Ambul": "apo", "Ambulas": "abt", "Amdang": "amj", "Amele": "aey", "American Sign Language": "ase", "Amganad Ifugao": "ifa", "Amharic": "am", "Ami": "amy", "Amis": "ami", "Ammonite": "sem-amm", "Amo": "amo", "Amol": "alx", "Amoltepec Mixtec": "mbz", "Amondawa": "adw", "Amorite": "sem-amo", "Ampanang": "apg", "Ampari Dogon": "aqd", "Amri Karbi": "ajz", "Amto": "amt", "Amurdag": "amg", "Ana Tinga Dogon": "dti", "Anaang": "anw", "Anakalangu": "akg", "Anal": "anm", "Anam": "pda", "Anambé": "aan", "Anamgura": "imi", "Anasi": "bpo", "Anauyá": "awd-ana", "Ancient Greek": "grc", "Ancient Ligurian": "xlg", "Ancient Macedonian": "xmk", "Ancient North Arabian": "xna", "Ancient Zapotec": "xzp", "Andai": "afd", "Andajin": "ajn", "Andalusian Arabic": "xaa", "अंडमान क्रियोल हिंदी": "hca", "Andaqui": "ana", "Andarum": "aod", "Andegerebinha": "adg", "Andh": "anr", "Andi": "ani", "Andio": "bzb", "Andjingith": "aus-and", "Andoa": "anb", "Andoque": "ano", "Andoquero": "sai-and", "Andra-Hus": "anx", "Aneityum": "aty", "Anem": "anz", "Aneme Wake": "aby", "Anfillo": "myo", "Angaataha": "agm", "Angaité": "aqt", "Angal": "age", "Angal Enen": "aoe", "Angal Heneng": "akh", "Angami": "njm", "Angevin": "roa-ang", "Angguruk Yali": "yli", "Angika": "anp", "Angkamuthi": "avm", "Angkola Batak": "akb", "Angkula": "aus-ang", "Angloromani": "rme", "Angolar": "aoa", "Angor": "agg", "Angoram": "aog", "Angosturas Tunebo": "tnd", "Anguthimri": "awg", "Ani Phowa": "ypn", "Anii": "blo", "Animere": "anf", "Anindilyakwa": "aoi", "Anjam": "boj", "Ankave": "aak", "Anmatyerre": "amx", "Annobonese": "fab", "Anong": "nun", "Anor": "anj", "Anserma": "ans", "Ansus": "and", "Antakarinya": "ant", "Antigua and Barbuda Creole English": "aig", "Antillean Creole": "gcf", "Anu": "anl", "Anuak": "anu", "Anufo": "cko", "Anuki": "aui", "Anus": "auq", "Anuta": "aud", "Anyi": "any", "Anyin Morofo": "mtb", "Ao": "njo", "Aoheng": "pni", "Aore": "aor", "Ap Ma": "kbx", "Apalachee": "xap", "Apalaí": "apy", "Apali": "ena", "Apasco-Apoala Mixtec": "mip", "Apatani": "apt", "Apiaká": "api", "Apinayé": "apn", "Apma": "app", "Apolista": "awd-apo", "Aproumu Aizi": "ahp", "Apurinã": "apu", "Aputai": "apx", "Aquitanian": "xaq", "Arabana": "ard", "Arabela": "arl", "Arabic": "ar", "Aragonese": "an", "Araki": "akr", "Arakwal": "rkw", "Aralle-Tabulahan": "atq", "Aramaic": "arc", "Arammba": "stk", "Aranadan": "aaf", "Aranama-Tamique": "xrt", "Arandai": "jbj", "Araona": "aro", "Arapaho": "arp", "Arapaso": "arj", "Arara-Karo": "arr", "Ararandewára": "xaj", "Arawak": "arw", "Araweté": "awt", "Arawum": "awm", "Arbore": "arv", "Archi": "aqc", "Ardhamagadhi Prakrit": "pka", "Are": "mwc", "Areba": "aea", "Arem": "aem", "Argentine Sign Language": "aed", "Argobba": "agj", "Arguni": "agf", "Arhuaco": "arh", "Arhâ": "aqr", "Arhö": "aok", "Ari": "aac", "Aribwatsa": "laz", "Aribwaung": "ylu", "Arifama-Miniafia": "aai", "Arigidi": "aqg", "Arikapú": "ark", "Arikara": "ari", "Arikem": "ait", "Arin": "xrn", "Aringa": "luc", "Armazic": "xrm", "Armenian": "hy", "Armenian Sign Language": "aen", "Aromanian": "rup", "Arop-Lokep": "apr", "Arop-Sissano": "aps", "Arosi": "aia", "Arritinngithigh": "rrt", "Arta": "atz", "Arua": "aru", "Aruamu": "msy", "Aruek": "aur", "Aruop": "lsr", "Arutani": "atx", "Aruá": "arx", "As": "asz", "Asaro'o": "mtv", "Ashe": "ahs", "Ashkun": "ask", "Asho Chin": "csh", "Ashokan Prakrit": "inc-ash", "Ashraaf": "cus-ash", "Asháninka": "cni", "Ashéninka Pajonal": "cjo", "Ashéninka Perené": "prq", "Asi": "bno", "Asilulu": "asl", "Askopan": "eiv", "Asoa": "asv", "असमिया": "as", "Assan": "xss", "Assangori": "sjg", "Assiniboine": "asb", "Assyrian Neo-Aramaic": "aii", "Asturian": "ast", "Asu": "aum", "Asue Awyu": "psa", "Asumboa": "aua", "Asunción Mixtepec Zapotec": "zoo", "Asuri": "asr", "Ata": "atm", "Ata Manobo": "atd", "Atakapa": "aqp", "Atampaya": "amz", "Atanques": "cba-ata", "Atatláhuca Mixtec": "mib", "Atayal": "tay", "Atemble": "ate", "Ateso": "teo", "Athpare": "aph", "Ati": "atk", "Atikamekw": "atj", "Atohwaim": "aqm", "Atong (Cameroon)": "ato", "Atong (India)": "aot", "Atorada": "aox", "Atsahuaca": "atc", "Atsam": "cch", "Atsugewi": "atw", "Attapady Kurumba": "pkr", "Attié": "ati", "Au": "avt", "Auhelawa": "kud", "Aukan": "djk", "Aulua": "aul", "Aurá": "aux", "Aushi": "auh", "Aushiri": "avs", "Auslan": "asf", "Austral": "aut", "Australian Aboriginal Sign Language": "asw", "Austrian Sign Language": "asq", "Austronesian Mari": "hob", "Auwe": "smf", "Auyana": "auy", "Auye": "auu", "Auyokawa": "auo", "Avar": "av", "Avatime": "avn", "Avau": "avb", "Avava": "tmb", "Avestan": "ae", "Avikam": "avi", "Avokaya": "avu", "Avá-Canoeiro": "avv", "Awa (China)": "vwa", "Awa (New Guinea)": "awb", "Awa-Cuaiquer": "kwi", "Awabakal": "awk", "Awadhi": "awa", "Awak": "awo", "Awar": "aya", "Awara": "awx", "Awbono": "awh", "Aweer": "bob", "Awera": "awr", "Awetí": "awe", "Awing": "azo", "Awjila": "auj", "Awngi": "awn", "Awngthim": "gwm", "Awtuw": "kmn", "Awu": "yiu", "Awun": "aww", "Awutu": "afu", "Awyi": "auw", "Axamb": "ahb", "Axi Yi": "yix", "Ayabadhu": "ayd", "Ayautla Mazatec": "vmy", "Ayere": "aye", "Ayerrerenge": "axe", "Ayi": "ayq", "Ayizi": "yyz", "Ayizo": "ayb", "Aymara": "ay", "Aynu": "aib", "Ayomán": "sai-ayo", "Ayoquesco Zapotec": "zaf", "Ayoreo": "ayo", "Ayu": "ayu", "Ayutla Mixtec": "miy", "Azerbaijani": "az", "Azha": "aza", "Azhe": "yiz", "Azoyú Me'phaa": "tpc", "Baa": "kwb", "Baagandji": "drl", "Baan": "bvj", "Baangi": "bqx", "Baatonum": "bba", "Baba": "bbw", "Baba Malay": "mbf", "Babango": "bbm", "Babanki": "bbk", "Babatana": "baa", "Babine-Witsuwit'en": "bcr", "Babole": "bvx", "Babungo": "bav", "Babuza": "bzg", "Bacama": "bcy", "Bacanese Malay": "btj", "Bactrian": "xbc", "Bada": "bhz", "Badaga": "bfq", "Badanchi": "bau", "Bade": "bde", "Badeshi": "bdz", "Badimaya": "bia", "Badui": "bac", "Badyara": "pbp", "Baeggu": "bvd", "Baekje": "pkc", "Baelelea": "bvc", "Baenan": "sai-bae", "Baetora": "btr", "Bafanji": "bfj", "Bafaw": "bwt", "Bafia": "ksf", "Bafut": "bfd", "Baga Kaloum": "bqf", "Baga Koga": "bgo", "Baga Manduri": "bmd", "Baga Pokur": "bcg", "Baga Sitemu": "bsp", "Baga Sobané": "bsv", "Bagheli": "bfy", "Bagirmi": "bmi", "Bago-Kusuntu": "bqg", "Bagri": "bgq", "Bagua": "sai-bag", "Bagupi": "bpi", "Bagusa": "bqb", "Bagvalal": "kva", "Baha": "yha", "Baham": "bdw", "Bahamian Creole": "bah", "Baharna Arabic": "abv", "Bahau": "bhv", "Bahinemo": "bjh", "Bahing": "bhj", "Bahnar": "bdq", "Bahonsuai": "bsu", "Bai": "bdj", "Baibai": "bbf", "Baikeno": "bkx", "Baima": "bqh", "Baimak": "bmx", "Bainouk-Gunyaamolo": "bcz", "Bainouk-Gunyuño": "bab", "Bainouk-Samik": "bcb", "Baiso": "bsw", "Baissa Fali": "fah", "Bajan": "bjs", "Bajelani": "bjm", "Baka": "bkc", "Bakairí": "bkq", "Bakaka": "bqz", "Bakhtiari": "bqi", "Baki": "bki", "Bakoko": "bkh", "Bakole": "kme", "Bakpinka": "bbs", "Bakulung": "bbu", "Bakumpai": "bkr", "Bakung": "xkl", "Bakwé": "bjw", "Balaesang": "bls", "Balangao": "blw", "Balangingi": "sse", "Balanta-Ganja": "bjt", "Balanta-Kentohe": "ble", "Balantak": "blz", "Balau": "blg", "Baldemu": "bdn", "Bali": "bcp", "Baliledo": "poz-bal", "Balinese": "ban", "Balinese Malay": "mhp", "Balkan Gagauz Turkish": "bgx", "Balkan Romani": "rmn", "Balo": "bqo", "Baloi": "biz", "Balong": "bnt-bal", "Balti": "bft", "Baltic Romani": "rml", "Baluan-Pam": "blq", "Baluchi": "bal", "Bamako Sign Language": "bog", "Bamali": "bbq", "Bambalang": "bmo", "Bambam": "ptu", "Bambara": "bm", "Bambassi": "myf", "Bambili-Bambui": "baw", "Bamenyam": "bce", "Bamu": "bcf", "Bamukumbit": "bqt", "Bamum": "bax", "Bamunka": "bvm", "Bamwe": "bmg", "Ban Khor Sign Language": "bfk", "Bana": "bcw", "Banam Bay": "vrt", "Banao Itneg": "bjx", "Banaro": "byz", "Banda": "bnd", "Banda Malay": "bpq", "Banda-Bambari": "liy", "Banda-Banda": "bpd", "Banda-Mbrès": "bqk", "Banda-Ndélé": "bfl", "Banda-Yangere": "yaj", "Bandi": "bza", "Bandial": "bqj", "Bandjalang": "bdy", "Bangala": "bxg", "Bangandu": "bgf", "Bangba": "bbe", "Banggai": "bgz", "Bangi": "bni", "Bangime": "dba", "Bangka": "mfb", "Bangolan": "bgj", "Bangubangu": "bnx", "Bangwinji": "bsj", "Baniva": "bvv", "Baniwa": "bwi", "Banjarese": "bjn", "Banka": "bxw", "Bankan Tey Dogon": "dbw", "Bankon": "abb", "Banoni": "bcm", "Bantawa": "bap", "Bantayanon": "bfx", "Bantik": "bnq", "Banyumasan": "map-bms", "Baoule": "bci", "Baraamu": "brd", "Barai": "bbb", "Barakai": "baj", "Baram Kayan": "kys", "Barama": "bbg", "Barambu": "brm", "Baramu": "bmz", "Barapasi": "brp", "Baras": "brs", "Barasana": "bsn", "Barbareño": "boi", "Barclayville Grebo": "gry", "Bardi": "bcj", "Barein": "bva", "Bargam": "mlp", "Bari": "bfa", "Bariai": "bch", "Bariji": "bjc", "Barikanchi": "bxo", "Barikewa": "jbk", "Barngarla": "bjb", "Barok": "bjk", "Barombi": "bbi", "Barranbinya": "aus-bra", "Barro Negro Tunebo": "tbn", "Barrow Point": "bpt", "Baruga": "bjz", "Barunggam": "aus-brm", "Baruya": "byr", "Barwe": "bwg", "Barzani Jewish Neo-Aramaic": "bjf", "Baré": "bae", "Barí": "mot", "Basa": "bzw", "Basa-Gumna": "bsl", "Basa-Gurmana": "buj", "Basaa": "bas", "Basap": "bdb", "Basay": "byq", "Bashkardi": "bsg", "Bashkir": "ba", "Basketo": "bst", "Basque": "eu", "Bassa": "bsq", "Bassa-Kontagora": "bsr", "Bassari": "bsc", "Bassossi": "bsi", "Bata": "bta", "Bataan Ayta": "ayt", "Batad Ifugao": "ifb", "Batanga": "bnm", "Batek": "btq", "Bateri": "btv", "Bathari": "bhm", "Bati (Cameroon)": "btc", "Bati (Indonesia)": "bvt", "Bats": "bbl", "Batu": "btu", "Batui": "zbt", "Batuley": "bay", "Bau": "bbd", "Bau Bidayuh": "sne", "Bauchi": "bsf", "Baure": "brg", "Bauria": "bge", "Bauro": "bxa", "Bauwaki": "bwk", "Bauzi": "bvz", "Bavarian": "bar", "Bawm Chin": "bgr", "Bay Miwok": "mkq", "Bayali": "bjy", "Baybayanon": "bvy", "Baygo": "byg", "Bayogoula": "nai-bay", "Bayono": "byl", "Bayot": "bda", "Bayungu": "bxj", "Bazigar": "bfr", "Baïnounk Gubëeher": "alv-bgu", "Beami": "beo", "Beaver": "bea", "Beba": "bfp", "Bebe": "bzv", "Bebele": "beb", "Bebeli": "bek", "Bebil": "bxp", "Bedik": "tnr", "Bedjond": "bjv", "Bedoanas": "bed", "Beeke": "bkf", "Beele": "bxq", "Beembe": "beq", "Beezen": "bnz", "Befang": "bby", "Begbere-Ejar": "bqv", "Beja": "bej", "Bekati'": "bei", "Bekwarra": "bkv", "Bekwel": "bkw", "Belait": "beg", "Belanda Bor": "bxb", "Belanda Viri": "bvi", "Belarusian": "be", "Belhariya": "byw", "Beli": "blm", "Belizean Creole": "bzj", "Bella Coola": "blc", "Bellari": "brw", "Bemba": "bem", "Bembe": "bmb", "Ben Tey": "dbt", "Bena": "yun", "Benabena": "bef", "Bench": "bcq", "Bende": "bdp", "Bendi": "bct", "Beneraf": "bnv", "Beng": "nhb", "Benga": "bng", "Bengali": "bn", "Benggoi": "bgy", "Bengkala Sign Language": "bqy", "Bentong": "bnu", "Benyadu'": "byd", "Beothuk": "bue", "Bepour": "bie", "Bera": "brf", "Berakou": "bxv", "Berau Malay": "bve", "Berawan": "lod", "Berbice Creole Dutch": "brc", "Bergish": "gmw-bgh", "Berik": "bkl", "Berinomo": "bit", "Berom": "bom", "Berta": "wti", "Berti": "byt", "Besisi": "mhe", "Besme": "bes", "Besoa": "bep", "Betaf": "bfe", "Betawi": "bew", "Bete": "byf", "Bete-Bendi": "btt", "Betoi": "sai-bet", "Betta Kurumba": "xub", "Bezhta": "kap", "Bhadrawahi": "bhd", "Bhalay": "bhx", "Bharia": "bha", "Bhatri": "bgw", "Bhattiyali": "bht", "Bhaya": "bhe", "Bhele": "bhy", "Bhilali": "bhi", "Bhili": "bhb", "भोजपुरी": "bho", "Bhoti Kinnauri": "nes", "Bhunjia": "bhu", "Biafada": "bif", "Biage": "bdf", "Biak": "bhw", "Biali": "beh", "Bian Marind": "bpv", "Biangai": "big", "Biao": "byk", "Biao Mon": "bmt", "Biao-Jiao Mien": "bje", "Biatah Bidayuh": "bth", "Bibaali": "bcn", "Bibbulman": "xbp", "Bidiyo": "bid", "Bidyara": "bym", "Bidyogo": "bjg", "Biem": "bmc", "Bierebo": "bnk", "Bieria": "brj", "Biete": "biu", "Big Nambas": "nmb", "Biga": "bhc", "Bigambal": "xbe", "Bih": "ibh", "बिहारी": "bh", "Bijori": "bix", "Bikaru": "bic", "Bikol Central": "bcl", "Bikya": "byb", "Bila": "bip", "Bilakura": "bql", "Bilaspuri": "kfs", "Bilba": "bpz", "Bilbil": "brz", "Bile": "bil", "Biliau": "bcu", "Biloxi": "bll", "Bilua": "blb", "Bilur": "bxf", "Bima": "bhp", "Bimin": "bhl", "Bimoba": "bim", "Bina": "bmn", "Binahari": "bxz", "Binandere": "bhg", "Binawa": "byj", "Bindal": "xbd", "Bine": "bon", "Binji": "bpj", "Binongan Itneg": "itb", "Bintauna": "bne", "Bintulu": "bny", "Binukid": "bkd", "Binumarien": "bjr", "Bipi": "biq", "Birao": "brr", "Birgid": "brk", "Birgit": "btf", "Birhor": "biy", "Biri": "bzr", "Biritai": "bqq", "Birri": "bvq", "Birrpayi": "xbj", "Birwa": "brl", "Biseni": "ije", "Bishnupriya Manipuri": "bpy", "Bishuo": "bwh", "Bisis": "bnw", "Bislama": "bi", "Bisorio": "bir", "Bissa": "bib", "Bisu": "bzi", "Bit": "bgk", "Bitare": "brt", "Bitur": "mcc", "Biwat": "bwm", "Biyo": "byo", "Biyom": "bpm", "Blablanga": "blp", "Black Speech": "art-bsp", "Blackfoot": "bla", "Blafe": "bfh", "Blagar": "beu", "Blang": "blr", "Blin": "byn", "Bo": "bgl", "Bo-Rukul": "mae", "Bo-Ung": "mux", "Boano (Maluku)": "bzn", "Boano (Sulawesi)": "bzl", "Bobongko": "bgb", "Bobot": "bty", "Bodo (Central Africa)": "boy", "Bodo (India)": "brx", "Bodo Gadaba": "gbj", "Bodo Parja": "bdv", "Bofi": "bff", "Boga": "bvw", "Bogaya": "boq", "Boghom": "bux", "Boguru": "bqu", "Bohtan Neo-Aramaic": "bhn", "Boikin": "bzf", "Bokar": "sit-bok", "Bokha": "ybk", "Boko": "bqc", "Bokobaru": "bus", "Bokoto": "bdt", "Bokyi": "bky", "Bola": "bnp", "Bolak": "art-blk", "Bolango": "bld", "Bole": "bol", "Bolgo": "bvo", "Bolia": "bli", "Bolinao": "smk", "Bolivian Sign Language": "bvl", "Boloki": "bkt", "Bolon": "bof", "Bolondo": "bzm", "Bolongan": "blj", "Bolyu": "ply", "Bom": "bmf", "Boma Nkuu": "bnt-bon", "Boma Yumu": "bnt-boy", "Bomboli": "bml", "Bomboma": "bws", "Bomitaba": "zmx", "Bomu": "bmq", "Bomwali": "bmw", "Bon Gula": "glc", "Bonan": "peh", "Bondei": "bou", "Bondo": "bfw", "Bondoukou Kulango": "kzc", "Bondum Dom Dogon": "dbu", "Bonerate": "bna", "Bonggi": "bdg", "Bonggo": "bpg", "Bongili": "bui", "Bongo": "bot", "Bongu": "bpu", "Bonjo": "bok", "Bonkeng": "bvg", "Bonkiman": "bop", "Bookan": "bnb", "Boon": "bnl", "Boor": "bvf", "Bora": "boa", "Border Kuna": "kvn", "Borei": "gai", "Boro": "xxb", "Borong": "ksr", "Boruca": "brn", "Borôro": "bor", "Boselewa": "bwf", "Bosngun": "bqs", "Bote-Majhi": "bmj", "Botlikh": "bph", "Botolan Sambal": "sbl", "Bouna Kulango": "nku", "Bourbonnais-Berrichon": "roa-bbn", "Bourguignon": "roa-brg", "Bouyei": "pcc", "Bozaba": "bzo", "Bragat": "aof", "Brahui": "brh", "Braj": "bra", "Brazilian Sign Language": "bzs", "Brek Karen": "kvl", "Brem": "buq", "Breri": "brq", "Breton": "br", "Bribri": "bzd", "British Sign Language": "bfi", "Brokkat": "bro", "Brokpake": "sgt", "Brokskat": "bkk", "Brooke's Point Palawano": "plw", "Broome Pearling Lugger Pidgin": "bpl", "Brunei Bisaya": "bsb", "Brunei Malay": "kxd", "Bruny Island": "xpz", "Bu": "jid", "Bu-Nao Bunu": "bwx", "Bua": "bub", "Bualkhaw Chin": "cbl", "Buamu": "box", "Bube": "bvb", "Bubi": "buw", "Bubia": "bbx", "Budeh Stieng": "stt", "Budibud": "btp", "Budong-Budong": "bdx", "Budu": "buu", "Budukh": "bdk", "Buduma": "bdm", "Budza": "bja", "Buena Vista Yokuts": "nai-bvy", "Bugan": "bbh", "Bughotu": "bgt", "Buginese": "bug", "Buglere": "sab", "Bugun": "bgg", "Buhi'non Bikol": "ubl", "Buhid": "bku", "Buhutu": "bxh", "Bujhyal": "byh", "Bukar-Sadung Bidayuh": "sdo", "Bukat": "bvk", "Bukawa": "buk", "Bukhari": "bhh", "Bukit Malay": "bvu", "Bukitan": "bkn", "Bukiyip": "ape", "Buksa": "tkb", "Bukusu": "bxk", "Bulgar": "xbo", "Bulgarian": "bg", "Bulgarian Sign Language": "bqn", "Bulgebi": "bmp", "Buli (Ghana)": "bwu", "Buli (Indonesia)": "bzq", "Bulo Stieng": "sti", "Bulu (Cameroon)": "bum", "Bulu (New Guinea)": "bjl", "Bum": "bmv", "Bumaji": "byp", "Bumang": "bvp", "Bumbita Arapesh": "aon", "Bumthangkha": "kjz", "Bun": "buv", "Buna": "bvn", "Bunaba": "bck", "Bunak": "bfn", "Bunama": "bdd", "Bundeli": "bns", "Bung": "bqd", "Bungain": "but", "Bunganditj": "xbg", "Bungku": "bkz", "Bungu": "wun", "Bunoge": "dgb", "Bunun": "bnn", "Buol": "blf", "Bura": "bwr", "Bura Mabang": "mde", "Burak": "bys", "Buraka": "bkg", "Burarra": "bvr", "Burate": "bti", "Burduna": "bxn", "Bure": "bvh", "Burgundian": "gem-bur", "Burji": "bji", "Burmese": "my", "Burmeso": "bzu", "Buru (Indonesia)": "mhs", "Buru (Nigeria)": "bqw", "Burui": "bry", "Burumakok": "aip", "Burun": "bdi", "Burunge": "bds", "Burushaski": "bsk", "Burusu": "bqr", "Buruwai": "asi", "Buryat": "bua", "Busa": "bqp", "Busam": "bxs", "Busami": "bsm", "Busang Kayan": "bfg", "Bushoong": "buf", "Buso": "bso", "Busoa": "bup", "Bussa": "dox", "Busuu": "bju", "Butbut Kalinga": "kyb", "Butchulla": "xby", "Butmas-Tur": "bnr", "Butuanon": "btw", "Buwal": "bhs", "Buyeo": "xpy", "Buyu": "byi", "Buyuan Jinuo": "jiy", "Bwa": "bww", "Bwaidoka": "bwd", "Bwala": "bnt-bwa", "Bwanabwana": "tte", "Bwatoo": "bwa", "Bwe Karen": "bwe", "Bwela": "bwl", "Bwile": "bwc", "Bwisi": "bwz", "Byangsi": "bee", "Byep": "mkk", "Bädi Kanum": "khd", "Caac": "msq", "Cabiyarí": "cbb", "Cabécar": "cjp", "Cacaloxtepec Mixtec": "miu", "Cacaopera": "ccr", "Cacgia Roglai": "roc", "Cacua": "cbv", "Cacán": "sai-cac", "Caddo": "cad", "Cafundó": "ccd", "Cahuarano": "cah", "Cahuilla": "chl", "Cajonos Zapotec": "zad", "Caka": "ckx", "Cakchiquel-Quiché Mixed Language": "ckz", "Cakfem-Mushere": "cky", "Calabrian Greek": "grk-cal", "Calamian Tagbanwa": "tbk", "Callawalla": "caw", "Calusa": "nai-cal", "Caluyanun": "clu", "Caló": "rmq", "Camarines Norte Agta": "abd", "Cameroon Mambila": "mcu", "Cameroon Pidgin": "wes", "Campalagian": "cml", "Camsá": "kbh", "Camtho": "cmt", "Camunic": "xcc", "Candoshi-Shapra": "cbu", "Canela": "ram", "Canichana": "caz", "Cantonese": "yue", "Cao Miao": "cov", "Caolan": "mlc", "Capanahua": "kaq", "Capiznon": "cps", "Cappadocian Greek": "cpg", "Caquinte": "cot", "Car Nicobarese": "caq", "Cara": "cfd", "Carabayo": "cby", "Caramanta": "crf", "Caranqui": "sai-caq", "Carapana": "cbc", "Carian": "xcr", "Cariay": "awd-kar", "Caribbean Hindustani": "hns", "Caribbean Javanese": "jvn", "Carijona": "cbd", "Carolina Algonquian": "crr", "Carolinian": "cal", "Carpathian Romani": "rmc", "Carrier": "crx", "Cashibo-Cacataibo": "cbr", "Cashinahua": "cbs", "Casiguran Dumagat Agta": "dgc", "Casuarina Coast Asmat": "asc", "Catacao": "sai-cat", "Catalan": "ca", "Catalan Sign Language": "csc", "Catawba": "chc", "Catuquinaru": "sai-ctq", "Catío Chibcha": "cba-cat", "Cauca": "cca", "Cavere": "awd-cav", "Cavineña": "cav", "Cayubaba": "cyb", "Cayuga": "cay", "Cayuse": "xcy", "Cazcan": "azc-caz", "Cañari": "sai-cnr", "Cebaara Senoufo": "sef", "Cebuano": "ceb", "Celtiberian": "xce", "Cemuhî": "cam", "Cen": "cen", "Central Asmat": "cns", "Central Atlas Tamazight": "tzm", "Central Awyu": "awu", "Central Bai": "bca", "Central Bontoc": "lbk", "Central Cagayan Agta": "agt", "Central Dusun": "dtp", "Central Franconian": "gmw-cfr", "Central Grebo": "grv", "Central Huasteca Nahuatl": "nch", "Central Huishui Hmong": "hmc", "Central Kurdish": "ckb", "Central Maewo": "mwo", "Central Mahuatlán Zapoteco": "zam", "Central Malay": "pse", "Central Masela": "mxz", "Central Mashan Hmong": "hmm", "Central Mazahua": "maz", "Central Melanau": "mel", "Central Mnong": "cmo", "Central Nahuatl": "nhn", "Central Nicobarese": "ncb", "Central Ojibwa": "ojc", "Central Palawano": "plc", "Central Pame": "pbs", "Central Pomo": "poo", "Central Puebla Nahuatl": "ncx", "Central Sama": "sml", "Central Siberian Yupik": "ess", "Central Sierra Miwok": "csm", "Central Subanen": "syb", "Central Tagbanwa": "tgt", "Central Tarahumara": "tar", "Central Teke": "nzu", "Central Tunebo": "tuf", "Centúúm": "cet", "Cerma": "cme", "Ch'olti'": "myn-chl", "Ch'orti'": "caa", "Chaap Wuurong": "tjw", "Chachi": "cbi", "Chadian Arabic": "shu", "Chadian Sign Language": "cds", "Chadong": "cdy", "Chagatai": "chg", "Chaha": "sem-cha", "Chaima": "ciy", "Chairel": "sit-cha", "Chak": "ckh", "Chakali": "cli", "Chakma": "ccp", "Chala": "cll", "Chaldean Neo-Aramaic": "cld", "Chali": "tgf", "Chamacoco": "ceg", "Chamalal": "cji", "Chamba Daka": "ccg", "Chamba Leko": "ndi", "Chambeali": "cdh", "Chambri": "can", "Chamicuro": "ccc", "Chamling": "rab", "Chamorro": "ch", "Champenois": "roa-cha", "Chang": "nbc", "Changriwa": "cga", "Changthang": "cna", "Chantyal": "chx", "Chaná": "sai-chn", "Chané": "caj", "Chapacura": "sai-chp", "Chara": "cra", "Charrua": "sai-chr", "Chaudangsi": "cdn", "Chaura": "crv", "Chavacano": "cbk", "Chayahuita": "cbt", "Chayuco Mixtec": "mih", "Chazumba Mixtec": "xtb", "Che": "ruk", "Chechen": "ce", "Cheke Holo": "mrn", "Chemakum": "xch", "Chenapian": "cjn", "Chenchu": "cde", "Chenoua": "cnu", "Chepang": "cdm", "Chepya": "ycp", "Cherepon": "cpn", "Cherokee": "chr", "Chesu": "ych", "Chetco-Tolowa": "ctc", "Chewong": "cwg", "Cheyenne": "chy", "Chhattisgarhi": "hne", "Chhintange": "ctn", "Chhulung": "cur", "Chiangmai Sign Language": "csd", "Chiapanec": "cip", "Chibcha": "chb", "Chicahuaxtla Triqui": "trs", "Chichewa": "ny", "Chichicapan Zapotec": "zpv", "Chichimeca-Jonaz": "pei", "Chichonyi-Chidzihana-Chikauma": "coh", "Chickasaw": "cic", "Chicomuceltec": "cob", "Chiduruma": "dug", "Chigmecatitlán Mixtec": "mii", "Chilcotin": "clc", "Chilean Sign Language": "csg", "Chilisso": "clh", "Chiltepec Chinantec": "csa", "Chimalapa Zoque": "zoh", "Chimariko": "cid", "Chimila": "cbg", "Chimwiini": "bnt-cmw", "Chinali": "cih", "Chinbon Chin": "cnb", "Chinese": "zh", "Chinese Pidgin English": "cpi", "Chinese Sign Language": "csl", "Chinook": "chh", "Chinook Jargon": "chn", "Chipaya": "cap", "Chipewyan": "chp", "Chiquihuitlán Mazatec": "maq", "Chiquimulilla": "nai-chi", "Chiquitano": "cax", "Chiricahua": "apm", "Chirino": "sai-chi", "Chiripá": "nhd", "Chiru": "cdf", "Chitimacha": "ctm", "Chitkuli Kinnauri": "cik", "Chittagonian": "ctg", "Chitwania Tharu": "the", "Chiwere": "iow", "Choapan Zapotec": "zpc", "Chocangaca": "cgk", "Chochotec": "coz", "Choctaw": "cho", "Chodri": "cdi", "Chokri Naga": "nri", "Chokwe": "cjk", "Chol": "ctu", "Cholón": "cht", "Chong": "cog", "Choni": "cda", "Chono": "sai-cno", "Chopi": "cce", "Chothe Naga": "nct", "Chrau": "crw", "Chru": "cje", "Chuabo": "chw", "Chuanqiandian Cluster Miao": "cqd", "Chuave": "cjv", "Chug": "cvg", "Chuj": "cac", "Chuka": "cuh", "Chukchi": "ckt", "Chukwa": "cuw", "Chulym": "clw", "Chumburung": "ncu", "Churahi": "cdj", "Churuya": "sai-chu", "Chut": "scb", "Chuukese": "chk", "Chuvan": "xcv", "Chuvash": "cv", "Chácobo": "cao", "Ci Gbe": "cib", "Cia-Cia": "cia", "Cibak": "ckl", "Cicipu": "awc", "Ciguayo": "nai-cig", "Cimbrian": "cim", "Cinamiguin Manobo": "mkx", "Cinda-Regi-Tiyal": "cdr", "Cineni": "cie", "Cinta Larga": "cin", "Cishingini": "asg", "Citak": "txt", "Ciwogai": "tgd", "Classical Guaraní": "gn-cls", "Classical Mandaic": "myz", "Classical Mongolian": "cmg", "Classical Nahuatl": "nci", "Classical Newar": "nwc", "Classical Quechua": "qwc", "Classical Syriac": "syc", "Classical Tibetan": "xct", "Coahuilteco": "xcw", "Coast Miwok": "csi", "Coastal Kadazan": "kzj", "Coastal Konjo": "kjc", "Coatecas Altas Zapotec": "zca", "Coatepec Nahuatl": "naz", "Coatlán Mixe": "mco", "Coatlán Zapotec": "zps", "Coatzospan Mixtec": "miz", "Cocama": "cod", "Cochimi": "coj", "Cocopa": "coc", "Cocos Islands Malay": "coa", "Coeruna": "sai-coe", "Coeur d'Alene": "crd", "Cofán": "con", "Cogui": "kog", "Col": "liw", "Colombian Sign Language": "csn", "Colonia Tovar German": "gct", "Columbia-Wenatchi": "col", "Colán": "sai-col", "Comaltepec Chinantec": "cco", "Comanche": "com", "Comechingon": "sai-cmg", "Comecrudo": "xcm", "Communicationssprache": "art-com", "Como Karim": "cfg", "Comox": "coo", "Con": "cno", "Coos": "csz", "Copainalá Zoque": "zoc", "Copala Triqui": "trc", "Copallén": "sai-cop", "Coptic": "cop", "Coquille": "coq", "Cora": "crn", "Cori": "cry", "Cornish": "kw", "Coroado Puri": "sai-crd", "Corsican": "co", "Cosoleacaque Nahuatl": "nhk", "Costa Rican Sign Language": "csr", "Cotabato Manobo": "mta", "Cotoname": "xcn", "Cowlitz": "cow", "Coyaima": "coy", "Coyotepec Popoloca": "pbf", "Coyutla Totonac": "toc", "Cree": "cr", "Creek": "mus", "Crimean Gothic": "gme-cgo", "Crimean Tatar": "crh", "Croatian Sign Language": "csq", "Cross River Mbembe": "mfn", "Crow": "cro", "Cruzeño": "crz", "Cua": "cua", "Cuban Sign Language": "csf", "Cubeo": "cub", "Cueva": "sai-cva", "Cuiba": "cui", "Cuitlatec": "cuy", "Culina": "cul", "Culli": "sai-cul", "Cumanagoto": "cuo", "Cumbric": "xcb", "Cun": "cuq", "Cung": "cug", "Cupeño": "cup", "Curonian": "xcu", "Curripaco": "kpc", "Cutchi-Swahili": "ccl", "Cuvok": "cuv", "Cuyamecalco Mixtec": "xtu", "Cuyunon": "cyo", "Cwi Bwamu": "bwy", "Cypriot Arabic": "acy", "Czech": "cs", "Czech Sign Language": "cse", "Côông": "cnc", "Da'a Kaili": "kzf", "Daai Chin": "dao", "Daantanai'": "lni", "Daasanach": "dsh", "Daba": "dbq", "Dabarre": "dbr", "Dabe": "dbe", "Dacian": "xdc", "Dadanitic": "sem-dad", "Dadi Dadi": "dda", "Dadibi": "mps", "Dadiya": "dbd", "Daga": "dgz", "Dagaari Dioula": "dgd", "Dagba": "dgk", "Dagbani": "dag", "Dagik": "dec", "Dagoman": "dgn", "Dahalik": "dlk", "Dahalo": "dal", "Daho-Doo": "das", "Dai": "dij", "Dair": "drb", "Dairi Batak": "btd", "Dakaka": "bpa", "Dakka": "dkk", "Dakota": "dak", "Dakpa": "dka", "Dalmatian": "dlm", "Daloa Bété": "bev", "Dama (Nigeria)": "dmm", "Dama (Sierra Leone)": "dmn-dam", "Damakawa": "dam", "Damal": "uhn", "Dambi": "dac", "Dameli": "dml", "Dampelas": "dms", "Dan": "dnj", "Danaru": "dnr", "Danau": "dnu", "Dandami Maria": "daq", "Dangaléat": "daa", "Dangaura Tharu": "thl", "Danish": "da", "Danish Sign Language": "dsl", "Dano": "aso", "Danu": "dnv", "Danuwar": "dhw", "Dao": "daz", "Daonda": "dnd", "Dar Daju Daju": "djc", "Dar Fur Daju": "daj", "Dar Sila Daju": "dau", "Darai": "dry", "Dargwa": "dar", "Darkinjung": "xda", "Darlong": "dln", "Darmiya": "drd", "Daro-Matu Melanau": "dro", "Darumbal": "xgm", "Dass": "dot", "Datooga": "tcc", "Daungwurrung": "dgw", "Daur": "dta", "Davawenyo": "daw", "Dawawa": "dww", "Dawera-Daweloor": "ddw", "Dawro": "dwr", "Day": "dai", "Dayi": "dax", "Dazaga": "dzg", "Deccani": "dcc", "Dedua": "ded", "Defaka": "afn", "Defi Gbe": "gbh", "Deg": "mzw", "Deg Xinag": "ing", "Degema": "deg", "Degenan": "dge", "Dehwari": "deh", "Dek": "dek", "Dela-Oenale": "row", "Delo": "ntr", "Delta Yokuts": "nai-dly", "Dem": "dem", "Dema": "dmx", "Demisa": "dei", "Demotic": "egx-dem", "Demta": "dmy", "Dena'ina": "tfn", "Dendi": "ddn", "Dengese": "dez", "Dengka": "dnk", "Deno": "dbb", "Denya": "anv", "Dení": "dny", "Deori": "der", "Desano": "des", "Desiya": "dso", "Dewas Rai": "dwz", "Dewoin": "dee", "Dezfuli": "def", "Dghwede": "dgh", "Dhaiso": "dhs", "Dhalandji": "dhl", "Dhangu": "dhg", "Dhanki": "dhn", "Dhao": "nfa", "Dharug": "xdk", "Dhatki": "mki", "Dhimal": "dhi", "Dhivehi": "dv", "Dhodia": "dho", "Dhofari Arabic": "adf", "Dhudhuroa": "ddr", "Dhungaloo": "dhx", "Dhurga": "dhu", "Dhuwal": "dwu", "Dhuwaya": "dwy", "Dia": "dia", "Dibabawon Manobo": "mbd", "Dibiyaso": "dby", "Dibo": "dio", "Dicamay Agta": "duy", "Didinga": "did", "Dieri": "dif", "Digo": "dig", "Dii": "dur", "Dijim-Bwilim": "cfa", "Dilling": "dil", "Dima": "jma", "Dimasa": "dis", "Dimbong": "dii", "Dime": "dim", "Dinapigue Agta": "phi-din", "Dineor": "mrx", "Ding": "diz", "Dinka": "din", "Diodio": "ddi", "Dirasha": "gdl", "Diri": "dwa", "Dirim": "dir", "Disa": "dsi", "Ditammari": "tbz", "Ditidaht": "dtd", "Diuwe": "diy", "Diuxi-Tilantongo Mixtec": "xtd", "Dixon Reef": "dix", "Dizin": "mdx", "Djadjawurrung": "dja", "Djambarrpuyngu": "djr", "Djangun": "djf", "Djauan": "djn", "Djawi": "djw", "Djimini": "dyi", "Djinang": "dji", "Djinba": "djb", "Djiwarli": "djl", "Dobel": "kvo", "Dobu": "dob", "Doe": "doe", "Doga": "dgg", "Doghoro": "dgx", "Dogoso": "dgs", "Dogosé": "dos", "Dogri": "doi", "Dogrib": "dgr", "Dogul Dom": "dbg", "Doka": "dbi", "Doko-Uyanga": "uya", "Dolgan": "dlg", "Dom": "doa", "Domaaki": "dmk", "Domari": "rmt", "Dominican Sign Language": "doq", "Dompo": "doy", "Domu": "dof", "Domung": "dev", "Dondo": "dok", "Dong": "doh", "Dongo": "doo", "Dongolawi": "kzh", "Dongotono": "ddd", "Dongshanba Lalo": "yik", "Dongxiang": "sce", "Donno So Dogon": "dds", "Doondo": "dde", "Dorasque": "cba-dor", "Dori'o": "dor", "Dorig": "wwo", "Doromu-Koki": "kqc", "Dorze": "doz", "Doso": "dol", "Doteli": "dty", "Dothraki": "art-dtk", "Doura": "don", "Doutai": "tds", "Doyayo": "dow", "Drehu": "dhv", "Drung": "duu", "Duala": "dua", "Duano": "dup", "Duau": "dva", "Dubli": "dub", "Dubu": "dmu", "Dugun": "ndu", "Duguri": "dbm", "Dugwor": "dme", "Duhwa": "kbz", "Duit": "cba-dui", "Duke": "nke", "Dukhan": "trk-dkh", "Dulbu": "dbo", "Duli": "duz", "Duma": "dma", "Dumaitic": "sem-dum", "Dumbea": "duf", "Dumi": "dus", "Dumpas": "dmv", "Dumun": "dui", "Duna": "duc", "Dungan": "dng", "Dungmali": "raa", "Dungra Bhil": "duh", "Dungu": "dbv", "Dupaningan Agta": "duo", "Dura": "drq", "Duri": "mvp", "Duriankere": "dbn", "Duruwa": "pci", "Dusner": "dsn", "Dusun Deyah": "dun", "Dusun Malang": "duq", "Dusun Witu": "duw", "Dutch": "nl", "Dutch Low Saxon": "nds-nl", "Dutch Sign Language": "dse", "Duun": "dux", "Duupa": "dae", "Duvle": "duv", "Duwai": "dbp", "Duwet": "gve", "Dwang": "nnu", "Dyaabugay": "dyy", "Dyaberdyaber": "dyb", "Dyan": "dya", "Dyangadi": "dyn", "Dyirbal": "dbl", "Dyugun": "dyd", "Dyula": "dyu", "Dza": "jen", "Dzala": "dzl", "Dzando": "dzn", "Dzao Min": "bpn", "Dzodinka": "add", "Dzongkha": "dz", "Dzuun": "dnn", "Dâw": "kwa", "E": "eee", "E'ma Buyang": "yzg", "प्रारंभिक असमिया": "inc-oas", "Early Modern Korean": "ko-ear", "Early Tripuri": "xtr", "East Central German": "gmw-ecg", "East Damar": "dmr", "East Franconian": "vmf", "East Futuna": "fud", "East Kewa": "kjs", "East Limba": "lma", "East Makian": "mky", "East Masela": "vme", "East Nyala": "nle", "East Tarangan": "tre", "East Yugur": "yuy", "Eastern Acipa": "acp", "Eastern Arrernte": "aer", "Eastern Bolivian Guaraní": "gui", "Eastern Bontoc": "ebk", "Eastern Bru": "bru", "Eastern Canadian Inuktitut": "ike", "Eastern Cham": "cjm", "Eastern Durango Nahuatl": "azd", "Eastern Gorkha Tamang": "tge", "Eastern Gurung": "ggn", "Eastern Highland Chatino": "cly", "Eastern Highland Otomi": "otm", "Eastern Huasteca Nahuatl": "nhe", "Eastern Huishui Hmong": "hme", "Eastern Karaboro": "xrb", "Eastern Katu": "ktv", "Eastern Kayah": "eky", "Eastern Keres": "kee", "Eastern Krahn": "kqo", "Eastern Lalu": "yit", "Eastern Lawa": "lwl", "Eastern Magar": "mgp", "Eastern Maninkakan": "emk", "Eastern Mari": "mhr", "Eastern Meohang": "emg", "Eastern Mnong": "mng", "Eastern Muria": "emu", "Eastern Ngad'a": "nea", "Eastern Nisu": "nos", "Eastern Ojibwa": "ojg", "Eastern Parbate Kham": "kif", "Eastern Penan": "pez", "Eastern Pomo": "peb", "Eastern Pwo": "kjp", "Eastern Qiandong Miao": "hmq", "Eastern Tamang": "taj", "Eastern Tawbuid": "bnj", "Eastern Xiangxi Miao": "muq", "Eastern Xwla Gbe": "gbx", "Ebira": "igb", "Eblaite": "xeb", "Ebrié": "ebr", "Ebughu": "ebg", "Ecuadorian Sign Language": "ecs", "Ede Cabe": "cbj", "Ede Ica": "ica", "Ede Idaca": "idd", "Ede Ije": "ijj", "Ede Nago": "nqg", "Edera Awyu": "awy", "Edo": "bin", "Edolo": "etr", "Edomite": "xdm", "Edopi": "dbf", "Efai": "efa", "Efe": "efe", "Efik": "efi", "Efutop": "ofu", "Ega": "ega", "Eggon": "ego", "Egyptian": "egy", "Egyptian Arabic": "arz", "Egyptian Sign Language": "esl", "Ehueun": "ehu", "Eipomek": "eip", "Eitiep": "eit", "Ejagham": "etu", "Ejamat": "eja", "Ekajuk": "eka", "Ekari": "ekg", "Ekele": "khy", "Eki": "eki", "Ekit": "eke", "Ekpeye": "ekp", "El Alto Zapotec": "zpp", "El Hugeirat": "elh", "El Molo": "elo", "Elamite": "elx", "Eleme": "elm", "Elepi": "ele", "Elfdalian": "ovd", "Elip": "ekm", "Elkei": "elk", "Eloi": "art-elo", "Elotepec Zapotec": "zte", "Eloyi": "afo", "Elseng": "mrf", "Elu": "elu", "Elymian": "xly", "Emae": "mmw", "Emai": "ema", "Eman": "emn", "Embaloh": "emb", "Emberá-Baudó": "bdc", "Emberá-Catío": "cto", "Emberá-Chamí": "cmi", "Emberá-Tadó": "tdc", "Embu": "ebu", "Emem": "enr", "Emerillon": "eme", "Emilian": "egl", "Emplawas": "emw", "En": "enc", "Enawené-Nawé": "unk", "Ende": "end", "Enga": "enq", "Engenni": "enn", "Enggano": "eno", "English": "en", "Enlhet": "enl", "Enrekang": "ptt", "Enu": "enu", "Enwan": "env", "Enwang": "enw", "Enxet": "enx", "Enya": "gey", "Eotile": "eot", "Epena": "sja", "Epi-Olmec": "xep", "Epie": "epi", "Epigraphic Mayan": "emy", "Eravallan": "era", "Erave": "kjy", "Ere": "twp", "Erie": "iro-ere", "Eritai": "ert", "Erokwanas": "erw", "Erre": "err", "Erromintxela": "emx", "Ersu": "ers", "Eruwa": "erh", "Erzya": "myv", "Esan": "ish", "Ese": "mcq", "Ese Ejja": "ese", "Eshtehardi": "esh", "Esimbi": "ags", "Eskayan": "esy", "Esmeralda": "sai-esm", "Esperanto": "eo", "Esselen": "esq", "Estado de México Otomi": "ots", "Estonian": "et", "Estonian Sign Language": "eso", "Esuma": "esm", "Etchemin": "etc", "Etebi": "etb", "Eten": "etx", "Eteocretan": "ecr", "Eteocypriot": "ecy", "Ethiopian Sign Language": "eth", "Etkywan": "ich", "Eton (Cameroon)": "eto", "Eton (Vanuatu)": "etn", "Etruscan": "ett", "Etulo": "utr", "Evant": "bzz", "Even": "eve", "Evenki": "evn", "Ewage-Notu": "nou", "Ewarhuyana": "sai-ewa", "Ewe": "ee", "Ewondo": "ewo", "Extremaduran": "ext", "Eyak": "eya", "Ezaa": "eza", "Fagani": "faf", "Faire Atta": "azt", "Faita": "faj", "Faiwol": "fai", "Fakkanci": "gel", "Fala": "fax", "Falam Chin": "cfm", "Fali": "fli", "Faliscan": "xfa", "Fam": "fam", "Fanagalo": "fng", "Fanamaket": "bjp", "Fang (Bantu)": "fan", "Fang (Beboid)": "fak", "Fania": "fni", "Far Western Muria": "fmu", "Farefare": "gur", "Faroese": "fo", "Fas": "fqs", "Fasu": "faa", "Fataleka": "far", "Fataluku": "ddg", "Fayu": "fau", "Fe'fe'": "fmp", "Fedan": "pdn", "Fembe": "agl", "Fer": "kah", "Feroge": "fer", "फिजी हिंदी": "hif", "Fijian": "fj", "Filomena Mata-Coahuitlán Totonac": "tlp", "Finisterre Yau": "yuw", "Finnish": "fi", "Finnish Sign Language": "fse", "Finnish-Swedish Sign Language": "fss", "Finongan": "fag", "Fipa": "fip", "Firan": "fir", "Fiwaga": "fiw", "Flemish Sign Language": "vgt", "Flinders Island": "fln", "Foau": "flh", "Fogaha": "ber-fog", "Foi": "foi", "Foia Foia": "ffi", "Folopa": "ppo", "Foma": "fom", "Fon": "fon", "Fongoro": "fgr", "Foodo": "fod", "Forak": "frq", "Fordata": "frd", "Fore": "for", "Forest Enets": "enf", "Forest Nenets": "syd-fne", "Fortsenal": "frt", "Fox": "sac", "Franc-Comtois": "roa-fcm", "Francisco León Zoque": "zos", "Franco-Provençal": "frp", "French": "fr", "French Belgian Sign Language": "sfb", "French Sign Language": "fsl", "Friulian": "fur", "Fula": "ff", "Fuliiru": "flr", "Fulniô": "fun", "Fum": "fum", "Fungwa": "ula", "Fur": "fvr", "Furu": "fuu", "Futuna-Aniwa": "fut", "Fuyug": "fuy", "Fwe": "fwe", "Fwâi": "fwa", "Fyam": "pym", "Fyer": "fie", "Ga": "gaa", "Ga'anda": "gqa", "Ga'dang": "gdg", "Gaa": "ttb", "Gaam": "tbi", "Gabadi": "kbt", "Gabi": "gbw", "Gabri": "gab", "Gabrielino-Fernandeño": "xgf", "Gadang": "gdk", "Gaddang": "gad", "Gaddi": "gbk", "Gade": "ged", "Gadjerawang": "gdh", "Gadsup": "gaj", "Gafat": "gft", "Gagadu": "gbu", "Gagauz": "gag", "Gagnoa Bété": "btg", "Gahri": "bfu", "Gaikundi": "gbf", "Gaina": "gcn", "Gal": "gap", "Galambu": "glo", "Galatian": "xga", "Galela": "gbi", "Galeya": "gar", "Galibi Carib": "car", "Galice": "gce", "Galician": "gl", "Galindan": "xgl", "Gallaecian": "cel-gal", "Gallo": "roa-gal", "Gallurese": "sdn", "Galo": "adl", "Galoli": "gal", "Gamale Kham": "kgj", "Gambera": "gma", "Gamela": "sai-gam", "Gamilaraay": "kld", "Gamit": "gbl", "Gamkonora": "gak", "Gamo": "gmv", "Gamo-Ningi": "bte", "Gan": "gan", "Gana": "gnq", "Ganang": "gne", "Gandhari": "pgd", "Gane": "gzn", "Ganggalida": "gcd", "Ganglau": "ggl", "Gangte": "gnb", "Gangulu": "gnl", "Gants": "gao", "Ganza": "gza", "Ganzi": "gnz", "Gao": "gga", "Gapapaiwa": "pwg", "Garawa": "wrk", "Garhwali": "gbm", "Garifuna": "cab", "Garingbal": "xgi", "Garo": "grt", "Garre": "gex", "Garus": "gyb", "Garza": "xgr", "Gashowu": "nai-gsy", "Gata'": "gaq", "Gaulish": "cel-gau", "Gavak": "dmc", "Gavar": "gou", "Gavião do Jiparaná": "gvo", "Gawar-Bati": "gwt", "Gawwada": "gwd", "Gayil": "gyl", "Gayo": "gay", "Gayón": "sai-gay", "Gbagyi": "gbr", "Gban": "ggu", "Gbanu": "gbv", "Gbanziri": "gbg", "Gbari": "gby", "Gbaya": "gba", "Gbaya-Bossangoa": "gbp", "Gbaya-Bozoum": "gbq", "Gbaya-Mbodomo": "gmm", "Gbayi": "gyg", "Gbesi Gbe": "gbs", "Gbii": "ggb", "Gbin": "xgb", "Gbiri-Niragu": "grh", "Gboloo Grebo": "gec", "Gciriku": "diu", "Gcwi": "gwj", "Ge": "hmj", "Ge'ez": "gez", "Geba Karen": "kvq", "Gebe": "gei", "Gedaged": "gdd", "Gedeo": "drs", "Geji": "gji", "Geko Karen": "ghk", "Gela": "nlg", "Gelao": "gio", "Gele'": "sbc", "Geme": "geq", "Gen": "gej", "Gende": "gaf", "Gengle": "geg", "Georgian": "ka", "Gepo": "ygp", "Gera": "gew", "Gerka": "gek", "German": "de", "German Low German": "nds-de", "German Sign Language": "gsg", "Geruma": "gea", "Geser-Gorom": "ges", "Gey": "guv", "Ghadames": "gha", "Ghanaian Sign Language": "gse", "Ghandruk Sign Language": "gds", "Ghanongga": "ghn", "Ghari": "gri", "Ghayavi": "bmk", "Ghera": "ghr", "Ghomala'": "bbj", "Ghomara": "gho", "Ghotuo": "aaa", "Ghulfan": "ghl", "Giangan": "bgi", "Gibanawa": "gib", "Gidar": "gid", "Gikyode": "acd", "Gilaki": "glk", "Gilbertese": "gil", "Gilima": "gix", "Gimi (Austronesian)": "gip", "Gimi (Goroka)": "gim", "Gimme": "kmp", "Gimnime": "gmn", "Ginuman": "gnm", "Girawa": "bbr", "Girirra": "gii", "Giryama": "nyf", "Githabul": "gih", "Gitua": "ggt", "Gitxsan": "git", "Giyug": "giy", "Gizrra": "tof", "Glaro-Twabo": "glr", "Glavda": "glw", "Glio-Oubi": "oub", "Glosa": "igs", "Gnau": "gnu", "Goa'uld": "art-gld", "Goaria": "gig", "Gobasi": "goi", "Gobu": "gox", "Godié": "god", "Godoberi": "gdo", "Godwari": "gdx", "Goemai": "ank", "Gofa": "gof", "Gogo": "gog", "Gogodala": "ggw", "Goguryeo": "zkg", "Gojri": "gju", "Gokana": "gkn", "Gokhy": "sit-gkh", "Gola": "gol", "Golin": "gvf", "Golpa": "lja", "Gondi": "gon", "Gone Dau": "goo", "Gong": "ugo", "Gongduk": "goe", "Gonja": "gjn", "Goo": "gov", "Gooniyandi": "gni", "Gor": "gqr", "Gorakor": "goc", "Gorap": "goq", "Goreng": "xgg", "Gorontalo": "gor", "Gorovu": "grq", "Gorowa": "gow", "Gothic": "got", "Gottscheerish": "gmw-gts", "Goundo": "goy", "Gourmanchéma": "gux", "Gowlan": "goj", "Gowro": "gwf", "Gozarkhani": "goz", "Grangali": "nli", "Grass Koiari": "kbk", "Grebo": "grb", "Greek": "el", "Greek Sign Language": "gss", "Green Gelao": "giq", "Green Hmong": "hnj", "Greenlandic": "kl", "Grenadian Creole English": "gcl", "Gresi": "grs", "Groma": "gro", "Gros Ventre": "ats", "Gua": "gwx", "Guahibo": "guh", "Guajajára": "gub", "Guajá": "gvj", "Guambiano": "gum", "Guamo": "sai-gmo", "Guanano": "gvc", "Guanche": "gnc", "Guaraní": "gn", "Guarayu": "gyr", "Guatemalan Sign Language": "gsm", "Guató": "gta", "Guayabero": "guo", "Guazacapán": "nai-guz", "Gudang": "xgd", "Gudanji": "nji", "Gude": "gde", "Gudu": "gdu", "Guduf-Gava": "gdf", "Guerrero Amuzgo": "amu", "Guerrero Nahuatl": "ngu", "Guevea de Humboldt Zapotec": "zpg", "Gugadj": "ggd", "Gugu Badhun": "gdc", "Gugu Warra": "wrw", "Guhu-Samane": "ghs", "Guianese Creole": "gcr", "Guiberoua Bété": "bet", "Guinau": "awd-gnu", "Guinea Kpelle": "gkp", "Guinea-Bissau Creole": "pov", "Guinea-Bissau Sign Language": "lgs", "Guinean Sign Language": "gus", "Guiqiong": "gqi", "Gujarati": "gu", "Gula": "glu", "Gula'alaa": "gmb", "Gulay": "gvl", "Gule": "gly", "Gulf Arabic": "afb", "Gullah": "gul", "Gumalu": "gmu", "Gumatj": "gnn", "Gumawana": "gvs", "Gumuz": "guk", "Gun": "guw", "Gundi": "gdi", "Gunditjmara": "gjm", "Gundungurra": "xrd", "Gungabula": "gyf", "Gungu": "rub", "Guntai": "gnt", "Gunu": "yas", "Gunwinggu": "gup", "Gunya": "gyy", "Gupa-Abawa": "gpa", "Gupapuyngu": "guf", "Gur Lama": "las", "Guragone": "gge", "Guramalum": "grz", "Gurani": "hac", "Gureng Gureng": "gnr", "Gurgula": "ggg", "Guriaso": "grx", "Gurindji": "gue", "Gurjar Apabhramsa": "inc-gup", "Gurmana": "gvm", "Guro": "goa", "Guruntum": "grd", "Gusan": "gsn", "Gusii": "guz", "Gusilay": "gsl", "Gutnish": "gmq-gut", "Guugu Yimidhirr": "kky", "Guwa": "xgw", "Guwamu": "gwu", "Guwar": "aus-guw", "Guya": "gka", "Guyanese Creole English": "gyn", "Guyani": "gvy", "Guébie": "gie", "Gvoko": "ngs", "Gwa": "gwb", "Gwahatike": "dah", "Gwak": "jgk", "Gwamhi-Wuri": "bga", "Gwandara": "gwn", "Gwara": "alv-gwa", "Gweda": "grw", "Gweno": "gwe", "Gwere": "gwr", "Gwich'in": "gwi", "Gyalsumdo": "gyo", "Gyele": "gyi", "Gyem": "gye", "Güenoa": "sai-gue", "Habu": "hbu", "Hadiyya": "hdy", "Hadothi": "hoj", "Hadrami": "xhd", "Hadza": "hts", "Haeke": "aek", "Hahon": "hah", "Haida": "hai", "Haigwai": "hgw", "Hainyaxo Bozo": "bzx", "Haiphong Sign Language": "haf", "Haisla": "has", "Haitian Creole": "ht", "Haitian Vodoun Culture Language": "hvc", "Haiǁom": "hgm", "Haji": "hji", "Hajong": "haj", "Hakka": "hak", "Hakö": "hao", "Halang": "hal", "Halang Doan": "hld", "Halbi": "hlb", "Halia": "hla", "Halkomelem": "hur", "Hamap": "hmu", "Hamba": "hba", "Hamer-Banna": "amf", "Hamtai": "hmt", "Hanga": "hag", "Hanga Hundi": "wos", "Hani": "hni", "Hanoi Sign Language": "hab", "Hanunoo": "hnn", "Harami": "xha", "Harari": "har", "Haraza": "nub-har", "Harijan Kinnauri": "kjo", "Haroi": "hro", "Harsusi": "hss", "Haruai": "tmd", "Haruku": "hrk", "Haryanvi": "bgc", "Harzani": "hrz", "Hasaitic": "sem-has", "Hasha": "ybj", "Hassaniya": "mey", "Hatam": "had", "Hattic": "xht", "Hausa": "ha", "Hausa Sign Language": "hsl", "Haush": "sai-hau", "Havasupai-Walapai-Yavapai": "yuf", "Haveke": "hvk", "Havu": "hav", "Hawai'i Pidgin Sign Language": "hps", "Hawaiian": "haw", "Hawaiian Creole": "hwc", "Haya": "hay", "Hazaragi": "haz", "Hdi": "xed", "Hebrew": "he", "Hehe": "heh", "Heiban": "hbn", "Heiltsuk": "hei", "Helong": "heg", "Helu": "elu-prk", "Hema": "nix", "Hemba": "hem", "Herdé": "hed", "Herero": "hz", "Hermit": "llf", "Hernican": "xhr", "Hewa": "ham", "Heyo": "auk", "Hibito": "hib", "Hidatsa": "hid", "Higaonon": "mba", "Highland Konjo": "kjk", "Highland Oaxaca Chontal": "chd", "Highland Popoluca": "poi", "Highland Puebla Nahuatl": "azz", "Highland Totonac": "tos", "Hijazi Arabic": "acw", "Hijuk": "hij", "Hiligaynon": "hil", "Hill Maria": "mrr", "Himarimã": "hir", "Himyaritic": "sem-him", "हिंदी": "hi", "हिंदी डोगरी": "dgo", "Hinduri": "hii", "Hinukh": "gin", "Hiri Motu": "ho", "Hismaic": "sem-his", "Hitchiti": "nai-hit", "Hittite": "hit", "Hitu": "htu", "Hiw": "hiw", "Hixkaryana": "hix", "Hlai": "lic", "Hlepho Phowa": "yhl", "Hlersu": "hle", "Hmar": "hmr", "Hmong Don": "hmf", "Hmong Dô": "hmv", "Hmong Shua": "hmz", "Hmwaveke": "mrk", "Ho": "hoc", "Ho Chi Minh City Sign Language": "hos", "Hoava": "hoa", "Hobyót": "hoh", "Hoia Hoia": "hhi", "Holikachuk": "hoi", "Holiya": "hoy", "Holma": "hod", "Holoholo": "hoo", "Holu": "hol", "Homa": "hom", "Honduran Lenca": "len", "Honduras Sign Language": "hds", "Hone": "juh", "Hong Kong Sign Language": "hks", "Honi": "how", "Hopi": "hop", "Horned Miao": "hrm", "Horo": "hor", "Horom": "hoe", "Horpa": "ero", "Hote": "hot", "Hoti": "hti", "Hovongan": "hov", "Hoyahoya": "hhy", "Hozo": "hoz", "Hpon": "hpo", "Hrangkhol": "hra", "Hre": "hre", "Hruso": "hru", "Hu": "huo", "Huachipaeri": "hug", "Huambisa": "hub", "Huaorani": "auc", "Huarijio": "var", "Huaulu": "hud", "Huautla Mazatec": "mau", "Huave": "huv", "Huaxcaleca Nahuatl": "nhq", "Huba": "hbb", "Huehuetla Tepehua": "tee", "Huetar": "cba-hue", "Huichol": "hch", "Huilliche": "huh", "Huitepec Mixtec": "mxs", "Huizhou": "czh", "Hukumina": "huw", "Hula": "hul", "Hulaulá": "huy", "Huli": "hui", "Hulung": "huk", "Humburi Senni": "hmb", "Humene": "huf", "Hun": "uth", "Hunde": "hke", "Hung": "hnu", "Hungana": "hum", "Hungarian": "hu", "Hungarian Sign Language": "hsh", "Hungworo": "nat", "Hunjara-Kaina Ke": "hkk", "Hunnic": "xhc", "Hunsrik": "hrx", "Hunzib": "huz", "Hupa": "hup", "Hupdë": "jup", "Hupla": "hap", "Hurrian": "xhu", "Hutterisch": "geh", "Hwana": "hwo", "Hya": "hya", "Hyam": "jab", "Hän": "haa", "Hértevin": "hrt", "I-Wak": "iwk", "Iaai": "iai", "Iamalele": "yml", "Iatmul": "ian", "Iau": "tmu", "Ibali Teke": "tek", "Ibaloi": "ibl", "Iban": "iba", "Ibanag": "ibg", "Ibani": "iby", "Ibatan": "ivb", "Iberian": "xib", "Ibibio": "ibb", "Ibino": "ibn", "Iboko": "bkp", "Ibu": "ibu", "Ibuoro": "ibr", "Icelandic": "is", "Icelandic Sign Language": "icl", "Iceve-Maci": "bec", "Ida'an": "dbj", "Idakho-Isukha-Tiriki": "ida", "Idaté": "idt", "Idere": "ide", "Idesa": "ids", "Idi": "idi", "Ido": "io", "Idoma": "idu", "Idon": "idc", "Idu": "clk", "Idun": "ldb", "Iduna": "viv", "Ifo": "iff", "Ifè": "ife", "Igala": "igl", "Igana": "igg", "Igbo": "ig", "Igede": "ige", "Ignaciano": "ign", "Igo": "ahl", "Iguta": "nar", "Igwe": "igw", "Iha": "ihp", "Ihievbe": "ihi", "Ija-Zuba": "vki", "Ik": "ikx", "Ika": "ikk", "Ikaranggal": "ikr", "Ikizu": "ikz", "Iko": "iki", "Ikobi-Mena": "meb", "Ikoma": "ntk", "Ikpeng": "txi", "Ikpeshi": "ikp", "Ikposo": "kpo", "Iku-Gora-Ankwa": "ikv", "Ikulu": "ikl", "Ikwere": "ikw", "Ikwo": "iqw", "Ila": "ilb", "Ile Ape": "ila", "Ilgar": "ilg", "Ili Turki": "ili", "Ili'uun": "ilu", "Ilianen Manobo": "mbi", "Illyrian": "xil", "Ilocano": "ilo", "Ilongot": "ilk", "Ilue": "ilv", "Ilwana": "mlk", "Imbongu": "imo", "Imonda": "imn", "Imroing": "imr", "Inabaknon": "abx", "Inapang": "mzu", "Inari Sami": "smn", "Indanga": "bnt-ind", "Indian Sign Language": "ins", "Indo-Portuguese": "idb", "Indonesian": "id", "Indonesian Bajau": "bdl", "Indonesian Sign Language": "inl", "Indri": "idr", "Indus Kohistani": "mvy", "Indus Valley Language": "xiv", "Inebu One": "oin", "Ineseño": "inz", "Inga": "inb", "Ingrian": "izh", "Ingush": "inh", "Inlaod Itneg": "iti", "Inoke-Yate": "ino", "Inonhan": "loc", "Inor": "ior", "Inpui Naga": "nkf", "Interlingua": "ia", "Interlingue": "ie", "International Sign": "ils", "Intha": "int", "Inuinnaqtun": "esx-inq", "Inuit Sign Language": "iks", "Inuktitut": "iu", "Inuktun": "esx-ink", "Inupiaq": "ik", "Inuvialuktun": "ikt", "Ipai": "nai-ipa", "Ipalapa Amuzgo": "azm", "Ipiko": "ipo", "Ipili": "ipi", "Ipulo": "ass", "Iquito": "iqu", "Ir": "irr", "Irantxe": "irn", "Iranun": "ill", "Iraqi Arabic": "acm", "Iraqw": "irk", "Irarutu": "irh", "Iraya": "iry", "Iresim": "ire", "Iriga Bicolano": "bto", "Irish": "ga", "Irish Sign Language": "isg", "Irula": "iru", "Isabi": "isa", "Isan": "tts", "Isanzu": "isn", "Isarog Agta": "agk", "Isaurian": "und-isa", "Isconahua": "isc", "Isebe": "igo", "Ishkashimi": "isk", "Isinai": "inn", "Isirawa": "srl", "Island Carib": "crb", "Islander Creole English": "icr", "Isnag": "isd", "Isoko": "iso", "Israeli Sign Language": "isr", "Isthmus Mixe": "mir", "Isthmus Zapotec": "zai", "Istriot": "ist", "Istro-Romanian": "ruo", "Isu": "isu", "Isubu": "szv", "Italian": "it", "Italian Sign Language": "ise", "Italiot Greek": "grk-ita", "Itawit": "itv", "Itelmen": "itl", "Itene": "ite", "Iteri": "itr", "Itik": "itx", "Ito": "itw", "Itonama": "ito", "Itsekiri": "its", "Itu Mbon Uzo": "itm", "Itundujia Mixtec": "mce", "Itzá": "itz", "Iu Mien": "ium", "Ivatan": "ivv", "Iwaidja": "ibd", "Iwal": "kbm", "Iwam": "iwm", "Iwur": "iwo", "Ixcatec": "ixc", "Ixcatlán Mazatec": "mzi", "Ixil": "ixl", "Ixtayutla Mixtec": "vmj", "Ixtenco Otomi": "otz", "Iyayu": "iya", "Iyive": "uiv", "Iyo": "nca", "Iyo'wujwa Chorote": "crq", "Iyojwa'ja Chorote": "crt", "Izere": "izr", "Izi": "izz", "Izi-Ezaa-Ikwo-Mgbo": "izi", "Izon": "ijc", "Izora": "cbo", "Iñapari": "inp", "Jabem": "jae", "Jabutí": "jbt", "Jad": "jda", "Jadgali": "jdg", "Jah Hut": "jah", "Jahanka": "jad", "Jair Awyu": "awv", "Jakaltek": "jac", "Jakati": "jat", "Jalapa de Díaz Mazatec": "maj", "Jalkunan": "bxl", "Jamaican Country Sign Language": "jcs", "Jamaican Creole": "jam", "Jamaican Sign Language": "jls", "Jamamadí": "jaa", "Jambi Malay": "jax", "Jamiltepec Mixtec": "mxt", "Jaminjung": "djd", "Jamsay": "djm", "Jamtish": "gmq-jmk", "Jandavra": "jnd", "Janday": "jan", "Jangkang": "djo", "Jangshung": "jna", "Janji": "jni", "Japanese": "ja", "Japanese Sign Language": "jsl", "Japhug": "sit-jap", "Japrería": "jru", "Jaqaru": "jqr", "Jara": "jaf", "Jarai": "jra", "Jarawa": "anq", "Jaru": "ddj", "Jassic": "ysc", "Jaunsari": "jns", "Javanese": "jv", "Javindo": "jvd", "Jawe": "jaz", "Jaya": "jyy", "Jebero": "jeb", "Jeh": "jeh", "Jehai": "jhi", "Jeikó": "sai-jko", "Jeju": "jje", "Jemez": "tow", "Jenaama Bozo": "bze", "Jeng": "jeg", "Jennu Kurumba": "xuj", "Jere": "jer", "Jeri Kuo": "jek", "Jersey Dutch": "gmw-jdt", "Jeru": "akj", "Jerung": "jee", "Jhankot Sign Language": "jhs", "Jiamao": "jio", "Jiba": "juo", "Jibu": "jib", "Jicarilla": "apj", "Jiiddu": "jii", "Jilbe": "jie", "Jili": "mgi", "Jilim": "jil", "Jimi": "jmi", "Jimjimen": "jim", "Jin": "cjy", "Jina": "jia", "Jingpho": "kac", "Jingulu": "jig", "Jiongnai Bunu": "pnu", "Jirajara": "sai-jrj", "Jirel": "jul", "Jiru": "jrr", "Jita": "jit", "Jju": "kaj", "Joba": "job", "Jofotek-Bromnya": "jbr", "Jola-Fonyi": "dyo", "Jola-Kasa": "csk", "Jonkor Bourmataguil": "jeu", "Jordanian Sign Language": "jos", "Jorá": "jor", "Jowulu": "jow", "Ju": "juu", "Juang": "jun", "Juba Arabic": "pga", "Judeo-Italian": "itk", "Judeo-Persian": "jpr", "Judeo-Tat": "jdt", "Jukun Takum": "jbu", "Jumaytepeque": "nai-jum", "Jumjum": "jum", "Jumla Sign Language": "jus", "Jumli": "jml", "Jungle Inga": "inj", "Juquila Mixe": "mxq", "Jur Modo": "bex", "Juray": "juy", "Jurchen": "juc", "Jurúna": "jur", "Jutiapa": "nai-jtp", "Jutish": "jut", "Juwal": "mwb", "Juxtlahuaca Mixtec": "vmc", "Juǀ'hoan": "ktz", "Jwira-Pepesa": "jwi", "Júma": "jua", "K'iche'": "quc", "Kaamba": "xku", "Kaan": "ldl", "Kaang Chin": "ckn", "Kaansa": "gna", "Kaapor Sign Language": "uks", "Kaba": "ksp", "Kabalai": "kvf", "Kabardian": "kbd", "Kabatei": "xkp", "Kabba-Laka": "lap", "Kabishiana": "tup-kab", "Kabiyé": "kbp", "Kabola": "klz", "Kabore One": "onk", "Kabras": "lkb", "Kaburi": "uka", "Kabutra": "kbu", "Kabuverdianu": "kea", "Kabwa": "cwa", "Kabwari": "kcw", "Kabyle": "kab", "Kachama-Ganjule": "kcx", "Kachari": "xac", "Kachchi": "kfr", "Kachi Koli": "gjk", "Kacipo-Balesi": "koe", "Kaco'": "xkk", "Kadai": "kzd", "Kadar": "kej", "Kadara": "kad", "Kadaru": "kdu", "Kadiwéu": "kbc", "Kado": "kdv", "Kadugli": "xtc", "Kaduo": "ktp", "Kaera": "jka", "Kafa": "kbr", "Kafoa": "kpu", "Kagan Kalagan": "kll", "Kagate": "syw", "Kagayanen": "cgc", "Kagoma": "kdm", "Kagoro": "xkg", "Kagulu": "kki", "Kahe": "hka", "Kahua": "agw", "Kaian": "kct", "Kaibobo": "kzb", "Kaidipang": "kzp", "Kaiep": "kbw", "Kaikadi": "kep", "Kaike": "kzq", "Kaiku": "kkq", "Kaimbulawa": "zka", "Kaimbé": "xai", "Kaingang": "kgp", "Kairak": "ckr", "Kairiru": "kxa", "Kairui-Midiki": "krd", "Kais": "kzm", "Kaivi": "kce", "Kaiwá": "kgk", "Kaiy": "tcq", "Kajakse": "ckq", "Kajali": "xkj", "Kajaman": "kag", "Kakabai": "kqf", "Kakabe": "kke", "Kakanda": "kka", "Kaki Ae": "tbd", "Kakihum": "kxe", "Kako": "kkj", "Kakwa": "keo", "Kala": "kcl", "Kala Lagaw Ya": "mwp", "Kalaamaya": "lkm", "Kalabakan": "kve", "Kalabari": "ijn", "Kalabra": "kzz", "Kalagan": "kqe", "Kalaktang Monpa": "kkf", "Kalam": "kmh", "Kalami": "gwc", "Kalamsé": "knz", "Kalanadi": "wkl", "Kalanga": "kck", "Kalao": "kly", "Kalapuya": "kyl", "Kalarko": "kba", "Kalasha": "kls", "Kalasuri": "xme-kls", "Kalenjin": "kln", "Kalkatungu": "ktg", "Kalkoti": "xka", "Kalmyk": "xal", "Kalo Finnish Romani": "rmf", "Kalou": "ywa", "Kaluli": "bco", "Kalumpang": "kli", "Kam": "kdx", "Kamakan": "vkm", "Kamang": "woi", "Kamano": "kbq", "Kamantan": "kci", "Kamar": "keq", "Kamara": "jmr", "Kamarian": "kzx", "Kamaru": "kgx", "Kamarupi Prakrit": "inc-kam", "Kamasa": "klp", "Kamasau": "kms", "Kamassian": "xas", "Kamayo": "kyk", "Kamayurá": "kay", "Kamba": "kam", "Kambaata": "ktb", "Kambaira": "kyy", "Kambera": "xbr", "Kamberataro": "kbv", "Kamberau": "irx", "Kambiwá": "xbw", "Kami": "kmi", "Kamkata-viri": "bsh", "Kamo": "kcq", "Kamoro": "kgq", "Kamta": "rkt", "Kamu": "xmu", "Kamula": "xla", "Kamwe": "hig", "Kanakanabu": "xnb", "Kanakuru": "kna", "Kanamari": "knm", "Kanashi": "xns", "Kanasi": "soq", "Kandas": "kqw", "Kandawo": "gam", "Kande": "kbs", "Kang": "kyp", "Kanga": "kcp", "Kangean": "kkv", "Kanggape": "igm", "Kangjia": "kxs", "Kango": "kty", "Kango-Sua": "kzy", "Kangri": "xnr", "Kaniet": "ktk", "Kanikkaran": "kev", "Kaningdon-Nindem": "kdp", "Kaningi": "kzo", "Kaningra": "knr", "Kaninuwa": "wat", "Kanite": "kmu", "Kanjari": "kft", "Kanju": "kbe", "Kankanaey": "kne", "Kannada": "kn", "Kannada Kurumba": "kfi", "Kannauji": "bjj", "Kanowit": "kxn", "Kanoé": "kxo", "Kansa": "ksk", "Kantosi": "xkt", "Kanu": "khx", "Kanufi": "kni", "Kanuri": "kr", "Kanyok": "kny", "Kao": "kax", "Kaonde": "kqn", "Kap": "ykm", "Kapampangan": "pam", "Kapauri": "khp", "Kapin": "tbx", "Kapinawá": "xpn", "Kapingamarangi": "kpg", "Kapriman": "dju", "Kaptiau": "kbi", "Kapya": "klo", "Kaqchikel": "cak", "Kara (New Guinea)": "leu", "Kara (Tanzania)": "reg", "Karachay-Balkar": "krc", "Karadjeri": "gbd", "Karaga Mandaya": "mry", "Karaim": "kdr", "Karajá": "kpj", "Karakalpak": "kaa", "Karakhanid": "xqa", "Karami": "xar", "Karamojong": "kdj", "Karang": "kzr", "Karanga": "kth", "Karankawa": "zkk", "Karao": "kyj", "Karas": "kgv", "Karata": "kpt", "Karawa": "xrw", "Karbi": "mjw", "Kare (Africa)": "kbn", "Kare (New Guinea)": "kmf", "Karekare": "kai", "Karelian": "krl", "Karey": "kyd", "Kari": "kbj", "Karingani": "kgn", "Karipuna": "kuq", "Karipúna": "kgm", "Karipúna Creole French": "kmv", "Kariri": "kzw", "Karitiâna": "ktn", "Kariya": "kil", "Kariyarra": "vka", "Karkar-Yuri": "yuj", "Karkin": "krb", "Karko": "kko", "Karnai": "bbv", "Karo": "kxh", "Karo Batak": "btx", "Karok": "kyh", "Karolanos": "kyn", "Karon": "krx", "Karon Dori": "kgw", "Karore": "xkx", "Karranga": "xrq", "Karuwali": "rxw", "Kasanga": "ccj", "Kasem": "xsm", "Kashaya": "kju", "Kashmiri": "ks", "Kashubian": "csb", "Kasiguranin": "ksn", "Kaska": "kkz", "Kaskean": "zsk", "Kaskihá": "gva", "Kassite": "und-kas", "Kassonke": "kao", "Kasua": "khs", "Kataang": "kgd", "Katabaga": "ktq", "Katawixi": "xat", "Katembri": "sai-kat", "Kathlamet": "nai-kat", "Kathoriya Tharu": "tkt", "Kathu": "ykt", "Katkari": "kfu", "Katla": "kcr", "Kato": "ktw", "Katso": "kaf", "Katua": "kta", "Katukina": "knt", "Kaulong": "pss", "Kaur": "vkk", "Kaure": "bpp", "Kaurna": "zku", "Kauwera": "xau", "Kavalan": "ckv", "Kavet": "krv", "Kawacha": "kcb", "Kawaiisu": "xaw", "Kawe": "kgb", "Kawishana": "awd-kaw", "Kawésqar": "alc", "Kaxararí": "ktx", "Kaxuyana": "kbb", "Kaya": "zra", "Kayabí": "kyz", "Kayagar": "kyt", "Kayan": "pdu", "Kayan Mahakam": "xay", "Kayan River Kayan": "xkn", "Kayapa Kallahan": "kak", "Kayapó": "txu", "Kayardild": "gyd", "Kayeli": "kzl", "Kayong": "kxy", "Kayort": "kyv", "Kaytetye": "gbb", "Kayupulau": "kzu", "Kazakh": "kk", "Kazukuru": "kzk", "Ke'o": "xxk", "Keak": "keh", "Keapara": "khz", "Kedah Malay": "meo", "Kedang": "ksx", "Keder": "kdy", "Kehu": "khh", "Kei": "kei", "Keiga": "kec", "Kein": "bmh", "Keiyo": "eyo", "Kela-Yela": "kel", "Kelabit": "kzi", "Keley-I Kallahan": "ify", "Keliko": "kbo", "Kelo": "xel", "Kelon": "kyo", "Kemak": "kem", "Kembayan": "xem", "Kemberano": "bzp", "Kembra": "xkw", "Kemezung": "dmo", "Kemi Sami": "sjk", "Kemiehua": "kfj", "Kemtuik": "kmt", "Kenaboi": "xbn", "Kenati": "gat", "Kendayan": "knx", "Kendeje": "klf", "Kendem": "kvm", "Kenga": "kyq", "Keningau Murut": "kxi", "Keninjal": "knl", "Kensiu": "kns", "Kenswei Nsei": "ndb", "Kenyan Sign Language": "xki", "Kenyang": "ken", "Kenyi": "lke", "Keoru-Ahia": "xeu", "Kepkiriwát": "kpn", "Kepo'": "kuk", "Kera": "ker", "Kerak": "hhr", "Kereho": "xke", "Kerek": "krk", "Kerewe": "ked", "Kerewo": "kxz", "Kerinci": "kvr", "Kermanic": "xme-ker", "Kesawai": "xes", "Ket": "ket", "Ketangalan": "kae", "Kete": "kcv", "Ketengban": "xte", "Ketum": "ktt", "Kewa": "kew", "Keyagana": "kyg", "Kgalagadi": "xkv", "Khakas": "kjh", "Khalaj": "klj", "Khaling": "klr", "Kham": "kjl", "Khamnigan Mongol": "ykh", "Khamti": "kht", "Khamyang": "ksu", "Khana": "ogo", "Khandeshi": "khn", "Khanty": "kca", "Khao": "xao", "Kharam Naga": "kfw", "Kharia": "khr", "Kharia Thar": "ksy", "Khasa Prakrit": "inc-kha", "Khasi": "kha", "Khayo": "lko", "Khazar": "zkz", "Khe": "kqg", "Khehek": "tlx", "Khengkha": "xkf", "Khetrani": "xhe", "Khezha Naga": "nkh", "Khiamniungan Naga": "kix", "Khinalug": "kjj", "Khirwar": "kwx", "Khisa": "kqm", "Khitan": "zkt", "Khlor": "llo", "Khlula": "ykl", "Khmer": "km", "Khmu": "kjg", "Khoekhoe": "naq", "Khoibu Naga": "nkb", "Khoini": "xkc", "Kholok": "ktc", "Kholosi": "inc-kho", "Khonso": "kxc", "Khorasani Turkish": "kmz", "Khorezmian Turkic": "zkh", "Khotanese": "kho", "Khowar": "khw", "Khroskyabs": "jiq", "Khua": "xhv", "Khuen": "khf", "Khumi Chin": "cnk", "Khvarshi": "khv", "Khwarezmian": "xco", "Khwe": "xuu", "Kháng": "kjm", "Khün": "kkh", "Kibala": "blv", "Kibena": "bez", "Kibet": "kie", "Kibiri": "prm", "Kichwa": "qwe-kch", "Kickapoo": "kic", "Kikai": "kzg", "Kikami": "kcu", "Kikuyu": "ki", "Kildin Sami": "sjd", "Kilit": "xme-klt", "Kilivila": "kij", "Kiliwa": "klb", "Kilmeri": "kih", "Kim": "kia", "Kim Mun": "mji", "Kimaama": "kig", "Kimaragang": "kqr", "Kimbu": "kiv", "Kimbundu": "kmb", "Kimki": "sbt", "Kimré": "kqp", "Kinabalian": "cbw", "Kinalakna": "kco", "Kinaray-a": "krj", "Kinga": "zga", "Kings River Yokuts": "nai-kry", "Kinikinao": "gqn", "Kinnauri": "kfk", "Kintaq": "knq", "Kinuku": "kkd", "Kioko": "ues", "Kiong": "kkm", "Kiorr": "xko", "Kiowa": "kio", "Kipchak": "qwm", "Kipfokomo": "pkb", "Kipsigis": "sgc", "Kiput": "kyi", "Kir-Balar": "kkr", "Kire": "geb", "Kirfi": "kks", "Kirike": "okr", "Kirikiri": "kiy", "Kirya-Konzel": "fkk", "Kis": "kis", "Kisa": "lks", "Kisan": "xis", "Kisankasa": "kqh", "Kisar": "kje", "Kisi": "kiz", "Kistane": "gru", "Kita Maninkakan": "mwk", "Kitanemuk": "azc-ktn", "Kitembo": "tbt", "Kitja": "gia", "Kitsai": "kii", "Kituba": "ktu", "Kiunum": "wei", "Kla": "lda", "Klallam": "clm", "Klamath-Modoc": "kla", "Klao": "klu", "Klias River Kadazan": "kqt", "Klingon": "tlh", "Knaanic": "czk", "Ko": "fuj", "Koalib": "kib", "Koasati": "cku", "Koba": "kpd", "Kobiana": "kcj", "Kobol": "kgu", "Kobon": "kpw", "Koch": "kdq", "Kochila Tharu": "thq", "Koda": "cdz", "Kodaku": "ksz", "Kodava": "kfa", "Kodeoha": "vko", "Kodi": "kod", "Kodia": "kwp", "Koenoem": "kcs", "Kofa": "kso", "Kofei": "kpi", "Kofyar": "kwl", "Kohin": "kkx", "Kohistani Shina": "plk", "Koho": "kpm", "Kohumono": "bcs", "Koi": "kkt", "Koibal": "zkb", "Koireng": "nkd", "Koitabu": "kqi", "Koiwat": "kxt", "Kok-Nar": "gko", "Kok-Paponk": "okg", "Kokata": "ktd", "Kokborok": "trp", "Koke": "kou", "Koko-Bera": "kkp", "Kokoda": "xod", "Kokola": "kzn", "Kokota": "kkk", "Kol (Cameroon)": "biw", "Kol (New Guinea)": "kol", "Kola": "kvv", "Kolami": "kfb", "Kolbila": "klc", "Kolhe": "ekl", "Kolibugan Subanon": "skn", "Kolom": "klm", "Koluwawa": "klx", "Kom (Cameroon)": "bkm", "Kom (India)": "kmm", "Koma": "kmy", "Komba": "kpf", "Kombai": "tyn", "Kombio": "xbi", "Komering": "kge", "Komi-Permyak": "koi", "Komi-Yazva": "urj-kya", "Komi-Zyrian": "kpv", "Kominimung": "xoi", "Komo": "xom", "Komodo": "kvh", "Kompane": "kvp", "Komyandaret": "kzv", "Kon Keu": "kkn", "Konabéré": "bbo", "Konai": "kxw", "Konda": "knd", "Konda-Dora": "kfc", "Kondekor": "gau", "Koneraw": "kdw", "Kongo": "kg", "Konkani": "kok", "Konkomba": "xon", "Konni": "kma", "Kono (Guinea)": "knu", "Kono (Nigeria)": "klk", "Kono (Sierra Leone)": "kno", "Konomala": "koa", "Konomihu": "nai-knm", "Konongo": "kcz", "Konyak Naga": "nbe", "Konyanka Maninka": "mku", "Konzo": "koo", "Koonzime": "ozm", "Koorete": "kqy", "Kopar": "xop", "Kopkaka": "opk", "Korafe-Yegha": "kpr", "Korak": "koz", "Korana": "kqz", "Korandje": "kcy", "Korean": "ko", "Korean Sign Language": "kvk", "Koreguaje": "coe", "Koresh-e Rostam": "okh", "Korku": "kfq", "Korlai Creole Portuguese": "vkp", "Koro (India)": "jkr", "Koro (New Guinea)": "kxr", "Koro (Vanuatu)": "krf", "Koro (West Africa)": "kfo", "Koromfé": "kfz", "Koromira": "kqj", "Koronadal Blaan": "bpr", "Koroni": "xkq", "Korop": "krp", "Koropó": "xxr", "Koroshi": "ktl", "Korowai": "khe", "Korra Koraga": "kfd", "Korubo": "xor", "Korupun-Sela": "kpq", "Korwa": "kfp", "Koryak": "kpy", "Kosadle": "kiq", "Kosarek Yale": "kkl", "Kosena": "kze", "Koshin": "kid", "Kosraean": "kos", "Kota (Gabon)": "koq", "Kota (India)": "kfe", "Kota Bangun Kutai Malay": "mqg", "Kota Marudu Talantang": "grm", "Kota Marudu Tinagas": "ktr", "Kotafon Gbe": "kqk", "Kotava": "avk", "Koti": "eko", "Kott": "zko", "Kou": "snz", "Kouya": "kyf", "Kovai": "kqb", "Kove": "kvc", "Kowaki": "xow", "Kowiai": "kwh", "Koy Sanjaq Surat": "kqd", "Koya": "kff", "Koyaga": "kga", "Koyo": "koh", "Koyra Chiini": "khq", "Koyraboro Senni": "ses", "Koyukon": "koy", "Kpagua": "kuw", "Kpala": "kpl", "Kpan": "kpk", "Kpasam": "pbn", "Kpati": "koc", "Kpatili": "kym", "Kpee": "cpo", "Kpelle": "kpe", "Kpessi": "kef", "Kplang": "kph", "Krache": "kye", "Krahô": "xra", "Kraol": "rka", "Krenak": "kqq", "Kresh": "krs", "Krevinian": "zkv", "Kreye": "xre", "Krikati-Timbira": "xri", "Krim": "krm", "Krio": "kri", "Kriol": "rop", "Krisa": "ksi", "Kristang": "mcm", "Krobu": "kxb", "Krongo": "kgo", "Kru'ng": "krr", "Krymchak": "jct", "Kryts": "kry", "Kua": "tyu", "Kua-nsi": "ykn", "Kuamasi": "yku", "Kuan": "uan", "Kuanhua": "xnh", "Kube": "kgf", "Kubi": "kof", "Kubo": "jko", "Kubu": "kvb", "Kucong": "lkc", "Kudiya": "kfg", "Kudmali": "kyw", "Kudu-Camo": "kov", "Kugama": "kow", "Kugbo": "kes", "Kugu-Muminh": "xmh", "Kui (India)": "kxu", "Kui (Indonesia)": "kvd", "Kuijau": "dkr", "Kuikúro": "kui", "Kujarge": "vkj", "Kuk": "kfn", "Kukatja": "kux", "Kukele": "kez", "Kukkuzi": "urj-kuk", "Kukna": "kex", "Kuku-Mangk": "xmq", "Kuku-Mu'inh": "xmp", "Kuku-Thaypan": "typ", "Kuku-Ugbanh": "ugb", "Kuku-Uwanh": "uwa", "Kuku-Yalanji": "gvn", "Kula": "tpg", "Kulaal": "glj", "Kulere": "kul", "Kulfa": "kxj", "Kulina": "xpk", "Kulisusu": "vkl", "Kullu Pahari": "kfx", "Kulon": "uon", "Kulon-Pazeh": "uun", "Kulung": "kle", "Kumak": "nee", "Kumalu": "ksl", "Kumam": "kdi", "Kuman": "kue", "Kumaoni": "kfy", "Kumarbhag Paharia": "kmj", "Kumba": "ksm", "Kumbainggar": "kgs", "Kumbaran": "wkb", "Kumbewaha": "xks", "Kumeyaay": "nai-kum", "Kumhali": "kra", "Kumu": "kmw", "Kumukio": "kuo", "Kumyk": "kum", "Kumzari": "zum", "Kuna": "cuk", "Kunama": "kun", "Kunbarlang": "wlg", "Kunda": "kdn", "Kundal Shahi": "shd", "Kunduvadi": "wku", "Kung": "kfl", "Kungarakany": "ggk", "Kungardutyi": "gdt", "Kunggari": "kgl", "Kungkari": "lku", "Kuni": "kse", "Kuni-Boazi": "kvg", "Kunigami": "xug", "Kunimaipa": "kup", "Kunja": "pep", "Kunjen": "kjn", "Kunyi": "njx", "Kunza": "kuz", "Kuo": "xuo", "Kuot": "kto", "Kupa": "kug", "Kupang Malay": "mkn", "Kupia": "key", "Kupsabiny": "kpz", "Kur": "kuv", "Kura Ede Nago": "nqk", "Kurama": "krh", "Kuranko": "knk", "Kuri": "nbn", "Kuria": "kuj", "Kurichiya": "kfh", "Kurmukar": "kfv", "Kurnai": "unn", "Kurrama": "vku", "Kurti": "ktm", "Kurtjar": "gdj", "Kurtöp": "xkz", "Kurudu": "kjr", "Kurukh": "kru", "Kuruáya": "kyr", "Kusaal": "kus", "Kusaghe": "ksg", "Kushi": "kuh", "Kustenau": "awd-kus", "Kusu": "ksv", "Kusunda": "kgg", "Kutang Ghale": "ght", "Kutenai": "kut", "Kutep": "kub", "Kuthant": "xut", "Kutto": "kpa", "Kutu": "kdc", "Kuturmi": "khj", "Kuuk Thaayorre": "thd", "Kuuk Yak": "uky", "Kuuku-Ya'u": "kuy", "Kuvale": "olu", "Kuvi": "kxv", "Kuwaa": "blh", "Kuwaataay": "cwt", "Kuwani": "paa-kwn", "Kuy": "kdt", "Kven": "fkv", "Kw'adza": "wka", "Kwa'": "bko", "Kwaami": "ksq", "Kwadi": "kwz", "Kwaio": "kwd", "Kwaja": "kdz", "Kwak": "kwq", "Kwak'wala": "kwk", "Kwakum": "kwu", "Kwalhioqua-Tlatskanai": "qwt", "Kwama": "kmq", "Kwambi": "kwm", "Kwamera": "tnk", "Kwami": "ktf", "Kwamtim One": "okk", "Kwang": "kvi", "Kwanga": "kwj", "Kwangali": "kwn", "Kwanja": "knp", "Kwanka": "bij", "Kwanyama": "kj", "Kwara'ae": "kwf", "Kwasio": "nmg", "Kwaya": "kya", "Kwaza": "xwa", "Kwegu": "xwg", "Kwer": "kwr", "Kwerba": "kwe", "Kwerba Mamberamo": "xwr", "Kwere": "cwe", "Kwerisa": "kkb", "Kwese": "kws", "Kwesten": "kwt", "Kwini": "gww", "Kwinsu": "kuc", "Kwinti": "kww", "Kwoma": "kmo", "Kwomtari": "kwo", "Kyak": "bka", "Kyaka": "kyc", "Kyakala": "tuw-kkl", "Kyan-Karyaw Naga": "nqq", "Kyenele": "kql", "Kyenga": "tye", "Kyerung": "kgy", "Kyrgyz": "ky", "Kâte": "kmg", "Kélé": "keb", "Kómnzo": "paa-kom", "La'bi": "lbi", "Laal": "gdm", "Laalaa": "cae", "Laba": "lau", "Label": "lbb", "Labir": "jku", "Labo": "mwi", "Labo Phowa": "ypb", "Laboya": "lmy", "Labu": "lbu", "Labuk-Kinabatangan Kadazan": "dtb", "Lacandon": "lac", "Lachi": "lbt", "Lachiguiri Zapotec": "zpa", "Lachixío Zapotec": "zpl", "Ladakhi": "lbj", "Ladin": "lld", "Ladino": "lad", "Ladji-Ladji": "llj", "Laeko-Libuat": "lkl", "Lafofa": "laf", "Laghu": "lgb", "Laghuu": "lgh", "Lagwan": "kot", "Laha (Indonesia)": "lhh", "Laha (Vietnam)": "lha", "Lahanan": "lhn", "Lahnda": "lah", "Lahta Karen": "kvt", "Lahu": "lhu", "Lahu Shi": "lhi", "Lahul Lohar": "lhl", "Lai": "cnh", "Laimbue": "lmx", "Laitu Chin": "clj", "Laiyolo": "lji", "Lak": "lbe", "Laka": "lak", "Lakalei": "lka", "Lake Miwok": "lmw", "Lakha": "lkh", "Laki": "lki", "Lakkia": "lbc", "Lakon": "lkn", "Lakondê": "lkd", "Lakota": "lkt", "Lakota Dida": "dic", "Lala (New Guinea)": "nrz", "Lala (South Africa)": "bnt-lal", "Lala-Bisa": "leb", "Lala-Roba": "lla", "Lalana Chinantec": "cnl", "Lama Bai": "lay", "Lamaholot": "slp", "Lamalera": "lmr", "Lamang": "hia", "Lamatuka": "lmq", "Lamba": "lam", "Lambadi": "lmn", "Lambichhong": "lmh", "Lambya": "lai", "Lame": "bma", "Lamenu": "lmu", "Lamet": "lbn", "Lamja-Dengsa-Tola": "ldh", "Lamkang": "lmk", "Lamma": "lev", "Lamnso'": "lns", "Lamogai": "lmg", "Lampung Api": "ljp", "Lamu": "llh", "Lamu-Lamu": "lby", "Lanas Lobu": "ruu", "Landoma": "ldm", "Lang'e": "yne", "Langam": "lnm", "Langbashe": "lna", "Langi": "lag", "Langnian Buyang": "yln", "Lango (Sudan)": "lno", "Lango (Uganda)": "laj", "Lanima": "lnw", "Lanoh": "lnh", "Lao": "lo", "Lao Naga": "nlq", "Laomian": "lwm", "Laopang": "lbg", "Laos Sign Language": "lso", "Lapaguía-Guivini Zapotec": "ztl", "Lapine": "art-lap", "Lapuyan Subanun": "laa", "Laragia": "lrg", "Larantuka Malay": "lrt", "Lardil": "lbz", "Larestani": "lrl", "Larevat": "lrv", "Larike-Wakasihu": "alo", "Laro": "lro", "Larteh": "lar", "Laru": "lan", "Lasalimu": "llm", "Lasgerdi": "lsa", "Lashi": "lsi", "Lasi": "lss", "Latgalian": "ltg", "Latin": "la", "Latu": "ltu", "Latundê": "ltn", "Latvian": "lv", "Latvian Sign Language": "lsl", "Lau": "llu", "Laua": "luf", "Lauan": "llx", "Lauje": "law", "Laura": "lur", "Laurentian": "lre", "Lautu Chin": "clt", "Lavatbura-Lamusong": "lbv", "Lave": "brb", "Laven": "lbo", "Lavukaleve": "lvk", "Lawangan": "lbx", "Lawi": "lvi", "Lawu": "lwu", "Lawunuia": "tgi", "Layakha": "lya", "Laz": "lzz", "Laze": "tbq-laz", "Lealao Chinantec": "cle", "Leco": "lec", "Ledo Kaili": "lew", "Leelau": "ldk", "Lefa": "lfa", "Lega-Mwenga": "lgm", "Lega-Shabunda": "lea", "Legbo": "agb", "Legenyem": "lcc", "Lehali": "tql", "Lehalurup": "urr", "Leinong Naga": "lzn", "Leipon": "lek", "Lela": "dri", "Lelak": "llk", "Lele (Chad)": "lln", "Lele (Congo)": "lel", "Lele (Guinea)": "llc", "Lele (New Guinea)": "lle", "Lelemi": "lef", "Lelepa": "lpa", "Lembena": "leq", "Lemerig": "lrz", "Lemio": "lei", "Lemnian": "xle", "Lemolang": "ley", "Lemoro": "ldj", "Lenakel": "tnl", "Lendu": "led", "Lengilu": "lgi", "Lengo": "lgr", "Lengola": "lej", "Lenje": "leh", "Lenkau": "ler", "Lenyima": "ldg", "Leonese": "roa-leo", "Lepcha": "lep", "Lepki": "lpe", "Lepontic": "xlp", "Lere": "gnh", "Lese": "les", "Lesing-Gelimi": "let", "Letemboi": "nms", "Leti (Cameroon)": "leo", "Leti (Indonesia)": "lti", "Levuka": "lvu", "Lewo": "lww", "Lewo Eleng": "lwe", "Lewotobi": "lwt", "Leyigha": "ayi", "Lezgi": "lez", "Lhao Vo": "mhx", "Lhokpu": "lhp", "Li'o": "ljl", "Liabuku": "lix", "Liana-Seti": "ste", "Liangmai Naga": "njn", "Liberia Kpelle": "xpe", "Liberian English": "lir", "Libido": "liq", "Libinza": "liz", "Libon Bikol": "lbl", "Liburnian": "xli", "Libyan Arabic": "ayl", "Libyan Sign Language": "lbs", "Ligbi": "lig", "Ligenza": "lgz", "Ligurian": "lij", "Lihir": "lih", "Lika": "lik", "Liki": "lio", "Likila": "lie", "Likuba": "kxx", "Likum": "lib", "Likwala": "kwc", "Lilau": "lll", "Lillooet": "lil", "Limassa": "bme", "Limbu": "lif", "Limbum": "lmp", "Limburgish": "li", "Limi": "ylm", "Limilngan": "lmc", "Limos Kalinga": "kmk", "Lindu": "klw", "Linear A": "lab", "Lingala": "ln", "Lingao": "onb", "Lingkhim": "lii", "Lingua Franca Nova": "lfn", "Linngithigh": "lnj", "Lipan": "apl", "Lipo": "lpo", "Lisabata-Nuniali": "lcs", "Lisela": "lcl", "Lish": "lsh", "Lishana Deni": "lsd", "Lishanid Noshan": "aij", "Lishán Didán": "trg", "Lisu": "lis", "Literary Chinese": "lzh", "Lithuanian": "lt", "Lithuanian Sign Language": "lls", "Little Swanport": "aus-lsw", "Litzlitz": "lzl", "Livonian": "liv", "Livvi": "olo", "Lizu": "sit-liz", "Lo-Toga": "lht", "Loarki": "lrk", "Lobala": "loq", "Lobi": "lob", "Lodhi": "lbm", "Logba": "lgq", "Logo": "log", "Logol": "lof", "Logooli": "rag", "Logorik": "liu", "Lojban": "jbo", "Lokaa": "yaz", "Loko": "lok", "Lokoya": "lky", "Lola": "lcd", "Lolak": "llq", "Lole": "llg", "Lolo": "llb", "Loloda": "loa", "Lolopo": "ycl", "Lomaiviti": "lmv", "Lomakka": "loi", "Lomavren": "rmi", "Lombard": "lmo", "Lombi": "lmi", "Lombo": "loo", "Lomwe": "ngl", "Loncong": "lce", "Long Phuri Naga": "lpn", "Long Wat": "ttw", "Longgu": "lgu", "Longto": "wok", "Longuda": "lnu", "Loniu": "los", "Lonwolwol": "crc", "Loo": "ldo", "Looma": "lom", "Lopa": "lop", "Lopi": "lov", "Lopit": "lpx", "Lorang": "lrn", "Lorediakarkar": "lnn", "Lorrain": "roa-lor", "Lote": "uvl", "Lotha Naga": "njh", "Lotud": "dtr", "Lotuko": "lot", "Lou": "loj", "Louisiana Creole": "lou", "Loun": "lox", "Loup A": "xlo", "Loup B": "xlb", "Lovono": "vnk", "Low German": "nds", "Lower Burdekin": "xbb", "Lower Chehalis": "cea", "Lower Grand Valley Dani": "dni", "Lower Nossob": "nsb", "Lower Sorbian": "dsb", "Lower Southern Aranda": "axl", "Lower Ta'oih": "tto", "Lower Tanana": "taa", "Lowland Oaxaca Chontal": "clo", "Lowland Tarahumara": "tac", "Loxicha Zapotec": "ztp", "Lozi": "loz", "Luang": "lex", "Luba-Kasai": "lua", "Luba-Katanga": "lu", "Lubila": "kcc", "Lubu": "lcf", "Lubuagan Kalinga": "knb", "Luchazi": "lch", "Lucumí": "luq", "Ludian": "lud", "Lufu": "ldq", "Luganda": "lg", "Lugbara": "lgg", "Luguru": "ruf", "Luhu": "lcq", "Luhya": "luy", "Luimbi": "lum", "Luiseño": "lui", "Lukpa": "dop", "Lule": "ule", "Lule Sami": "smj", "Lumba-Yakkha": "luu", "Lumbee": "lmz", "Lumbu": "lup", "Lumun": "lmd", "Lun Bawang": "lnd", "Luna": "luj", "Lunanakha": "luk", "Lunda": "lun", "Lungga": "lga", "Luo": "luo", "Luopohe Hmong": "hml", "Luri (Nigeria)": "ldd", "Lusengo": "lse", "Lushootseed": "lut", "Lusi": "khl", "Lusitanian": "xls", "Lutachoni": "lts", "Lutos": "ndy", "Luvale": "lue", "Luwati": "luv", "Luwian": "xlu", "Luwo": "lwo", "Luxembourgish": "lb", "Luyana": "lyn", "Lwalu": "lwa", "Lwel": "bnt-lwl", "Lycian": "xlc", "Lydian": "xld", "Lyngngam": "lyg", "Lyélé": "lee", "Láadan": "ldn", "Láá Láá Bwamu": "bwj", "Lü": "khb", "Ma": "msj", "Ma Manda": "skc", "Ma'anyan": "mhy", "Ma'di": "mhi", "Ma'ya": "slz", "Maa": "cma", "Maaka": "mew", "Maale": "mdy", "Maasai": "mas", "Maay": "ymm", "Maba": "mqa", "Mabaale": "mmz", "Mabaan": "mfz", "Mabaka Valley Kalinga": "kkg", "Mabire": "muj", "Maca": "mca", "Macaguaje": "mcl", "Macaguán": "mbn", "Macanese": "mzs", "Macau Pidgin Portuguese": "crp-mpp", "Macedonian": "mk", "Machame": "jmc", "Machiguenga": "mcb", "Machinere": "mpd", "Machinga": "mvw", "Macoris": "nai-mac", "Macuna": "myy", "Macushi": "mbc", "Mada (Cameroon)": "mxu", "Mada (Nigeria)": "mda", "Madagascar Sign Language": "mzc", "Madak": "mmx", "Maden": "xmx", "Madhi Madhi": "dmd", "Madi": "grg", "Madngele": "zml", "Madukayang Kalinga": "kmd", "Madurese": "mad", "Mae": "mme", "Maek": "hmk", "Maeng Itneg": "itt", "Mafa": "maf", "Mafea": "mkv", "Mag-Anchi Ayta": "sgb", "Mag-Indi Ayta": "blx", "Magadhi Prakrit": "inc-mgd", "Magahat": "mtw", "Magahi": "mag", "Magdalena Peñasco Mixtec": "xtm", "Magiyi": "gmg", "Magoma": "gmx", "Magori": "zgr", "Maguindanao": "mdh", "Magɨ": "gkd", "Mahali": "mjx", "Maharastri Prakrit": "pmh", "Mahasu Pahari": "bfz", "Mahican": "mjy", "Mahongwe": "mhb", "Mahou": "mxx", "Maia": "sks", "Maiadomu": "mzz", "Maiani": "tnh", "Maii": "mmm", "Mailu": "mgu", "Maindo": "cwb", "Mairasi": "zrs", "Maisin": "mbq", "Maithili": "mai", "Maiwa (Indonesia)": "wmm", "Maiwa (New Guinea)": "mti", "Maiwala": "mum", "Majang": "mpe", "Majera": "xmj", "Majhi": "mjz", "Majhwar": "mmj", "Mak (China)": "mkg", "Mak (Nigeria)": "pbl", "Makaa": "mcp", "Makah": "myh", "Makalero": "mjb", "Makasae": "mkz", "Makasar": "mak", "Makassar Malay": "mfp", "Makayam": "aup", "Makhuwa": "vmw", "Makhuwa-Marrevone": "xmc", "Makhuwa-Meetto": "mgh", "Makhuwa-Moniga": "mhm", "Makhuwa-Saka": "xsq", "Makhuwa-Shirima": "vmk", "Maklew": "mgf", "Makolkol": "zmh", "Makonde": "kde", "Maku": "xak", "Maku'a": "lva", "Makuri Naga": "jmn", "Makuráp": "mpu", "Makwe": "ymk", "Makyan Naga": "umn", "Mal": "mlf", "Mal Paharia": "mkb", "Mala (New Guinea)": "ped", "Mala (Nigeria)": "ruy", "Mala Malasar": "ima", "Malaccan Creole Malay": "ccm", "Malagasy": "mg", "Malalamai": "mmt", "Malalí": "sai-mal", "Malango": "mln", "Malankuravan": "mjo", "Malapandaram": "mjp", "Malaryan": "mjq", "Malas": "mkr", "Malasanga": "mqz", "Malasar": "ymr", "Malavedan": "mjr", "Malawi Lomwe": "lon", "Malawian Sign Language": "lws", "Malay": "ms", "Malayalam": "ml", "Malayic Dayak": "xdy", "Malaynon": "mlz", "Malaysian Sign Language": "xml", "Malba Birifor": "bfo", "Male": "mdc", "Malecite-Passamaquoddy": "pqm", "Maleng": "pkt", "Maleu-Kilenge": "mgl", "Malfaxal": "mlx", "Malgana": "vml", "Malgbe": "mxf", "Mali": "gcc", "Malibu": "sai-mlb", "Malila": "mgq", "Malimba": "mzd", "Malimpung": "mli", "Malinaltepec Tlapanec": "tcf", "Malol": "mbk", "Maltese": "mt", "Maltese Sign Language": "mdl", "Malua Bay": "mll", "Malvi": "mup", "Maléku Jaíka": "gut", "Mam": "mam", "Mama": "mma", "Mamaa": "mhf", "Mamaindé": "wmd", "Mamanwa": "mmn", "Mamara Senoufo": "myk", "Mamasa": "mqj", "Mambae": "mgm", "Mambai": "mcs", "Mamboru": "mvd", "Mambwe-Lungu": "mgr", "Mampruli": "maw", "Mamuju": "mqx", "Mamulique": "emm", "Mamusi": "kdf", "Mamvu": "mdi", "Man Met": "mml", "Manado Malay": "xmm", "Manam": "mva", "Manambu": "mle", "Manangba": "nmm", "Manangkari": "znk", "Manao": "awd-man", "Manchu": "mnc", "Manda (Australia)": "zma", "Manda (India)": "mha", "Manda (Tanzania)": "mgs", "Mandahuaca": "mht", "Mandaic": "mid", "Mandailing Batak": "btm", "Mandalorian": "art-man", "Mandan": "mhq", "Mandandanyi": "zmk", "Mandar": "mdr", "Mandara": "tbf", "Mandari": "mqu", "Mandarin": "cmn", "Mandeali": "mjl", "Mander": "mqr", "Mandingo": "man", "Mandinka": "mnk", "Mandjak": "mfv", "Mandobo Atas": "aax", "Mandobo Bawah": "bwp", "Manem": "jet", "Mang": "zng", "Mangala": "mem", "Mangarayi": "mpc", "Mangarevan": "mrv", "Mangas": "zns", "Mangayat": "myj", "Mangbetu": "mdj", "Mangbutu": "mdk", "Mangerr": "zme", "Mangga Buang": "mmo", "Manggarai": "mqy", "Mangghuer": "xgn-mgr", "Mango": "mge", "Mangole": "mqc", "Mangseng": "mbh", "Manigri-Kambolé Ede Nago": "xkb", "Manikion": "mnx", "Manipa": "mqp", "Manipuri": "mni", "Mankanya": "knf", "Mankiyali": "nlm", "Manna-Dora": "mju", "Mannan": "mjv", "Mano": "mev", "Manombai": "woo", "Mansaka": "msk", "Mansi": "mns", "Mansoanka": "msw", "Manta": "myg", "Mantsi": "nty", "Manumanaw Karen": "kxf", "Manusela": "wha", "Manx": "gv", "Manya": "mzj", "Manyawa": "mny", "Manza": "mzv", "Mao Naga": "nbi", "Maonan": "mmd", "Maore Comorian": "swb", "Maori": "mi", "Mape": "mlh", "Mapena": "mnm", "Mapia": "mpy", "Mapidian": "mpw", "Mapos Buang": "bzh", "Mapoyo": "mcg", "Mapudungun": "arn", "Mapun": "sjm", "Maquiritari": "mch", "Mara": "mec", "Mara Chin": "mrh", "Marachi": "lri", "Maraghei": "vmh", "Maragus": "mrs", "Maram Naga": "nma", "Marama": "lrm", "Maranao": "mrw", "Maranungku": "zmr", "Mararit": "mgb", "Marathi": "mr", "Maratino": "sai-mar", "Marau": "mvr", "Marawan": "awd-mar", "Marba": "mpg", "Marenje": "vmr", "Marfa": "mvu", "Margany": "zmc", "Marghi South": "mfm", "Margi": "mrt", "Margu": "mhg", "Maria": "mds", "Mariaté": "awd-mrt", "Maricopa": "mrc", "Maridan": "zmd", "Maridjabin": "zmj", "Marik": "dad", "Marimanindji": "zmm", "Marind": "mrz", "Maring": "mbw", "Maring Naga": "nng", "Maringarr": "zmt", "Marino": "mrb", "Mariri": "mqi", "Maritime Sign Language": "nsr", "Maritsauá": "msp", "Mariupol Greek": "grk-mar", "Mariyedi": "zmy", "Marka": "rkm", "Markweeta": "enb", "Marma": "rmz", "Maroon Spirit Language": "cpe-mar", "Marovo": "mvo", "Marriammu": "xru", "Marrithiyel": "mfr", "Marrucinian": "umc", "Marshallese": "mh", "Marsian": "ims", "Martha's Vineyard Sign Language": "mre", "Marti Ke": "zmg", "Martu Wangka": "mpj", "Martuthunira": "vma", "Marwari": "mwr", "Marúbo": "mzr", "Masaba": "myx", "Masadiit Itneg": "tis", "Masakará": "sai-msk", "Masalit": "mls", "Masana": "mcn", "Masbate Sorsogon": "bks", "Masbatenyo": "msb", "Mashco Piro": "cuj", "Mashi": "mho", "Masimasi": "ism", "Masiwang": "bnf", "Maskelynes": "klv", "Maslam": "msv", "Masmaje": "mes", "Massachusett": "wam", "Massalat": "mdg", "Massep": "mvs", "Matagalpa": "mtn", "Matal": "mfh", "Matanawi": "sai-mat", "Matbat": "xmt", "Matengo": "mgv", "Matepi": "mqe", "Matigsalug Manobo": "mbt", "Matipuhy": "mzo", "Matlatzinca": "mat", "Mato": "met", "Mato Grosso Arára": "axg", "Mator": "mtm", "Matsés": "mcf", "Mattole": "mvb", "Matukar": "mjk", "Matumbi": "mgw", "Matya Samo": "stj", "Matís": "mpq", "Maung": "mph", "Mauritian Creole": "mfe", "Mauritian Sign Language": "lsy", "Mauwake": "mhl", "Mawa": "mcw", "Mawak": "mjj", "Mawan": "mcz", "Mawayana": "mzx", "Mawchi": "mke", "Mawes": "mgk", "Maxakalí": "mbl", "Maxi Gbe": "mxl", "Maya Samo": "sym", "Mayaguduna": "xmy", "Mayangna": "yan", "Mayawali": "yxa", "Maybrat": "ayz", "Mayeka": "myc", "Mayi-Thakurti": "xyt", "Maykulan": "mnt", "Maynas": "sai-mys", "Mayo": "mfy", "Mayogo": "mdm", "Mayoyao Ifugao": "ifu", "Maypure": "awd-mpr", "Mazagway": "dkx", "Mazaltepec Zapotec": "zpy", "Mazanderani": "mzn", "Mazatlán Mazatec": "vmz", "Mazatlán Mixe": "mzl", "Mba": "mfc", "Mbabaram": "vmb", "Mbala": "mdp", "Mbalanhu": "lnb", "Mbandja": "zmz", "Mbangala": "mxg", "Mbangi": "mgn", "Mbangwe": "zmn", "Mbara (Australia)": "mvl", "Mbara (Chad)": "mpk", "Mbariman-Gudhinma": "zmv", "Mbati": "mdn", "Mbato": "gwa", "Mbay": "myb", "Mbe": "mfo", "Mbe'": "mtk", "Mbelime": "mql", "Mbere": "mdt", "Mbesa": "zms", "Mbiywom": "aus-mbi", "Mbo (Cameroon)": "mbo", "Mbo (Congo)": "zmw", "Mboi": "moi", "Mboko": "mdu", "Mbole": "mdq", "Mbonga": "xmb", "Mbongno": "bgu", "Mbosi": "mdw", "Mbowe": "mxo", "Mbre": "mka", "Mbu'": "muc", "Mbudum": "xmd", "Mbugu": "mhd", "Mbugwe": "mgz", "Mbuko": "mqb", "Mbukushu": "mhw", "Mbula": "mna", "Mbula-Bwazza": "mbu", "Mbule": "mlb", "Mbulungish": "mbv", "Mbum": "mdd", "Mbunda": "mck", "Mbunga": "mgy", "Mburku": "bbt", "Mbuun": "zmp", "Mbwela": "mfu", "Mbyá Guaraní": "gun", "Me'en": "mym", "Mea": "meg", "Mebu": "mjn", "Mecayapan Nahuatl": "nhx", "Medebur": "mjm", "Medefaidrin": "dmf", "Media Lengua": "mue", "Mednyj Aleut": "mud", "Medumba": "byv", "Mefele": "mfj", "Megam": "mef", "Megleno-Romanian": "ruq", "Mehek": "nux", "Mehináku": "mmh", "Mehri": "gdq", "Mekeo": "mek", "Mekmek": "mvk", "Mekwei": "msf", "Mel-Khaonh": "hkn", "Mele-Fila": "mxe", "Melo": "mfx", "Melpa": "med", "Memoni": "mby", "Mendalam Kayan": "xkd", "Mendankwe-Nkwen": "mfd", "Mende": "men", "Mengaka": "xmg", "Mengen": "mee", "Menien": "sai-men", "Menka": "mea", "Menominee": "mez", "Mentawai": "mwv", "Menya": "mcr", "Meoswar": "mvx", "Mer": "mnu", "Meramera": "mxm", "Merei": "lmb", "Merey": "meq", "Meriam": "ulk", "Merlav": "mrm", "Meroitic": "xmr", "Meru": "mer", "Mesaka": "iyo", "Mese": "mci", "Mesme": "zim", "Mesmes": "mys", "Mesqan": "mvz", "Messapic": "cms", "Meta'": "mgo", "Metlatónoc Mixtec": "mxv", "Mewari": "mtr", "Mewati": "wtm", "Mexican Sign Language": "mfs", "Meyah": "mej", "Mezontla Popoloca": "pbe", "Mezquital Otomi": "ote", "Meänkieli": "fit", "Mfinu": "zmf", "Mfumte": "nfu", "Mgbo": "gmz", "Mi'kmaq": "mic", "Miami": "mia", "Mian": "mpt", "Miani": "pla", "Michif": "crg", "Michigamea": "cmm", "Michoacán Mazahua": "mmc", "Michoacán Nahuatl": "ncl", "Mid Grand Valley Dani": "dnt", "Mid-Southern Banda": "bjo", "Middle Armenian": "axm", "मध्य असमिया": "inc-mas", "Middle Bengali": "inc-mbn", "Middle Breton": "xbm", "Middle Chinese": "ltc", "Middle Cornish": "cnx", "Middle Dutch": "dum", "Middle English": "enm", "Middle French": "frm", "Middle Gujarati": "inc-mgu", "Middle High German": "gmh", "Middle Irish": "mga", "Middle Kannada": "dra-mkn", "Middle Khmer": "xhm", "Middle Korean": "okm", "Middle Low German": "gml", "Middle Median": "xme-mid", "Middle Mon": "mkh-mmn", "Middle Mongol": "xng", "Middle Newar": "nwx", "Middle Norwegian": "gmq-mno", "Middle Oriya": "inc-mor", "Middle Persian": "pal", "Middle Vietnamese": "mkh-mvi", "Middle Watut": "mpl", "Middle Welsh": "wlm", "Midob": "mei", "Migaama": "mmy", "Migabac": "mpp", "Miji": "sjl", "Miju": "mxj", "Mikasuki": "mik", "Milang": "und-mil", "Mili": "ymh", "Millcayac": "sai-mil", "Miltu": "mlj", "Miluk": "iml", "Milyan": "imy", "Mimi of Decorse": "und-mmd", "Mimi of Nachtigal": "und-mmn", "Min Bei": "mnp", "Min Dong": "cdo", "Min Nan": "nan", "Min Zhong": "czo", "Mina": "hna", "Minaean": "inm", "Minang": "xrg", "Minangkabau": "min", "Minanibai": "mcv", "Minaveha": "mvn", "Minderico": "drc", "Mindiri": "mpn", "Mingang Doso": "mko", "Mingo": "iro-min", "Mingrelian": "xmf", "Minica Huitoto": "hto", "Minidien": "wii", "Minigir": "vmg", "Minjungbal": "xjb", "Minkin": "xxm", "Minoan": "omn", "Minokok": "mqq", "Minriq": "mnq", "Mintil": "mzt", "Miqie": "yiq", "Mirandese": "mwl", "Miraya Bikol": "rbl", "Mire": "mvh", "Mirgan": "zrg", "Miriti": "mmv", "Miriwoong Sign Language": "rsm", "Miriwung": "mep", "Mirpur Panjabi": "pmu", "Misantla Totonac": "tlc", "Miship": "mjs", "Misima-Paneati": "mpx", "Mising": "mrg", "Miskito": "miq", "Mitla Zapotec": "zaw", "Mitlatongo Mixtec": "vmm", "Mittu": "mwu", "Mituku": "zmq", "Miu": "mpo", "Miwa": "vmi", "Mixed Great Andamanese": "gac", "Mixifore": "mfg", "Mixtepec Mixtec": "mix", "Mixtepec Zapotec": "zpm", "Miya": "mkf", "Miyako": "mvi", "Miyobe": "soy", "Mizo": "lus", "Mlabri": "mra", "Mlahsö": "lhs", "Mlap": "kja", "Mlomp": "mlo", "Mmaala": "mmu", "Mmani": "buy", "Mmen": "bfm", "Mo": "wkd", "Mo'da": "gbn", "Moabite": "obm", "Moba": "mfq", "Mobilian": "mod", "Mobumrin Aizi": "ahm", "Mocana": "sai-mcn", "Mochi": "old", "Mochica": "omc", "Mocho": "mhc", "Mocoví": "moc", "Modang": "mxd", "Modole": "mqo", "Moere": "mvq", "Mofu-Gudur": "mif", "Mogholi": "mhj", "Mogum": "mou", "Mohawk": "moh", "Mohegan-Pequot": "xpq", "Moi (Congo)": "mow", "Moi (Indonesia)": "mxn", "Moikodi": "mkp", "Moingi": "mwz", "Mojave": "mov", "Moji": "ymi", "Mok": "mqt", "Moken": "mwt", "Mokerang": "mft", "Mokilese": "mkj", "Moklen": "mkm", "Mokole": "mkl", "Mokpwe": "bri", "Moksha": "mdf", "Molale": "mbe", "Molbog": "pwm", "Moldova Sign Language": "vsi", "Molengue": "bxc", "Molima": "mox", "Molmo One": "aun", "Molo": "zmo", "Molof": "msl", "Moloko": "mlw", "Mom Jango": "ver", "Moma": "myl", "Momare": "msz", "Mombo Dogon": "dmb", "Mombum": "mso", "Momina": "mmb", "Momuna": "mqf", "Mon": "mnw", "Monastic Sign Language": "mzg", "Mondropolon": "npn", "Mondé": "mnd", "Mongghul": "xgn-mgl", "Mongo": "lol", "Mongol": "mgt", "Mongolian": "mn", "Mongolian Sign Language": "msr", "Mongondow": "mog", "Moni": "mnz", "Monimbo": "mom", "Mono (California)": "mnr", "Mono (Cameroon)": "mru", "Mono (Congo)": "mnh", "Monom": "moo", "Monsang Naga": "nmh", "Montagnais": "moe", "Montana Salish": "fla", "Montol": "mtl", "Monumbo": "mxk", "Monzombo": "moj", "Moo": "gwg", "Moore": "mos", "Moose Cree": "crm", "Mopan Maya": "mop", "Mor (Austronesian)": "mhz", "Mor (Papuan)": "moq", "Moraid": "msg", "Moran": "sit-mor", "Morawa": "mze", "Morelos Nahuatl": "nhm", "Morerebi": "xmo", "Moresada": "msx", "Mori Atas": "mzq", "Mori Bawah": "xmz", "Morigi": "mdb", "Moro": "mor", "Moroccan Amazigh": "zgh", "Moroccan Arabic": "ary", "Moroccan Sign Language": "xms", "Morokodo": "mgc", "Morom": "bdo", "Moronene": "mqn", "Morori": "mok", "Morouas": "mrp", "Mortlockese": "mrl", "Moru": "mgd", "Mosimo": "mqv", "Moskona": "mtj", "Mota": "mtt", "Motembo": "tmv", "Motu": "meu", "Mouk-Aria": "mwh", "Mount Iraya Agta": "atl", "Mount Iriga Agta": "agz", "Mountain Koiari": "kpx", "Mouwase": "jmw", "Movima": "mzp", "Moyadan Itneg": "ity", "Moyon Naga": "nmo", "Mozambican Sign Language": "mzy", "Mozarabic": "mxi", "Mpade": "mpi", "Mpalitjanh": "xpj", "Mpi": "mpz", "Mpiemo": "mcx", "Mpiin": "bnt-mpi", "Mpinda": "pnd", "Mpongmpong": "mgg", "Mpoto": "mpa", "Mpotovoro": "mvt", "Mpuono": "bnt-mpu", "Mpur": "akc", "Mro Chin": "cmr", "Mru": "mro", "Mser": "kqx", "Muak Sa-aak": "ukk", "Mualang": "mtd", "Mubami": "tsx", "Mubi": "mub", "Mucuchí": "sai-muc", "Muda": "ymd", "Mudburra": "dmw", "Mudu Koraga": "vmd", "Muduapa": "wiv", "Muduga": "udg", "Muellama": "sai-mue", "Mufian": "aoj", "Muher": "sem-mhr", "Muinane": "bmr", "Mukha-Dora": "mmk", "Mukulu": "moz", "Mulaha": "mfw", "Mulam": "mlm", "Mulao": "giu", "Mullu Kurumba": "kpb", "Mullukmulluk": "mpb", "Muluridyi": "vmu", "Mum": "kqa", "Mumuye": "mzm", "Muna": "mnb", "Munda": "unx", "Mundabli": "boe", "Mundang": "mua", "Mundani": "mnf", "Mundari": "unr", "Mundat": "mmf", "Mundolinco": "art-mun", "Mundurukú": "myu", "Mungaka": "mhk", "Mungbam": "mij", "Munggui": "mth", "Mungkip": "mpv", "Muniche": "myr", "Munit": "mtc", "Munji": "mnj", "Munsee": "umu", "Muong": "mtq", "Mur Pano": "tkv", "Muratayak": "asx", "Murik (Malaysia)": "mxr", "Murik (New Guinea)": "mtf", "Murkim": "rmh", "Murle": "mur", "Murrinh-Patha": "mwf", "Mursi": "muz", "Murui Huitoto": "huu", "Murupi": "mqw", "Muruwari": "zmu", "Musan": "mmp", "Musar": "mmi", "Musasa": "smm", "Musey": "mse", "Musgu": "mug", "Musi": "mui", "Muskum": "mje", "Musom": "msu", "Mussau-Emira": "emi", "Muthuvan": "muv", "Mutu": "tuc", "Muya": "mvm", "Muyang": "muy", "Muyuw": "myw", "Muzi": "ymz", "Muzo": "sai-muz", "Mvanip": "mcj", "Mvuba": "mxh", "Mwaghavul": "sur", "Mwali Comorian": "wlc", "Mwan": "moa", "Mwani": "wmw", "Mwatebu": "mwa", "Mwera": "mwe", "Mwimbi-Muthambi": "mws", "Mwotlap": "mlv", "Mycenaean Greek": "gmy", "Myene": "mye", "Mysian": "yms", "Mzieme Naga": "nme", "Mághdì": "gmd", "Mòcheno": "mhn", "Mün Chin": "mwq", "Mündü": "muh", "N'Ko": "nqo", "Na": "nbt", "Na'vi": "art-nav", "Naaba": "nao", "Naba": "mne", "Nabak": "naf", "Nabi": "mty", "Nachering": "ncd", "Nadruvian": "ndf", "Nadëb": "mbj", "Nafaanra": "nfr", "Nafi": "srf", "Nafri": "nxx", "Naga Pidgin": "nag", "Nagarchal": "nbg", "Nage": "nxe", "Nagtipunan Agta": "phi-nag", "Nagu": "ngr", "Nagumi": "ngv", "Nahali": "nlx", "Nahari": "nhh", "Nahavaq": "sns", "Nahuatl": "nah", "Nai": "bio", "Najdi Arabic": "ars", "Naka'ela": "nae", "Nakai": "nkj", "Nakame": "nib", "Nakanai": "nak", "Nakara": "nck", "Nake": "nbk", "Naki": "mff", "Nakwi": "nax", "Nalca": "nlc", "Nali": "nss", "Nalik": "nal", "Nalu": "naj", "Naluo Yi": "ylo", "Nalögo": "nlz", "Namakura": "nmk", "Namat": "nkm", "Nambikwara": "nab", "Nambo": "ncm", "Nambya": "nmq", "Namia": "nnm", "Namiae": "nvm", "Namibian Sign Language": "nbs", "Namla": "naa", "Namo": "mxw", "Namonuito": "nmt", "Namosi-Naitasiri-Serua": "bwb", "Namuyi": "nmy", "Nanai": "gld", "Nancere": "nnc", "Nande": "nnb", "Nandi": "niq", "Nanerigé Sénoufo": "sen", "Nanga Dama Dogon": "nzz", "Nankina": "nnk", "Nanti": "cox", "Nanticoke": "nnt", "Nanubae": "afk", "Naolan": "nai-nao", "Napu": "npy", "Nar Phu": "npa", "Nara": "nrb", "Narak": "nac", "Narango": "nrg", "Narau": "nxu", "Narim": "loh", "Naro": "nhr", "Narom": "nrm", "Narragansett": "xnt", "Narua": "nru", "Narungga": "nnr", "Nasal": "nsy", "Nasarian": "nvh", "Nasioi": "nas", "Naskapi": "nsk", "Nasu": "ywq", "Natagaimas": "nts", "Natchez": "ncz", "Nateni": "ntm", "Nathembo": "nte", "Natioro": "nti", "Natú": "sai-nat", "Natügu": "ntu", "Nauete": "nxa", "Naukanski": "ynk", "Nauna": "ncn", "Nauo": "nwo", "Nauruan": "na", "Navajo": "nv", "Navarro-Aragonese": "roa-oan", "Navut": "nsw", "Nawaru": "nwr", "Nawathinehena": "nwa", "Nawdm": "nmz", "Nawuri": "naw", "Naxi": "nxq", "Nayi": "noz", "Ncane": "ncr", "Nchumbulu": "nlu", "Nda'nda'": "nnz", "Ndai": "gke", "Ndaka": "ndk", "Ndali": "ndh", "Ndam": "ndm", "Ndamba": "ndj", "Ndambomo": "nxo", "Ndasa": "nda", "Ndau": "ndc", "Nde-Gbite": "ned", "Nde-Nsele-Nta": "ndd", "Ndemli": "nml", "Ndendeule": "dne", "Ndengereko": "ndg", "Nding": "eli", "Ndjébbana": "djj", "Ndo": "ndp", "Ndobo": "ndw", "Ndoe": "nbb", "Ndogo": "ndz", "Ndolo": "ndl", "Ndom": "nqm", "Ndombe": "ndq", "Ndonga": "ng", "Ndoola": "ndr", "Ndrulo": "dno", "Nduga": "ndx", "Ndumu": "nmd", "Ndunda": "nuh", "Ndunga": "ndt", "Ndut": "ndv", "Ndyuka-Trio Pidgin": "njt", "Ndzwani Comorian": "wni", "Neapolitan": "nap", "Nedebang": "nec", "Nefamese": "nef", "Nefusa": "jbn", "Negerhollands": "dcr", "Negeri Sembilan Malay": "zmi", "Negidal": "neg", "Nehan": "nsn", "Nek": "nif", "Nekgini": "nkg", "Neko": "nej", "Neku": "nek", "Neme": "nex", "Nemi": "nem", "Nen": "nqn", "Nend": "anh", "Nengone": "nen", "Neo": "neu", "Nepalese Sign Language": "nsp", "Nepali": "ne", "Nepali Kurux": "kxl", "Nete": "net", "Neve'ei": "vnm", "Neverver": "lgk", "New Caledonian Javanese": "jas", "New River Shasta": "nai-nrs", "New Zealand Sign Language": "nzs", "Newar": "new", "Neyo": "ney", "Nez Perce": "nez", "Nga La": "hlt", "Ngaanyatjarra": "ntj", "Ngadha": "nxg", "Ngadjunmaya": "nju", "Ngadjuri": "jui", "Ngaing": "nnf", "Ngaju": "nij", "Ngala": "nud", "Ngalakan": "nig", "Ngalkbun": "ngk", "Ngalum": "szb", "Ngam": "nmc", "Ngamambo": "nbv", "Ngambay": "sba", "Ngamini": "nmv", "Ngamo": "nbh", "Ngan'gityemerri": "nam", "Nganakarti": "xnk", "Nganasan": "nio", "Ngandi": "nid", "Ngando (Central African Republic)": "ngd", "Ngando (Congo)": "nxd", "Ngandyera": "nne", "Ngangam": "gng", "Ngantangarra": "ntg", "Nganyaywana": "nyx", "Ngardi": "rxd", "Ngarigu": "xni", "Ngarinman": "nbj", "Ngarinyin": "ung", "Ngarla": "nrk", "Ngarluma": "nrl", "Ngarrindjeri": "nay", "Ngas": "anc", "Ngasa": "nsg", "Ngatik Men's Creole": "ngm", "Ngawn Chin": "cnw", "Ngawun": "nxn", "Ngazidja Comorian": "zdj", "Ngbaka": "nga", "Ngbaka Ma'bo": "nbm", "Ngbaka Manza": "ngg", "Ngbee": "jgb", "Ngbinda": "nbd", "Ngbundu": "nuu", "Ngelima": "agh", "Ngemba": "nge", "Ngen": "gnj", "Ngendelengo": "nql", "Ngeq": "ngt", "Ngete": "nnn", "Nggem": "nbq", "Nggwahyi": "ngx", "Ngie": "ngj", "Ngiemboon": "nnh", "Ngile": "jle", "Ngindo": "nnq", "Ngiti": "niy", "Ngiyambaa": "wyb", "Ngizim": "ngi", "Ngkoth": "aus-ngk", "Ngkâlmpw Kanum": "kcd", "Ngochang": "tbq-ngo", "Ngom": "nra", "Ngomba": "jgo", "Ngombale": "nla", "Ngombe (Central African Republic)": "nmj", "Ngombe (Congo)": "ngc", "Ngong": "nnx", "Ngongo": "noq", "Ngoni": "ngo", "Ngoreme": "ngq", "Ngoshie": "nsh", "Ngul": "nlo", "Ngulu": "ngp", "Nguluwan": "nuw", "Ngumbi": "nui", "Ngunawal": "xul", "Ngundi": "ndn", "Ngundu": "nue", "Ngungwel": "ngz", "Ngurmbur": "nrx", "Nguôn": "nuo", "Ngwaba": "ngw", "Ngwe": "nwe", "Ngwo": "ngn", "Ngäbere": "gym", "Nhanda": "nha", "Nheengatu": "yrl", "Nhirrpi": "hrp", "Nhuwala": "nhf", "Nias": "nia", "Nicaraguan Creole": "bzk", "Nicaraguan Sign Language": "ncs", "Nicola": "ath-nic", "Niellim": "nie", "Nigeria Mambila": "mzk", "Nigerian Pidgin": "pcm", "Nigerian Sign Language": "nsi", "Nihali": "nll", "Nii": "nii", "Niksek": "gbe", "Nila": "nil", "Nilamba": "nim", "Nimadi": "noe", "Nimanbur": "nmp", "Nimbari": "nmr", "Nimboran": "nir", "Nimi": "nis", "Nimo": "niw", "Nimoa": "nmw", "Ninam": "shb", "Nindi": "nxi", "Ningera": "nby", "Ninggerum": "nxr", "Ningil": "niz", "Ninia Yali": "nlk", "Ninzo": "nin", "Nipsan": "nps", "Nisa": "njs", "Nisenan": "nsz", "Nisga'a": "ncg", "Nisi": "yso", "Niuafo'ou": "num", "Niuatoputapu": "nkp", "Niuean": "niu", "Nivaclé": "cag", "Nivkh": "niv", "Niwer Mil": "hrc", "Niya Prakrit": "pra-niy", "Njalgulgule": "njl", "Njebi": "nzb", "Njen": "njj", "Njerep": "njr", "Njyem": "njy", "Nkami": "nkq", "Nkangala": "nkn", "Nkari": "nkz", "Nkem-Nkum": "isi", "Nkhumbi": "khu", "Nkongho": "nkc", "Nkonya": "nko", "Nkoroo": "nkx", "Nkoya": "nka", "Nkukoli": "nbo", "Nkutu": "nkw", "Nnam": "nbp", "Nobiin": "fia", "Nobonob": "gaw", "Nocamán": "nom", "Nocte Naga": "njb", "Nogai": "nog", "Noiri": "noi", "Nokuku": "nkk", "Nomaande": "lem", "Nomane": "nof", "Nomatsiguenga": "not", "Nomlaki": "nol", "Nomu": "noh", "Nong Zhuang": "zhn", "Nonuya": "noj", "Nooksack": "nok", "Noon": "snf", "Noone": "nhu", "Nootka": "nuk", "Nopala Chatino": "cya", "Noric": "nrc", "Norman": "nrf", "Norn": "nrn", "Norra": "nrr", "North Alaskan Inupiatun": "esi", "North Ambrym": "mmg", "North Asmat": "nks", "North Awyu": "yir", "North Babar": "bcd", "North Boma": "boh", "North Central Mixe": "neq", "North Efate": "llp", "North Fali": "fll", "North Frisian": "frr", "North Giziga": "gis", "North Levantine Arabic": "apc", "North Marquesan": "mrq", "North Mesopotamian Arabic": "ayp", "North Mofu": "mfk", "North Moluccan Malay": "max", "North Muyu": "kti", "North Nuaulu": "nni", "North Picene": "nrp", "North Slavey": "scs", "North Tairora": "tbg", "North Tanna": "tnn", "North Wahgi": "whg", "North Watut": "una", "Northeast Kiwai": "kiw", "Northeast Maidu": "nmu", "Northeast Pashayi": "aee", "Northeastern Dinka": "dip", "Northeastern Pomo": "pef", "Northern Alta": "aqn", "Northern Altai": "atv", "Northern Amami-Oshima": "ryn", "Northern Bai": "bfc", "Northern Bontoc": "rbk", "Northern Catanduanes Bicolano": "cts", "Northern Dagara": "dgi", "Northern East Cree": "crl", "Northern Emberá": "emp", "Northern Ghale": "ghh", "Northern Grebo": "gbo", "Northern Guiyang Hmong": "huj", "Northern Haida": "hdn", "Northern Hindko": "hno", "Northern Huishui Hmong": "hmi", "Northern Kalapuya": "nrt", "Northern Kam": "doc", "Northern Kankanay": "xnn", "Northern Khmer": "kxm", "Northern Kissi": "kqs", "Northern Kurdish": "kmr", "Northern Lorung": "lbr", "Northern Luri": "lrc", "Northern Mashan Hmong": "hmp", "Northern Muji": "ymx", "Northern Ndebele": "nd", "Northern Ngbandi": "ngb", "Northern Nisu": "yiv", "Northern Nuni": "nuv", "Northern Oaxaca Nahuatl": "nhy", "Northern Ohlone": "cst", "Northern One": "onr", "Northern Paiute": "pao", "Northern Pame": "pmq", "Northern Pomo": "pej", "Northern Puebla Nahuatl": "ncj", "Northern Pumi": "pmi", "Northern Pwo": "pww", "Northern Qiandong Miao": "hea", "Northern Qiang": "cng", "Northern Rengma Naga": "nnl", "Northern Roglai": "rog", "Northern Saharan Berber": "mzb", "Northern Sami": "se", "Northern Selkup": "sel-nor", "Northern Sierra Miwok": "nsq", "Northern Sotho": "nso", "Northern Subanen": "stb", "Northern Tarahumara": "thh", "Northern Tepehuan": "ntp", "Northern Thai": "nod", "Northern Tidong": "ntd", "Northern Tlaxiaco Mixtec": "xtn", "Northern Toussian": "tsp", "Northern Tujia": "tji", "Northern Tutchone": "ttm", "Northern Valley Yokuts": "nai-nvy", "Northern Yukaghir": "ykg", "Northwest Alaska Inupiatun": "esk", "Northwest Gbaya": "gya", "Northwest Maidu": "mjd", "Northwest Oaxaca Mixtec": "mxa", "Northwest Pashayi": "glh", "Northwestern Dinka": "diw", "Northwestern Fars": "faz", "Northwestern Ojibwa": "ojb", "Northwestern Tamang": "tmk", "Norwegian": "no", "Norwegian Bokmål": "nb", "Norwegian Nynorsk": "nn", "Norwegian Sign Language": "nsl", "Notre": "bly", "Notsi": "ncf", "Nottoway": "ntw", "Nottoway-Meherrin": "nwy", "Novial": "nov", "Noxilo": "art-nox", "Noy": "noy", "Nsari": "asj", "Nsenga": "nse", "Nshi": "nsc", "Nsong": "soo", "Nsongo": "nsx", "Ntcham": "bud", "Ntomba": "nto", "Ntra'ngith": "dgt", "Nubaca": "baf", "Nubi": "kcn", "Nuer": "nus", "Nuguria": "nur", "Nuk": "noc", "Nukak Makú": "mbr", "Nukna": "klt", "Nukuini": "nuc", "Nukumanu": "nuq", "Nukunu": "nnv", "Nukunul": "xnu", "Nukuoro": "nkr", "Numana": "nbr", "Numanggang": "nop", "Numbami": "sij", "Nume": "tgs", "Numee": "kdk", "Numidian": "nxm", "Nung": "nut", "Nungali": "nug", "Nunggubuyu": "nuy", "Nungon": "paa-nun", "Nungu": "rin", "Nupbikha": "npb", "Nupe": "nup", "Nusa Laut": "nul", "Nusu": "nuf", "Nutabe": "cba-nut", "Nyabwa": "nwb", "Nyah Kur": "cbn", "Nyaheun": "nev", "Nyakyusa": "nyy", "Nyali": "nlj", "Nyam": "nmi", "Nyamal": "nly", "Nyambo": "now", "Nyamusa-Molo": "nwm", "Nyamwanga": "mwn", "Nyamwezi": "nym", "Nyaneka": "nyk", "Nyang'i": "nyp", "Nyanga (Congo)": "nyj", "Nyanga (Togo)": "ayg", "Nyanga-li": "nyc", "Nyangatom": "nnj", "Nyangbo": "nyb", "Nyangga": "nny", "Nyangumarta": "nna", "Nyankole": "nyn", "Nyarafolo Senoufo": "sev", "Nyaturu": "rim", "Nyaw": "nyw", "Nyawaygi": "nyt", "Nyemba": "nba", "Nyengo": "nye", "Nyenkha": "neh", "Nyeu": "nyl", "Nyigina": "nyh", "Nyiha": "nih", "Nyika": "nkt", "Nyimang": "nyi", "Nyindrou": "lid", "Nyindu": "nyg", "Nyishi": "njz", "Nyiyaparli": "xny", "Nyokon": "nvo", "Nyole (Kenya)": "nyd", "Nyole (Uganda)": "nuj", "Nyong": "muo", "Nyoro": "nyo", "Nyulnyul": "nyv", "Nyunga": "nys", "Nyungwe": "nyu", "Nyâlayu": "yly", "Nzadi": "nzd", "Nzakambay": "nzy", "Nzakara": "nzk", "Nzanyi": "nja", "Nzima": "nzi", "Ná-Meo": "neo", "Nüpode Huitoto": "hux", "Nǀuu": "ngh", "O'chi'chi'": "xoc", "O'du": "tyh", "O'odham": "ood", "Obanliku": "bzy", "Obispeño": "obi", "Oblo": "obl", "Obo Manobo": "obo", "Obokuitai": "afz", "Obolo": "ann", "Obulom": "obu", "Ocaina": "oca", "Occitan": "oc", "Ocotepec Mixtec": "mie", "Ocotlán Zapotec": "zac", "Od": "odk", "Odiai": "bhf", "Odoodee": "kkc", "Odual": "odu", "Odut": "oda", "Ofayé": "opy", "Ofo": "ofo", "Ogbah": "ogc", "Ogbia": "ogb", "Ogbogolo": "ogg", "Ogbronuagum": "ogu", "Ogea": "eri", "Oirata": "oia", "Ojibwe": "oj", "Ojitlán Chinantec": "chj", "Okanagan": "oka", "Oki-No-Erabu": "okn", "Okiek": "oki", "Okinawan": "ryu", "Oko-Eni-Osayen": "oks", "Oko-Juwoi": "okj", "Okobo": "okb", "Okodia": "okd", "Okolod": "kqv", "Okpamheri": "opa", "Okpe (Northwestern Edo)": "okx", "Okpe (Southwestern Edo)": "oke", "Okpela": "atg", "Oksapmin": "opm", "Oku": "oku", "Okwanuchu": "nai-okw", "Old Anatolian Turkish": "trk-oat", "Old Armenian": "xcl", "Old Avar": "oav", "Old Bengali": "inc-obn", "Old Breton": "obt", "Old Burmese": "obr", "Old Catalan": "roa-oca", "Old Chinese": "och", "Old Church Slavonic": "cu", "Old Cornish": "oco", "Old Czech": "zlw-ocs", "Old Danish": "gmq-oda", "Old Dutch": "odt", "Old East Slavic": "orv", "Old English": "ang", "Old French": "fro", "Old Frisian": "ofs", "Old Galician-Portuguese": "roa-opt", "Old Georgian": "oge", "Old Gujarati": "inc-ogu", "Old High German": "goh", "पुरानी हिंदी": "inc-ohi", "Old Hungarian": "ohu", "Old Irish": "sga", "Old Japanese": "ojp", "Old Javanese": "kaw", "Old Kamta": "inc-ork", "Old Kannada": "dra-okn", "Old Kentish Sign Language": "okl", "Old Khmer": "okz", "Old Komi": "urj-koo", "Old Korean": "oko", "Old Leonese": "roa-ole", "Old Lithuanian": "olt", "Old Manipuri": "omp", "Old Marathi": "omr", "Old Median": "xme-old", "Old Mon": "omx", "Old Norse": "non", "Old Novgorodian": "zle-ono", "Old Nubian": "onw", "Old Occitan": "pro", "Old Oriya": "inc-oor", "Old Ossetic": "oos", "Old Persian": "peo", "Old Polish": "zlw-opl", "Old Prussian": "prg", "Old Punjabi": "inc-opa", "Old Ruthenian": "zle-ort", "Old Saxon": "osx", "Old South Arabian": "sem-srb", "Old Spanish": "osp", "Old Sundanese": "osn", "Old Swedish": "gmq-osw", "Old Tamil": "oty", "Old Tati": "xme-ott", "Old Telugu": "dra-ote", "Old Tibetan": "otb", "Old Tupi": "tpw", "Old Turkic": "otk", "Old Uyghur": "oui", "Old Welsh": "owl", "Olekha": "ole", "Ollari": "gdb", "Olo": "ong", "Oloma": "olm", "Olrat": "olr", "Olu'bo": "lul", "Olukumi": "ulb", "Olulumo-Ikom": "iko", "Oluta Popoluca": "plo", "Olutsotso": "lto", "Omagua": "omg", "Omaha-Ponca": "oma", "Omani Arabic": "acx", "Omba": "omb", "Ombamba": "mbm", "Ombo": "oml", "Ometepec Nahuatl": "nht", "Omi": "omi", "Omok": "omk", "Omotik": "omt", "Omurano": "omu", "Oneida": "one", "Ong": "oog", "Ongota": "bxe", "Onin": "oni", "Onjob": "onj", "Ono": "ons", "Onobasulu": "onn", "Onondaga": "ono", "Ontenu": "ont", "Ontong Java": "ojv", "Oorlams": "oor", "Opao": "opo", "Opata": "opt", "Opuuo": "lgn", "Opón": "sai-opo", "Oraon Sadri": "sdr", "Orejón": "ore", "Oring": "org", "Oriya": "or", "Orizaba Nahuatl": "nlv", "Orléanais": "roa-orl", "Ormu": "orz", "Ormuri": "oru", "Oro": "orx", "Oro Win": "orw", "Oroch": "oac", "Oroha": "ora", "Orok": "oaa", "Orokaiva": "okv", "Oroko": "bdu", "Orokolo": "oro", "Oromo": "om", "Oroqen": "orh", "Orowe": "bpk", "Oruma": "orr", "Orya": "ury", "Osage": "osa", "Osamayi": "syx", "Osatu": "ost", "Oscan": "osc", "Osing": "osi", "Ososo": "oso", "Ossetian": "os", "Ot Danum": "otd", "Otank": "uta", "Oti": "oti", "Otomaco": "sai-oto", "Otoro": "otr", "Ottawa": "otw", "Ottoman Turkish": "ota", "Otuke": "otu", "Ouma": "oum", "Oune": "oue", "Owa": "stn", "Owenia": "wsr", "Owiniga": "owi", "Oy": "oyb", "Oya'oya": "oyy", "Oyda": "oyd", "Ozolotepec Zapotec": "zao", "Ozumacín Chinantec": "chz", "Pa": "ppt", "Pa Di": "pdi", "Pa'a": "pqa", "Pa'o Karen": "blk", "Pa-Hng": "pha", "Paama": "pma", "Paasaal": "sig", "Pacahuara": "pcp", "Pacoh": "pac", "Padoe": "pdo", "Paelignian": "pgn", "Paeonian": "ine-pae", "Pagi": "pgi", "Pagibete": "pae", "Pagu": "pgu", "Pahanan Agta": "apf", "Pahari-Potwari": "phr", "Pahi": "lgt", "Pahlavani": "phv", "Pai Tavytera": "pta", "Pai-lang": "tbq-plg", "Paicî": "pri", "Paikoneka": "awd-pai", "Paipai": "ppi", "Paisaci Prakrit": "inc-psc", "Paite": "pck", "Paiwan": "pwn", "Pajapan Nahuatl": "nhp", "Pak-Tong": "pkg", "Pakanha": "pkn", "Pakistan Sign Language": "pks", "Paku": "pku", "Paku Karen": "kpp", "Pal": "abw", "Palaic": "plq", "Palaka Senoufo": "plr", "Palantla Chinantec": "cpa", "Palauan": "pau", "Palawan Batak": "bya", "Paleni": "pnl", "Palenquero": "pln", "Palewyami": "nai-ply", "Pali": "pi", "Palikur": "plu", "Paliyan": "pcf", "Pallanganmiddang": "pmd", "Palor": "fap", "Palta": "sai-pal", "Palu'e": "ple", "Paluan": "plz", "Palya Bareli": "bpx", "Pam": "pmn", "Pambia": "pmb", "Pamigua": "sai-pam", "Pamlico": "pmk", "Pamona": "pmf", "Pamosu": "hih", "Pamplona Atta": "att", "Pana (Central Africa)": "pnz", "Pana (West Africa)": "pnq", "Panamanian Sign Language": "lsp", "Panamint": "par", "Panare": "pbh", "Panará": "kre", "Panasuan": "psn", "Panawa": "pwb", "Pancana": "pnp", "Panchpargania": "tdb", "Pande": "bkj", "Pangasinan": "pag", "Pangseng": "pgs", "Pangutaran Sama": "slm", "Pangwa": "pbr", "Pangwali": "pgg", "Panim": "pnr", "Paniya": "pcg", "Pankararé": "pax", "Pankararú": "paz", "Pankhu": "pkh", "Pannei": "pnc", "Panobo": "pno", "Panyjima": "pnw", "Panzaleo": "sai-pnz", "Pao": "ppa", "Papantla Totonac": "top", "Papapana": "ppn", "Papar": "dpp", "Papasena": "pas", "Papel": "pbo", "Papi": "ppe", "Papiamentu": "pap", "Papitalai": "pat", "Papora": "ppu", "Papua New Guinean Sign Language": "pgz", "Papuan Malay": "pmy", "Papuma": "ppm", "Para Naga": "pzn", "Parachi": "prc", "Paraguayan Guaraní": "gug", "Paraguayan Sign Language": "pys", "Parakanã": "pak", "Paranan": "prf", "Paranawát": "paf", "Paratió": "sai-par", "Paraujano": "pbg", "Parauk": "prk", "Parawen": "prw", "Pardhan": "pch", "Pardhi": "pcl", "Pare": "asa", "Pareci": "pab", "Paredarerme": "xpd", "Parenga": "pcj", "Parkari Koli": "kvx", "Parthian": "xpr", "Parya": "paq", "Pará Arára": "aap", "Pará Gavião": "gvp", "Pashto": "ps", "Pasi": "psq", "Pass Valley Yali": "yac", "Passé": "awd-pas", "Patagón": "sai-ptg", "Patamona": "pbc", "Patani": "ptn", "Pataxó Hã-Ha-Hãe": "pth", "Patep": "ptp", "Pathiya": "pty", "Patpatar": "gfk", "Pattani": "lae", "Pattani Malay": "mfa", "Pattapu": "ptq", "Patwin": "pwi", "Paulohi": "plh", "Paumarí": "pad", "Paunaca": "pnk", "Pauri Bareli": "bfb", "Pauserna": "psm", "Pawaia": "pwa", "Pawnee": "paw", "Payaguá": "sai-pyg", "Paynamar": "pmr", "Pazeh": "pzh", "Pe": "pai", "Pear": "pcb", "Pech": "pay", "Pecheneg": "xpc", "Peerapper": "xpw", "Peere": "pfe", "Pei": "ppq", "Pekal": "pel", "Pela": "bxd", "Pele-Ata": "ata", "Pemon": "aoc", "Penang Sign Language": "psg", "Penchal": "pek", "Pendau": "ums", "Pengo": "peg", "Pennsylvania German": "pdc", "Penobscot": "aaq", "Penrhyn": "pnh", "Pentlatch": "ptw", "Perai": "wet", "Peranakan Indonesian": "pea", "Perema": "wom", "Pericú": "nai-per", "Pero": "pip", "Persian": "fa", "Persian Sign Language": "psc", "Peruvian Sign Language": "prl", "Petapa Zapotec": "zpe", "Petats": "pex", "Petjo": "pey", "Peñoles Mixtec": "mil", "Phai": "prt", "Phake": "phk", "Phala": "ypa", "Phalura": "phl", "Phana'": "phq", "Phangduwali": "phw", "Phende": "pem", "Philippine Sign Language": "psp", "Philistine": "und-phi", "Phimbi": "phm", "Phoenician": "phn", "Phola": "ypg", "Pholo": "yip", "Phom": "nph", "Phong-Kniang": "pnx", "Phrae Pwo": "kjt", "Phrygian": "xpg", "Phu Thai": "pht", "Phuan": "phu", "Phudagi": "phd", "Phuie": "pug", "Phukha": "phh", "Phuma": "ypm", "Phunoi": "pho", "Phuong": "phg", "Phupa": "ypp", "Phupha": "yph", "Phuthi": "bnt-phu", "Phuza": "ypz", "Piamatsina": "ptr", "Piame": "pin", "Piapoco": "pio", "Piaroa": "pid", "Picard": "pcd", "Pichinglis": "fpe", "Pichis Ashéninka": "cpu", "Pictish": "xpi", "Picuris": "nai-pic", "Pidgin Delaware": "dep", "Pidgin Iha": "ihb", "Pidgin Onin": "onx", "Piedmontese": "pms", "Pijao": "pij", "Pije": "piz", "Pijin": "pis", "Pilagá": "plg", "Pileni": "piv", "Pima Bajo": "pia", "Pimbwe": "piw", "Pinai-Hagahai": "pnn", "Pingelapese": "pif", "Pini": "pii", "Pinigura": "pnv", "Pinjarup": "pnj", "Pinji": "pic", "Pinotepa Nacional Mixtec": "mio", "Pintiini": "pti", "Pintupi-Luritja": "piu", "Pinyin": "pny", "Pipil": "ppl", "Pirahã": "myp", "Piratapuyo": "pir", "Pirlatapa": "bxi", "Piro": "pie", "Pirriya": "xpa", "Pisabo": "pig", "Pisaflores Tepehua": "tpp", "Piscataway": "psy", "Pisidian": "xps", "Pitcairn-Norfolk": "pih", "Pite Sami": "sje", "Piti": "pcn", "Pitjantjatjara": "pjt", "Pitta-Pitta": "pit", "Piu": "pix", "Piya-Kwonci": "piy", "Plains Apache": "apk", "Plains Cree": "crk", "Plains Indian Sign Language": "psd", "Plains Miwok": "pmw", "Plapo Krumen": "ktj", "Plautdietsch": "pdt", "Playero": "gob", "Pnar": "pbv", "Pochuri Naga": "npo", "Pochutec": "xpo", "Podoko": "pbi", "Pogolo": "poy", "Pohnpeian": "pon", "Poitevin-Saintongeais": "roa-poi", "Pokangá": "pok", "Poke": "pof", "Pol": "pmm", "Polabian": "pox", "Polci": "plj", "Polish": "pl", "Polish Sign Language": "pso", "Polonombauk": "plb", "Pom": "pmo", "Ponam": "ncc", "Pongu": "png", "Ponosakan": "pns", "Pontic Greek": "pnt", "Ponyo": "npg", "Poqomam": "poc", "Poqomchi'": "poh", "Porohanon": "prh", "Port Sandwich": "psw", "Port Sorell": "xpl", "Port Vato": "ptv", "Portuguese": "pt", "Portuguese Sign Language": "psr", "Potawatomi": "pot", "Potiguára": "pog", "Poumei Naga": "pmx", "Pouye": "bye", "Powari": "pwr", "Powhatan": "pim", "Poyanáwa": "pyn", "Prakrit": "inc-pra", "Prasuni": "prn", "Primitive Irish": "pgl", "Principense": "pre", "Proto-Abkhaz-Abaza": "cau-abz-pro", "Proto-Afroasiatic": "afa-pro", "Proto-Albanian": "sqj-pro", "Proto-Algic": "aql-pro", "Proto-Algonquian": "alg-pro", "Proto-Amuesha-Chamicuro": "awd-amc-pro", "Proto-Anatolian": "ine-ana-pro", "Proto-Apachean": "apa-pro", "Proto-Arawa": "auf-pro", "Proto-Arawak": "awd-pro", "Proto-Armenian": "hyx-pro", "Proto-Arnhem": "aus-arn-pro", "Proto-Aroid": "omv-aro-pro", "Proto-Aslian": "mkh-asl-pro", "Proto-Atayalic": "map-ata-pro", "Proto-Athabaskan": "ath-pro", "Proto-Atlantic-Congo": "alv-pro", "Proto-Austroasiatic": "aav-pro", "Proto-Austronesian": "map-pro", "Proto-Avaro-Andian": "cau-ava-pro", "Proto-Bahnaric": "mkh-ban-pro", "Proto-Balto-Slavic": "ine-bsl-pro", "Proto-Bantoid": "nic-bod-pro", "Proto-Bantu": "bnt-pro", "Proto-Basque": "euq-pro", "Proto-Batak": "btk-pro", "Proto-Be": "qfa-onb-pro", "Proto-Be-Tai": "qfa-bet-pro", "Proto-Benue-Congo": "nic-bco-pro", "Proto-Berber": "ber-pro", "Proto-Bodo-Garo": "tbq-bdg-pro", "Proto-Bongo-Bagirmi": "csu-bba-pro", "Proto-Boran": "sai-bor-pro", "Proto-Brythonic": "cel-bry-pro", "Proto-Bua": "alv-bua-pro", "Proto-Bungku-Tolaki": "poz-btk-pro", "Proto-Caddoan": "cdd-pro", "Proto-Cangin": "alv-cng-pro", "Proto-Cariban": "sai-car-pro", "Proto-Celtic": "cel-pro", "Proto-Central Chadic": "cdc-cbm-pro", "Proto-Central Indo-Aryan": "inc-cen-pro", "Proto-Central Jê": "sai-cje-pro", "Proto-Central New South Wales": "aus-cww-pro", "Proto-Central Sudanic": "csu-pro", "Proto-Central Togo": "alv-gtm-pro", "Proto-Central-Eastern Malayo-Polynesian": "poz-cet-pro", "Proto-Cerrado": "sai-cer-pro", "Proto-Chadic": "cdc-pro", "Proto-Chamic": "cmc-pro", "Proto-Chatino": "omq-cha-pro", "Proto-Chibchan": "cba-pro", "Proto-Chimakuan": "chi-pro", "Proto-Chinookan": "nai-ckn-pro", "Proto-Chukotko-Kamchatkan": "qfa-cka-pro", "Proto-Chumash": "nai-chu-pro", "Proto-Circassian": "cau-cir-pro", "Proto-Cupan": "azc-cup-pro", "Proto-Cushitic": "cus-pro", "Proto-Daju": "sdv-daj-pro", "Proto-Daly": "aus-dal-pro", "Proto-Dargwa": "cau-drg-pro", "Proto-Dizoid": "omv-diz-pro", "Proto-Dravidian": "dra-pro", "Proto-Eastern Jebel": "sdv-eje-pro", "Proto-Eastern Malayo-Polynesian": "pqe-pro", "Proto-Eastern Oti-Volta": "nic-eov-pro", "Proto-Eastern Polynesian": "poz-pep-pro", "Proto-Edekiri": "alv-edk-pro", "Proto-Edoid": "alv-edo-pro", "Proto-Eskimo": "esx-esk-pro", "Proto-Eskimo-Aleut": "esx-pro", "Proto-Fali": "alv-fli-pro", "Proto-Finnic": "urj-fin-pro", "Proto-Gbe": "alv-gbe-pro", "Proto-Georgian-Zan": "ccs-gzn-pro", "Proto-Germanic": "gem-pro", "Proto-Grassfields": "nic-grf-pro", "Proto-Great Andamanese": "qfa-adm-pro", "Proto-Guang": "alv-gng-pro", "Proto-Gur": "nic-gur-pro", "Proto-Gurunsi": "nic-gns-pro", "Proto-Halmahera-Cenderawasih": "poz-hce-pro", "Proto-Heiban": "alv-hei-pro", "Proto-Hellenic": "grk-pro", "Proto-Highland East Cushitic": "cus-hec-pro", "Proto-Hlai": "qfa-lic-pro", "Proto-Hmong": "hmn-pro", "Proto-Hmong-Mien": "hmx-pro", "Proto-Hrusish": "sit-hrs-pro", "Proto-Huitoto-Ocaina": "sai-hoc-pro", "Proto-Hurro-Urartian": "qfa-hur-pro", "Proto-Idomoid": "alv-ido-pro", "Proto-Igboid": "alv-igb-pro", "Proto-Ijoid": "ijo-pro", "Proto-Indo-Aryan": "inc-pro", "Proto-Indo-European": "ine-pro", "Proto-Indo-Iranian": "iir-pro", "Proto-Inuit": "esx-inu-pro", "Proto-Iranian": "ira-pro", "Proto-Iroquoian": "iro-pro", "Proto-Italic": "itc-pro", "Proto-Iwaidjan": "aus-wdj-pro", "Proto-Japonic": "jpx-pro", "Proto-Jukunoid": "nic-jkn-pro", "Proto-Jê": "sai-jee-pro", "Proto-Kadu": "qfa-kad-pro", "Proto-Kalamian": "phi-kal-pro", "Proto-Kalapuyan": "nai-klp-pro", "Proto-Kam-Sui": "qfa-kms-pro", "Proto-Kampa": "awd-kmp-pro", "Proto-Karen": "kar-pro", "Proto-Kartvelian": "ccs-pro", "Proto-Katuic": "mkh-kat-pro", "Proto-Kham": "sit-kha-pro", "Proto-Khasian": "aav-khs-pro", "Proto-Khmeric": "mkh-kmr-pro", "Proto-Khmuic": "mkh-khm-pro", "Proto-Khoe": "khi-kho-pro", "Proto-Koman": "ssa-kom-pro", "Proto-Komisenian": "ira-kms-pro", "Proto-Koreanic": "qfa-kor-pro", "Proto-Kra": "qfa-kra-pro", "Proto-Kra-Dai": "qfa-tak-pro", "Proto-Kru": "kro-pro", "Proto-Kuki-Chin": "tbq-kuk-pro", "Proto-Kuliak": "ssa-klk-pro", "Proto-Kurdish": "ku-pro", "Proto-Kwa": "alv-kwa-pro", "Proto-Lalo": "tbq-lal-pro", "Proto-Lampungic": "poz-lgx-pro", "Proto-Lezghian": "cau-lzg-pro", "Proto-Lolo-Burmese": "tbq-lob-pro", "Proto-Loloish": "tbq-lol-pro", "Proto-Lower Cross River": "nic-lcr-pro", "Proto-Luish": "sit-luu-pro", "Proto-Maidun": "nai-mdu-pro", "Proto-Malayic": "poz-mly-pro", "Proto-Malayo-Chamic": "poz-mcm-pro", "Proto-Malayo-Polynesian": "poz-pro", "Proto-Malayo-Sumbawan": "poz-msa-pro", "Proto-Mande": "dmn-pro", "Proto-Mangbetu": "csu-maa-pro", "Proto-Mari": "chm-pro", "Proto-Masa": "cdc-mas-pro", "Proto-Mayan": "myn-pro", "Proto-Mazatec": "omq-maz-pro", "Proto-Medo-Parthian": "ira-mpr-pro", "Proto-Mien": "hmx-mie-pro", "Proto-Min": "zhx-min-pro", "Proto-Mixe-Zoque": "nai-miz-pro", "Proto-Mixtec": "omq-mxt-pro", "Proto-Mixtecan": "omq-mix-pro", "Proto-Mon-Khmer": "mkh-pro", "Proto-Mongolic": "xgn-pro", "Proto-Monic": "mkh-mnc-pro", "Proto-Mordvinic": "urj-mdv-pro", "Proto-Mumuye": "alv-mum-pro", "Proto-Munda": "mun-pro", "Proto-Munji-Yidgha": "ira-mny-pro", "Proto-Muskogean": "nai-mus-pro", "Proto-Na-Dene": "xnd-pro", "Proto-Nahuan": "azc-nah-pro", "Proto-Nakh": "cau-nkh-pro", "Proto-Nawiki": "awd-nwk-pro", "Proto-Nguni": "bnt-ngu-pro", "Proto-Nicobarese": "aav-nic-pro", "Proto-Niger-Congo": "nic-pro", "Proto-Nilo-Saharan": "ssa-pro", "Proto-Nilotic": "sdv-nil-pro", "Proto-Norse": "gmq-pro", "Proto-North Caucasian": "ccn-pro", "Proto-North Halmahera": "paa-nha-pro", "Proto-North Iroquoian": "iro-nor-pro", "Proto-North Sarawak": "poz-swa-pro", "Proto-Northeast Caucasian": "cau-nec-pro", "Proto-Northern Jê": "sai-nje-pro", "Proto-Northwest Caucasian": "cau-nwc-pro", "Proto-Nubian": "nub-pro", "Proto-Nuclear Polynesian": "poz-pnp-pro", "Proto-Numic": "azc-num-pro", "Proto-Nupoid": "alv-nup-pro", "Proto-Nuristani": "iir-nur-pro", "Proto-Nyima": "sdv-nyi-pro", "Proto-Nyulnyulan": "aus-nyu-pro", "Proto-Oceanic": "poz-oce-pro", "Proto-Ogoni": "nic-ogo-pro", "Proto-Omotic": "omv-pro", "Proto-Ongan": "qfa-ong-pro", "Proto-Ossetic": "os-pro", "Proto-Oti-Volta": "nic-ovo-pro", "Proto-Oto-Manguean": "omq-pro", "Proto-Oto-Pamean": "omq-otp-pro", "Proto-Otomi": "oto-otm-pro", "Proto-Otomian": "oto-pro", "Proto-Pakanic": "mkh-pkn-pro", "Proto-Palaungic": "mkh-pal-pro", "Proto-Pama-Nyungan": "aus-pam-pro", "Proto-Paresi-Waura": "awd-prw-pro", "Proto-Pathan": "ira-pat-pro", "Proto-Pearic": "mkh-pea-pro", "Proto-Permic": "urj-prm-pro", "Proto-Philippine": "phi-pro", "Proto-Plateau": "nic-plt-pro", "Proto-Plateau Penutian": "nai-plp-pro", "Proto-Pnar-Khasi-Lyngngam": "aav-pkl-pro", "Proto-Polynesian": "poz-pol-pro", "Proto-Pomeranian": "zlw-pom-pro", "Proto-Pomo": "nai-pom-pro", "Proto-Rukai": "dru-pro", "Proto-Ryukyuan": "jpx-ryu-pro", "Proto-Saka": "xsc-sak-pro", "Proto-Saka-Wakhi": "xsc-skw-pro", "Proto-Salish": "sal-pro", "Proto-Samic": "smi-pro", "Proto-Samoyedic": "syd-pro", "Proto-Sanglechi-Ishkashimi": "ira-sgi-pro", "Proto-Sara": "csu-sar-pro", "Proto-Scythian": "xsc-pro", "Proto-Selkup": "sel-pro", "Proto-Semitic": "sem-pro", "Proto-Shughni-Roshani": "ira-shr-pro", "Proto-Shughni-Yazghulami": "ira-shy-pro", "Proto-Shughni-Yazghulami-Munji": "ira-sym-pro", "Proto-Sino-Tibetan": "sit-pro", "Proto-Siouan": "sio-pro", "Proto-Siouan-Catawban": "nai-sca-pro", "Proto-Slavic": "sla-pro", "Proto-Sogdic": "ira-sgc-pro", "Proto-Somaloid": "cus-som-pro", "Proto-Songhay": "son-pro", "Proto-Sotho-Tswana": "bnt-sts-pro", "Proto-South Cushitic": "cus-sou-pro", "Proto-South Sulawesi": "poz-ssw-pro", "Proto-Southern Jê": "sai-sje-pro", "Proto-Southwestern Tai": "tai-swe-pro", "Proto-Sunda-Sulawesi": "poz-sus-pro", "Proto-Ta-Arawak": "awd-taa-pro", "Proto-Tai": "tai-pro", "Proto-Takic": "azc-tak-pro", "Proto-Taman": "sdv-tmn-pro", "Proto-Tani": "sit-tan-pro", "Proto-Taranoan": "sai-tar-pro", "Proto-Tatic": "xme-ttc-pro", "Proto-Tocharian": "ine-toc-pro", "Proto-Totozoquean": "nai-tot-pro", "Proto-Trans-New Guinea": "ngf-pro", "Proto-Trique": "omq-tri-pro", "Proto-Tsezian": "cau-tsz-pro", "Proto-Tsimshianic": "nai-tsi-pro", "Proto-Tungusic": "tuw-pro", "Proto-Tupi-Guarani": "tup-gua-pro", "Proto-Tupian": "tup-pro", "Proto-Turkic": "trk-pro", "Proto-Ubangian": "nic-ubg-pro", "Proto-Ugric": "urj-ugr-pro", "Proto-Upper Cross River": "nic-ucr-pro", "Proto-Uralic": "urj-pro", "Proto-Utian": "nai-utn-pro", "Proto-Uto-Aztecan": "azc-pro", "Proto-Vietic": "mkh-vie-pro", "Proto-Volta-Congo": "nic-vco-pro", "Proto-Volta-Niger": "alv-von-pro", "Proto-West Germanic": "gmw-pro", "Proto-West Semitic": "sem-wes-pro", "Proto-Western Mande": "dmn-mdw-pro", "Proto-Witotoan": "sai-wit-pro", "Proto-Yeniseian": "qfa-yen-pro", "Proto-Yoruba": "alv-yor-pro", "Proto-Yoruboid": "alv-yrd-pro", "Proto-Yukaghir": "qfa-yuk-pro", "Proto-Yupik": "ypk-pro", "Proto-Zapotec": "omq-zpc-pro", "Proto-Zapotecan": "omq-zap-pro", "Proto-Zaza-Gorani": "ira-zgr-pro", "Providencia Sign Language": "prz", "Psikye": "kvj", "Puare": "pux", "Pudtol Atta": "atp", "Puebla Mazatec": "pbm", "Puelche": "pue", "Puerto Rican Sign Language": "psl", "Puimei Naga": "npu", "Puinave": "pui", "Puiron": "sit-prn", "Pukapukan": "pkp", "Pulabu": "pup", "Puluwat": "puw", "Puma": "pum", "Pumpokol": "xpm", "Pumé": "yae", "Punan Aput": "pud", "Punan Bah-Biau": "pna", "Punan Batu": "pnm", "Punan Merah": "puf", "Punan Merap": "puc", "Punan Tubu": "puj", "Punic": "xpu", "Punjabi": "pa", "Punu": "puu", "Puoc": "puo", "Puquina": "puq", "Puragi": "pru", "Purari": "iar", "Purepecha": "pua", "Puri": "prr", "Purik": "prx", "Purisimeño": "puy", "Puruborá": "pur", "Puruhá": "sai-prh", "Purukotó": "sai-pur", "Purum": "pub", "Putai": "mfl", "Putoh": "put", "Putukwam": "afe", "Puxian": "cpx", "Puyo-Paekche": "xpp", "Puyuma": "pyu", "Pwaamei": "pme", "Pwapwa": "pop", "Pyapun": "pcw", "Pye Krumen": "pye", "Pyemmairre": "xpb", "Pyen": "pyy", "Pykobjê": "sai-pyk", "Pyu": "pby", "Páez": "pbb", "Pááfang": "pfa", "Päri": "lkr", "Pémono": "pev", "Pévé": "lme", "Pökoot": "pko", "Q'anjob'al": "kjb", "Q'eqchi": "kek", "Qabiao": "laq", "Qaqet": "byx", "Qatabanian": "xqt", "Qau": "gqu", "Qila Muji": "ymq", "Qimant": "ahg", "Quapaw": "qua", "Quebec Sign Language": "fcs", "Quechua": "qu", "Quenya": "qya", "Querétaro Otomi": "otq", "Quetzaltepec Mixe": "pxm", "Queyu": "qvy", "Quiavicuzas Zapotec": "zpj", "Quileute": "qui", "Quimbaya": "sai-qmb", "Quinault": "qun", "Quinigua": "nai-qng", "Quinqui": "quq", "Quioquitani-Quierí Zapotec": "ztq", "Quiotepec Chinantec": "chq", "Quiripi": "qyp", "Quitemo": "sai-qtm", "Rabha": "rah", "Rabona": "sai-rab", "Rade": "rad", "Raetic": "xrr", "Raga": "lml", "Rahambuu": "raz", "Rajah Kabunsuwan Manobo": "mqk", "Rajasthani": "raj", "Rajbanshi": "rjs", "Raji": "rji", "Rajong": "rjg", "Rajput Garasia": "gra", "Rakahanga-Manihiki": "rkh", "Rakhine": "rki", "Ralte": "ral", "Rama": "rma", "Ramandi": "tks", "Ramanos": "sai-ram", "Ramoaaina": "rai", "Ramopa": "kjx", "Rampi": "lje", "Rana Tharu": "thr", "Rang": "rax", "Rangkas": "rgk", "Ranglong": "rnl", "Rao": "rao", "Rapa": "ray", "Rapa Nui": "rap", "Rapoisi": "kyx", "Rapting": "rpt", "Rara Bakati'": "lra", "Rarotongan": "rar", "Rasawa": "rac", "Ratagnon": "btn", "Ratahan": "rth", "Rathawi": "rtw", "Rathwi Bareli": "bgd", "Raute": "rau", "Ravula": "yea", "Rawa": "rwo", "Rawang": "raw", "Rawat": "jnl", "Rawo": "rwa", "Rayón Zoque": "zor", "Razajerdi": "rat", "Razihi": "rzh", "Reang": "ria", "Red Gelao": "gir", "Reel": "atu", "Rejang": "rej", "Rejang Kayan": "ree", "Reli": "rei", "Rema": "bow", "Rembarunga": "rmb", "Rembong": "reb", "Remo": "rem", "Remontado Agta": "agv", "Rempi": "rmp", "Remun": "lkj", "Rendille": "rel", "Rengao": "ren", "Rennellese": "mnv", "Repanbitip": "rpn", "Rer Bare": "rer", "Rerau": "rea", "Rerep": "pgk", "Reshe": "res", "Resígaro": "rgr", "Retta": "ret", "Reyesano": "rey", "Rhine Franconian": "gmw-rfr", "Riang": "ril", "Riantana": "ran", "Ribun": "rir", "Rigwe": "iri", "Rikbaktsa": "rkb", "Rincón Zapotec": "zar", "Ringgou": "rgu", "Ririo": "rri", "Ritarungo": "rit", "Riung": "riu", "Riverain Sango": "snj", "Rogo": "rod", "Rohingya": "rhg", "Roma": "rmm", "Romagnol": "rgn", "Romam": "rmx", "Romani": "rom", "Romani Greek": "rge", "Romanian": "ro", "Romanian Sign Language": "rms", "Romano-Serbian": "rsb", "Romanova": "rmv", "Romansch": "rm", "Romblomanon": "rol", "Rombo": "rof", "Romkun": "rmk", "Ron": "cla", "Ronga": "rng", "Rongga": "ror", "Rongmei Naga": "nbu", "Rongpo": "rnp", "Ronji": "roe", "Roon": "rnn", "Roria": "rga", "Roro": "rro", "Rotokas": "roo", "Rotuman": "rtm", "Rouran": "xgn-rou", "Roviana": "rug", "Ruching Palaung": "pce", "Rudbari": "rdb", "Rufiji": "rui", "Ruga": "ruh", "Rukai": "dru", "Rukiga": "cgg", "Ruma": "ruz", "Rumai Palaung": "rbb", "Rumu": "klq", "Runga": "rou", "Rungtu": "rtc", "Rungus": "drg", "Rungwa": "rnw", "Russenorsk": "crp-rsn", "Russian": "ru", "Russian Sign Language": "rsl", "Rusyn": "rue", "Rutul": "rut", "Ruuli": "ruc", "Ruwund": "rnd", "Rwa": "rwk", "Rwanda-Rundi": "rw", "Réunion Creole French": "rcf", "S'gaw Karen": "ksw", "Sa": "sax", "Sa'a": "apb", "Sa'ban": "snv", "Sa'och": "scq", "Saafi-Saafi": "sav", "Saam": "raq", "Saamia": "lsm", "Saanich": "str", "Saare": "uss", "Saaroa": "sxr", "Saba": "saa", "Sabaean": "xsa", "Sabah Bisaya": "bsy", "Sabah Malay": "msi", "Sabanê": "sae", "Sabaot": "spy", "Sabine": "sbv", "Sabir": "pml", "Sabu": "hvn", "Sabüm": "sbo", "Sacapulteco": "quv", "Sadri": "sck", "Saek": "skb", "Saep": "spd", "Safaitic": "sem-saf", "Safaliba": "saf", "Safeyoka": "apz", "Safwa": "sbk", "Sagala": "sbm", "Sagalla": "tga", "Sahaptin": "nai-spt", "Saho": "ssy", "Sahu": "saj", "Saisiyat": "xsy", "Sajau Basap": "sjb", "Sakachep": "sch", "Sakam": "skm", "Sakao": "sku", "Sakata": "skt", "Sake": "sak", "Sakirabiá": "skf", "Sakizaya": "szy", "Sala": "shq", "Salampasu": "slx", "Salar": "slr", "Salas": "sgu", "Salchuq": "slq", "Saleman": "sau", "Saliba (Colombia)": "slc", "Saliba (New Guinea)": "sbe", "Salinan": "sln", "Salt-Yui": "sll", "Saluan": "loe", "Salumá": "slj", "Salvadoran Lenca": "nai-sln", "Salvadoran Sign Language": "esn", "Sam": "snx", "Sama": "smd", "Samaritan Aramaic": "sam", "Samaritan Hebrew": "smp", "Samarokena": "tmj", "Samatao": "ysd", "Samba": "smx", "Sambali": "xsb", "Sambalpuri": "spv", "Sambe": "xab", "Samberigi": "ssx", "Samburu": "saq", "Samei": "smh", "Samo": "smq", "Samoan": "sm", "Samoan Plantation Pidgin": "cpe-spp", "Samogitian": "sgs", "Samosa": "swm", "Sampang": "rav", "Samre": "sxm", "Samtao": "stu", "Samvedi": "smv", "San Agustín Mixtepec Zapotec": "ztm", "San Baltazar Loxicha Zapotec": "zpx", "San Felipe Otlaltepec Popoloca": "pow", "San Jerónimo Tecóatl Mazatec": "maa", "San Juan Atzingo Popoloca": "poe", "San Juan Colorado Mixtec": "mjc", "San Juan Guelavía Zapotec": "zab", "San Juan Quiahije Chatino": "ctp-san", "San Juan Teita Mixtec": "xtj", "San Luís Temalacayuca Popoloca": "pps", "San Marcos Tlalcoyalco Popoloca": "pls", "San Martín Itunyoso Triqui": "trq", "San Miguel Creole French": "scf", "San Miguel Piedras Mixtec": "xtp", "San Miguel el Grande Mixtec": "mig", "San Pablo Güilá Zapotec": "ztu", "San Pedro Amuzgos Amuzgo": "azg", "San Pedro Quiatoni Zapotec": "zpf", "San Vicente Coatlán Zapotec": "zpt", "Sanapaná": "spn", "Sanaviron": "sai-san", "Sandawe": "sad", "Sanga (Congo)": "sng", "Sanga (Nigeria)": "xsn", "Sanggau": "scg", "Sangil": "snl", "Sangir": "sxn", "Sangisari": "sgr", "Sangkong": "sgk", "Sanglechi": "sgy", "Sango": "sg", "Sangtam Naga": "nsa", "Sangu (Gabon)": "snq", "Sangu (Tanzania)": "sbp", "Sani": "ysn", "Sanie": "ysy", "Saniyo-Hiyewe": "sny", "Sankaran Maninka": "msc", "Sansi": "ssi", "Sanskrit": "sa", "Santa Catarina Albarradas Zapotec": "ztn", "Santa Inés Ahuatempan Popoloca": "pca", "Santa Inés Yatzechi Zapotec": "zpn", "Santa Lucía Monteverde Mixtec": "mdv", "Santa María La Alta Nahuatl": "nhz", "Santa María Quiegolani Zapotec": "zpi", "Santa María Zacatepec Mixtec": "mza", "Santa Teresa Cora": "cok", "Santali": "sat", "Santiago Xanica Zapotec": "zpr", "Santo Domingo Albarradas Zapotec": "zas", "Sanumá": "xsu", "Sapa": "tys", "Saparua": "spr", "Sapará": "sai-sap", "Sapo": "krn", "Saponi": "spi", "Saposa": "sps", "Sapuan": "spu", "Sapé": "spc", "Sar": "mwm", "Sara": "sre", "Sara Kaba": "sbz", "Sara Kaba Deme": "kwg", "Sara Kaba Náà": "kwv", "Saraiki": "skr", "Saramaccan": "srm", "Sarangani Blaan": "bps", "Sarangani Manobo": "mbs", "Sarasira": "zsa", "Saraveca": "sar", "Sarcee": "srs", "Sardinian": "sc", "Sarikoli": "srh", "Sarli": "sdf", "Sartang": "onp", "Sarua": "swy", "Sarudu": "sdu", "Saruga": "sra", "Sasak": "sas", "Sasaru": "sxs", "Sassarese": "sdc", "Satawalese": "stw", "Saterland Frisian": "stq", "Sateré-Mawé": "mav", "Sathmar Swabian": "gmw-stm", "Saudi Arabian Sign Language": "sdl", "Sauraseni Apabhramsa": "inc-sap", "Sauraseni Prakrit": "psu", "Saurashtra": "saz", "Sauri": "srt", "Sause": "sao", "Sausi": "ssj", "Savi": "sdg", "Savosavo": "svs", "Sawai": "szw", "Saweru": "swr", "Sawi": "saw", "Sawila": "swt", "Sawriya Paharia": "mjt", "Saxwe Gbe": "sxw", "Saya": "say", "Sayula Popoluca": "pos", "Scanian": "gmq-scy", "Scots": "sco", "Scottish Gaelic": "gd", "Seba": "kdg", "Sebat Bet Gurage": "sgw", "Seberuang": "sbx", "Sebop": "sib", "Sebuyau": "snb", "Sechelt": "sec", "Sechura": "sai-sec", "Secoya": "sey", "Sedang": "sed", "Sedoa": "tvw", "Seenku": "sos", "Segai": "sge", "Segeju": "seg", "Seget": "sbg", "Sehwi": "sfw", "Seim": "sim", "Seimat": "ssg", "Seit-Kaitetu": "hik", "Sekani": "sek", "Sekapan": "skp", "Sekar": "skz", "Seke": "skj", "Sekele": "vaj", "Seki": "syi", "Seko Padang": "skx", "Seko Tengah": "sko", "Sekpele": "lip", "Selangor Sign Language": "kgi", "Selaru": "slu", "Selayar": "sly", "Selee": "snw", "Selepet": "spl", "Selk'nam": "ona", "Selonian": "sxl", "Selungai Murut": "slg", "Seluwasan": "sws", "Sema": "nsm", "Semai": "sea", "Semandang": "sdm", "Semaq Beri": "szc", "Sembakung Murut": "sbr", "Semelai": "sza", "Semimi": "etz", "Semnam": "ssm", "Semnani": "smy", "Sempan": "xse", "Sena": "seh", "Senara Sénoufo": "seq", "Senaya": "syn", "Sene": "sej", "Seneca": "see", "Sengele": "szg", "Senggi": "snu", "Sengo": "spk", "Sengseng": "ssz", "Senhaja De Srair": "sjs", "Sensi": "sni", "Sentani": "set", "Senthang Chin": "sez", "Sentinelese": "std", "Sepa (Indonesia)": "spb", "Sepa (New Guinea)": "spe", "Sepen": "spm", "Sepik Iwam": "iws", "Sepik Mari": "mbx", "Sera": "sry", "Serbo-Croatian": "sh", "Sere": "swf", "Serer": "srr", "Seri": "sei", "Serili": "sve", "Seroa": "kqu", "Serrano": "ser", "Seru": "szd", "Serua": "srw", "Serudung Murut": "srk", "Serui-Laut": "seu", "Seta": "stf", "Setaman": "stm", "Seti": "sbi", "Severn Ojibwa": "ojs", "Sewa Bay": "sew", "Seychellois Creole": "crs", "Seze": "sze", "Sha": "scw", "Shabak": "sdb", "Shabo": "sbf", "Shahmirzadi": "srz", "Shahrudi": "shm", "Shall-Zwall": "sha", "Shama-Sambuga": "sqa", "Shamang": "xsh", "Shambala": "ksb", "Shan": "shn", "Shanenawa": "swo", "Shanga": "sho", "Shangzhai": "jih", "Shaozhou Tuhua": "zhx-sht", "Sharanahua": "mcd", "Shark Bay": "ssv", "Sharwa": "swq", "Shasta": "sht", "Shatt": "shj", "Shau": "sqh", "Shawnee": "sjw", "She": "shx", "Shebayo": "awd-she", "Shehri": "shv", "Shekkacho": "moy", "Sheko": "she", "Shelta": "sth", "Shendu": "shl", "Sheni": "scv", "Sherbro": "bun", "Sherdukpen": "sdp", "Sherpa": "xsr", "Sheshi Kham": "kip", "Shi": "shr", "Shihhi Arabic": "ssh", "Shiki": "gua", "Shilluk": "shk", "Shina": "scl", "Shinasha": "bwo", "Shipibo-Conibo": "shp", "Shixing": "sxg", "Sholaga": "sle", "Shom Peng": "sii", "Shona": "sn", "Shoo-Minda-Nye": "bcv", "Shor": "cjs", "Shoshone": "shh", "Shua": "shg", "Shuar": "jiv", "Shuba": "cbq", "Shughni": "sgh", "Shumashti": "sts", "Shumcho": "scu", "Shuswap": "shs", "Shuwa-Zamani": "ksa", "Shwai": "shw", "Shwe Palaung": "pll", "Sialum": "slw", "Siamou": "sif", "Sian": "spg", "Siane": "snp", "Siang": "sya", "Siar-Lak": "sjr", "Sibe": "nco", "Siberian Tatar": "sty", "Sibu Melanau": "sdx", "Sicanian": "sxc", "Sicel": "scx", "Sichuan Yi": "ii", "Sicilian": "scn", "Siculo-Arabic": "sqr", "Sidamo": "sid", "Sidetic": "xsd", "Sie": "erg", "Sierra Leone Sign Language": "sgx", "Sierra Negra Nahuatl": "nsu", "Sierra de Juárez Zapotec": "zaa", "Sighu": "sxe", "Sihan": "snr", "Sika": "ski", "Sikaiana": "sky", "Sikaritai": "tty", "Sikiana": "sik", "Sikkimese": "sip", "Sikule": "skh", "Sila": "slt", "Silacayoapan Mixtec": "mks", "Sileibi": "sbq", "Silesian": "szl", "Silimo": "wul", "Siliput": "mkc", "Silopi": "xsp", "Silt'e": "stv", "Simaa": "sie", "Simalungun Batak": "bts", "Simba": "sbw", "Simbali": "smg", "Simbari": "smb", "Simbo": "sbb", "Simeku": "smz", "Simeulue": "smr", "Simte": "smt", "Sinacantán": "nai-sin", "Sinagen": "siu", "Sinasina": "sst", "Sinaugoro": "snc", "Sindarin": "sjn", "Sindhi": "sd", "Sindhi Bhil": "sbn", "Sindihui Mixtec": "xts", "Singa": "sgm", "Singapore Sign Language": "sls", "Singpho": "sgp", "Sinhalese": "si", "Sinicahua Mixtec": "xti", "Sininkere": "skq", "Sinte Romani": "rmo", "Sinyar": "sys", "Sinúfana": "sai-sin", "Sio": "xsi", "Siona": "snn", "Sipakapense": "qum", "Sira": "swj", "Siraya": "fos", "Sirenik": "ysr", "Siri": "sir", "Siriano": "sri", "Sirionó": "srq", "Sirmauri": "srx", "Siroi": "ssd", "Sissala": "sld", "Sissano": "sso", "Situ": "sit-sit", "Siuslaw": "sis", "Sivandi": "siy", "Siwai": "siw", "Siwi": "siz", "Siwu": "akp", "Siyin Chin": "csy", "Skagit": "ska", "Skalvian": "svx", "Ske": "ske", "Skepi Creole Dutch": "skw", "Skolt Sami": "sms", "Skou": "skv", "Slavey": "den", "Slavomolisano": "svm", "Slovak": "sk", "Slovakian Sign Language": "svk", "Slovene": "sl", "Slovincian": "zlw-slv", "Small Flowery Miao": "sfm", "Smärky Kanum": "kxq", "Snohomish": "sno", "So'a": "ssq", "Sobei": "sob", "Sochiapam Chinantec": "cso", "Soga": "xog", "Sogdian": "sog", "Sok": "skk", "Sokna": "swn", "Soko": "soc", "Sokoro": "sok", "Solano": "xso", "Soli": "sby", "Solon": "tuw-sol", "Solong": "aaw", "Solos": "sol", "Som": "smc", "Somali": "so", "Somba-Siawari": "bmu", "Somra": "ntx", "Somrai": "sor", "Somray": "smu", "Somyev": "kgt", "Sonaga": "ysg", "Sonde": "shc", "Songe": "sop", "Songlai Chin": "csj", "Songomeno": "soe", "Songoora": "sod", "Sonha": "soi", "Sonia": "siq", "Soninke": "snk", "Sonsorolese": "sov", "Soo": "teu", "Sop": "urw", "Soqotri": "sqt", "Sora": "srb", "Sori-Harengan": "sbh", "Sorkhei": "sqo", "Sorothaptic": "sxo", "Sorsogon Ayta": "ays", "Sos Kundi": "sdk", "Sota Kanum": "krz", "Sotho": "st", "Sou": "sqq", "South African Sign Language": "sfs", "South Awyu": "aws", "South Boma": "bnt-sbo", "South Central Banda": "lnl", "South Central Dinka": "dib", "South Efate": "erk", "South Fali": "fal", "South Giziga": "giz", "South Lembata": "lmf", "South Levantine Arabic": "ajp", "South Marquesan": "mqm", "South Muyu": "kts", "South Nuaulu": "nxl", "South Picene": "spx", "South Slavey": "xsl", "South Tairora": "omw", "South Ucayali Ashéninka": "cpy", "South Watut": "mcy", "Southeast Ambrym": "tvk", "Southeast Babar": "vbb", "Southeast Ijo": "ijs", "Southeast Pashayi": "psi", "Southeast Tasmanian": "xpf", "Southeastern Dinka": "dks", "Southeastern Ixtlán Zapotec": "zpd", "Southeastern Kolami": "nit", "Southeastern Nochixtlán Mixtec": "mxy", "Southeastern Pomo": "pom", "Southeastern Puebla Nahuatl": "npl", "Southeastern Tarahumara": "tcu", "Southeastern Tepehuan": "stp", "Southern Alta": "agy", "Southern Altai": "alt", "Southern Amami-Oshima": "ams", "Southern Bai": "bfs", "Southern Birifor": "biv", "Southern Bobo": "bwq", "Southern Bontoc": "obk", "Southern Carrier": "caf", "Southern Catanduanes Bicolano": "bln", "Southern Dagaare": "dga", "Southern East Cree": "crj", "Southern Ghale": "ghe", "Southern Grebo": "grj", "Southern Guiyang Hmong": "hmy", "Southern Haida": "hax", "Southern Hindko": "hnd", "Southern Kalapuya": "sxk", "Southern Kalinga": "ksc", "Southern Kam": "kmc", "Southern Kissi": "kss", "Southern Kiwai": "kjd", "Southern Kurdish": "sdh", "Southern Lolopo": "ysp", "Southern Lorung": "lrr", "Southern Luri": "luz", "Southern Ma'di": "snm", "Southern Mashan Hmong": "hma", "Southern Mnong": "mnn", "Southern Muji": "ymc", "Southern Ndebele": "nr", "Southern Ngbandi": "nbw", "Southern Nicobarese": "nik", "Southern Nisu": "nsd", "Southern Nuni": "nnw", "Southern Ohlone": "css", "Southern One": "osu", "Southern Pame": "pmz", "Southern Pomo": "peq", "Southern Puebla Mixtec": "mit", "Southern Puget Sound Salish": "slh", "Southern Pumi": "pmj", "Southern Qiandong Miao": "hms", "Southern Qiang": "qxs", "Southern Rengma Naga": "nre", "Southern Rincon Zapotec": "zsr", "Southern Roglai": "rgs", "Southern Sama": "ssb", "Southern Sami": "sma", "Southern Samo": "sbd", "Southern Selkup": "sel-sou", "Southern Sierra Miwok": "skd", "Southern Thai": "sou", "Southern Tidong": "itd", "Southern Tiwa": "tix", "Southern Toussian": "wib", "Southern Tujia": "tjs", "Southern Tutchone": "tce", "Southern Valley Yokuts": "nai-svy", "Southern Yukaghir": "yux", "Southwest Gbaya": "gso", "Southwest Palawano": "plv", "Southwest Pashayi": "psh", "Southwest Tanna": "nwi", "Southwestern Bontoc": "vbk", "Southwestern Dinka": "dik", "Southwestern Fars": "fay", "Southwestern Guiyang Hmong": "hmg", "Southwestern Huishui Hmong": "hmh", "Southwestern Nisu": "nsv", "Southwestern Tamang": "tsf", "Southwestern Tarahumara": "twr", "Southwestern Tepehuan": "tla", "Southwestern Tlaxiaco Mixtec": "meh", "Sowa": "sww", "Sowanda": "sow", "Soyaltepec Mazatec": "vmp", "Soyaltepec Mixtec": "vmq", "Spanish": "es", "Spanish Sign Language": "ssp", "Spiti Bhoti": "spt", "Spokane": "spo", "Squamish": "squ", "Sranan Tongo": "srn", "Sri Lankan Creole Malay": "sci", "Sri Lankan Sign Language": "sqs", "Stod Bhoti": "sbu", "Stoney": "sto", "Suabo": "szp", "Suarmin": "seo", "Suau": "swp", "Suba": "sxb", "Suba-Simbiti": "ssc", "Subi": "xsj", "Subiya": "sbs", "Subtiaba": "sut", "Sudanese Arabic": "apd", "Sudest": "tgo", "Sudovian": "xsv", "Suena": "sue", "Suga": "sgi", "Suganga": "sug", "Sugut Dusun": "kzs", "Sui": "swi", "Suki": "sui", "Suku": "sub", "Sukuma": "suk", "Sukur": "syk", "Sukurum": "zsu", "Sula": "szn", "Sulka": "sua", "Sulod": "srg", "Sulung": "suv", "Suma": "sqm", "Sumariup": "siv", "Sumau": "six", "Sumbawa": "smw", "Sumbwa": "suw", "Sumerian": "sux", "Sumtu Chin": "csv", "Sunam": "ssk", "Sundanese": "su", "Sunum": "ymn", "Sunwar": "suz", "Suoy": "syo", "Supyire": "spp", "Sur": "tdl", "Surbakhal": "sbj", "Suri": "suq", "Surigaonon": "sgd", "Surjapuri": "sjp", "Sursurunga": "sgz", "Suruahá": "swx", "Surubu": "sde", "Suruí": "sru", "Suruí Do Pará": "mdz", "Susquehannock": "sqn", "Susu": "sus", "Susuami": "ssu", "Suundi": "sdj", "Suwawa": "swu", "Suyá": "suy", "Svan": "sva", "Swabian": "swg", "Swahili": "sw", "Swampy Cree": "csw", "Swazi": "ss", "Swedish": "sv", "Swedish Sign Language": "swl", "Swiss-French Sign Language": "ssr", "Swiss-German Sign Language": "sgg", "Swiss-Italian Sign Language": "slf", "Swo": "sox", "Syenara Senoufo": "shz", "Sylheti": "syl", "Sácata": "sai-sac", "São Paulo Kaingáng": "zkp", "Sãotomense": "cri", "Sìcìté Sénoufo": "sep", "Sô": "sss", "T'en": "tct", "Taabwa": "tap", "Tabaa Zapotec": "zat", "Tabancale": "sai-tab", "Tabaru": "tby", "Tabasaran": "tab", "Tabasco Chontal": "chf", "Tabasco Nahuatl": "nhc", "Tabasco Zoque": "zoq", "Tabla": "tnm", "Tabo": "knv", "Tabriak": "tzx", "Tacahua Mixtec": "xtt", "Tacana": "tna", "Tachawit": "shy", "Tadaksahak": "dsq", "Tadyawan": "tdy", "Tae'": "rob", "Tafi": "tcd", "Tafreshi": "xme-taf", "Tagabawa": "bgs", "Tagakaulu Kalagan": "klg", "Tagal Murut": "mvv", "Tagalog": "tl", "Tagbanwa": "tbw", "Tagbu": "tbm", "Tagdal": "tda", "Tagish": "tgx", "Tagoi": "tag", "Tagwana Senoufo": "tgw", "Tahitian": "ty", "Tahltan": "tht", "Tai": "taw", "Tai Daeng": "tyr", "Tai Dam": "blt", "Tai Do": "tyj", "Tai Dón": "twh", "Tai Hang Tong": "thc", "Tai Hongjin": "tiz", "Tai Laing": "tjl", "Tai Loi": "tlq", "Tai Long": "thi", "Tai Nüa": "tdd", "Tai Pao": "tpo", "Tai Thanh": "tmm", "Tai Ya": "cuu", "Taiap": "gpn", "Taikat": "aos", "Taimyr Pidgin Russian": "crp-tpr", "Tainae": "ago", "Tairuma": "uar", "Taishanese": "zhx-tai", "Taita": "dav", "Taivoan": "tvx", "Taiwan Sign Language": "tss", "Taje": "pee", "Tajik": "tg", "Tajiki Arabic": "abh", "Tajio": "tdj", "Tajuasohn": "tja", "Takelma": "tkm", "Takia": "tbc", "Takka Apabhramsa": "inc-tak", "Takua": "tkz", "Takuu": "nho", "Takwane": "tke", "Tal": "tal", "Tala": "tak", "Talaud": "tld", "Taliabu": "tlv", "Talieng": "tdf", "Talinga-Bwisi": "tlj", "Talise": "tlr", "Tallán": "sai-tal", "Talodi": "tlo", "Taloki": "tlk", "Talondo'": "tln", "Talossan": "tzl", "Talu": "yta", "Talysh": "tly", "Tama (Chad)": "tma", "Tama (Colombia)": "ten", "Tamagario": "tcg", "Tamambo": "mla", "Taman (Indonesia)": "tmn", "Taman (Myanmar)": "tcl", "Tamanaku": "tmz", "Tamazola Mixtec": "vmx", "Tambas": "tdk", "Tambora": "xxt", "Tambotalo": "tls", "Tambunan Dusun": "kzt", "Tami": "tmy", "Tamil": "ta", "Tamki": "tax", "Tamnim Citak": "tml", "Tampias Lobu": "low", "Tampuan": "tpu", "Tampulma": "tpm", "Tanacross": "tcb", "Tanahmerah": "tcm", "Tanapag": "tpv", "Tandaganon": "tgn", "Tandia": "tni", "Tanema": "tnx", "Tangale": "tan", "Tangam": "sit-tgm", "Tangchangya": "tnv", "Tanggu": "tgu", "Tangkhul Naga": "nmf", "Tangko": "tkx", "Tanglang": "ytl", "Tangoa": "tgp", "Tangsa": "nst", "Tanguat": "tbs", "Tangut": "txg", "Tangwang": "crp-tnw", "Tanimbili": "tbe", "Tanimuca-Retuarã": "tnc", "Tanjijili": "uji", "Tanudan Kalinga": "kml", "Tanzanian Sign Language": "tza", "Taos": "twf", "Tapachultec": "nai-tap", "Taparita": "sai-tpr", "Tapayuna": "sai-tap", "Tapeba": "tbb", "Tapei": "afp", "Tapieté": "tpj", "Tapirapé": "taf", "Tar Gula": "kcm", "Tara Baka": "bdh", "Tarairiú": "sai-trr", "Tarantino": "roa-tar", "Tarao": "tro", "Taraon": "mhu", "Tareng": "tgr", "Tariana": "tae", "Tarifit": "rif", "Tarjumo": "txj", "Tarok": "yer", "Taroko": "trv", "Tarpia": "tpf", "Tartessian": "txr", "Taruma": "tdm", "Tasawaq": "twq", "Tashelhit": "shi", "Tasmanian": "xtz", "Tasmate": "tmt", "Tat": "ttt", "Tataltepec Chatino": "cta", "Tatana": "txx", "Tatar": "tt", "Tataviam": "azc-tat", "Tatuyo": "tav", "Tauade": "ttd", "Taulil": "tuh", "Taungyo": "tco", "Taupota": "tpa", "Tause": "tad", "Taushiro": "trr", "Tausug": "tsg", "Tauya": "tya", "Taveta": "tvs", "Tavoyan": "tvn", "Tavringer Romani": "rmu", "Tawala": "tbo", "Tawandê": "xtw", "Tawang Monpa": "twm", "Tawasa": "nai-taw", "Taworta": "tbp", "Tawoyan": "twy", "Tawr Chin": "tcp", "Tay Khang": "tnu", "Tayabas Ayta": "ayy", "Taymanitic": "sem-tay", "Tayo": "cks", "Taíno": "tnq", "Tboli": "tbl", "Tchitchege": "tck", "Tchumbuli": "bqa", "Te'un": "tve", "Teanu": "tkw", "Tebul Sign Language": "tsy", "Tebul Ure Dogon": "dtu", "Tecpatlán Totonac": "tcw", "Tedaga": "tuq", "Tedim Chin": "ctd", "Tee": "tkq", "Tefaro": "tfo", "Tegali": "ras", "Tehit": "kps", "Tehuelche": "teh", "Teiwa": "twe", "Tejalapan Zapotec": "ztt", "Teke-Fuumu": "ifm", "Teke-Kukuya": "kkw", "Teke-Laali": "lli", "Teke-Tege": "teg", "Teke-Tsaayi": "tyi", "Teke-Tyee": "tyx", "Tektiteko": "ttc", "Tela-Masbuar": "tvm", "Telefol": "tlf", "Telugu": "te", "Teluti": "tlt", "Tem": "kdh", "Temascaltepec Nahuatl": "nhv", "Tembé": "tqb", "Teme": "tdo", "Temein": "teq", "Temi": "soz", "Temiar": "tea", "Temne": "tem", "Temoaya Otomi": "ott", "Temoq": "tmo", "Tempasuk Dusun": "tdu", "Ten'edn": "tnz", "Tenango Otomi": "otn", "Tene Kan Dogon": "dtk", "Tenggarong Kutai Malay": "vkt", "Tengger": "tes", "Tenharim": "pah", "Tenino": "tqn", "Tenis": "tns", "Tennet": "tex", "Teochew": "zhx-teo", "Teojomulco Chatino": "omq-teo", "Teop": "tio", "Teor": "tev", "Tepecano": "tep", "Tepetotutla Chinantec": "cnt", "Tepeuxila Cuicatec": "cux", "Tepinapa Chinantec": "cte", "Tepo Krumen": "ted", "Teposcolula Mixtec": "omq-tel", "Tequistlatec": "nai-teq", "Ter Sami": "sjt", "Tera": "ttr", "Terebu": "trb", "Terei": "buo", "Tereno": "ter", "Teressa": "tef", "Tereweng": "twg", "Teribe": "tfr", "Terik": "tec", "Termanu": "twu", "Ternate": "tft", "Ternateño": "tmg", "Tese": "keg", "Teshenawa": "twc", "Tetela": "tll", "Tetelcingo Nahuatl": "nhg", "Tetete": "teb", "Tetserret": "tez", "Tetum": "tet", "Tetun Dili": "tdt", "Teushen": "sai-teu", "Teutila Cuicatec": "cut", "Tewa": "tew", "Texcatepec Otomi": "otx", "Texistepec Popoluca": "poq", "Texmelucan Zapotec": "zpz", "Tezoatlán Mixtec": "mxb", "Tha": "thy", "Thachanadan": "thn", "Thado Chin": "tcz", "Thai": "th", "Thai Mon": "mnw-tha", "Thai Sign Language": "tsq", "Thai Song": "soa", "Thaiphum Chin": "cth", "Thakali": "ths", "Thamudic": "sem-tha", "Thangal Naga": "nki", "Thangmi": "thf", "Thao": "ssf", "Tharaka": "thk", "Tharrgari": "dhr", "Thavung": "thm", "Thawa": "xtv", "Tho": "tou", "Thompson": "thp", "Thopho": "ytp", "Thracian": "txh", "Thu Lao": "tyl", "Thulung": "tdh", "Thurawal": "tbh", "Thuri": "thu", "Tiagbamrin Aizi": "ahi", "Tiale": "mnl", "Tiang": "tbj", "Tibea": "ngy", "Tibetan": "bo", "Ticuna": "tca", "Tidaá Mixtec": "mtx", "Tidore": "tvo", "Tiemacèwè Bozo": "boo", "Tiene": "tii", "Tifal": "tif", "Tigak": "tgc", "Tigon Mbembe": "nza", "Tigre": "tig", "Tigrinya": "ti", "Tii": "txq", "Tijaltepec Mixtec": "xtl", "Tikar": "tik", "Tikopia": "tkp", "Tilapa Otomi": "otl", "Tillamook": "til", "Tilquiapan Zapotec": "zts", "Tilung": "tij", "Tima": "tms", "Timbe": "tim", "Timor Pidgin": "tvy", "Timote": "sai-tim", "Timucua": "tjm", "Timugon Murut": "tih", "Tinani": "lbf", "Tindi": "tin", "Tingui-Boto": "tgv", "Tinigua": "tit", "Tinoc Kallahan": "tne", "Tinputz": "tpz", "Tipai": "nai-tip", "Tippera": "tpe", "Tira": "tic", "Tirahi": "tra", "Tiranige Diga Dogon": "tde", "Tircul": "pyx", "Tiri": "cir", "Tiruray": "tiy", "Tita": "tdq", "Titan": "ttv", "Tiv": "tiv", "Tiwa": "lax", "Tiwi": "tiw", "Tiéfo": "tiq", "Tiéyaxo Bozo": "boz", "Tjurruru": "tju", "Tlachichilco Tepehua": "tpt", "Tlacoapa Me'phaa": "tpl", "Tlacoatzintepec Chinantec": "ctl", "Tlacolulita Zapotec": "zpk", "Tlahuica": "ocu", "Tlahuitoltepec Mixe": "mxp", "Tlamacazapa Nahuatl": "nuz", "Tlazoyaltepec Mixtec": "mqh", "Tlingit": "tli", "To": "toz", "To'abaita": "mlu", "Toaripi": "tqo", "Toba": "tob", "Toba Batak": "bbc", "Toba-Maskoy": "tmf", "Tobagonian Creole English": "tgh", "Tobanga": "tng", "Tobati": "tti", "Tobelo": "tlb", "Tobian": "tox", "Tobilung": "tgb", "Tobo": "tbv", "Tocantins Asurini": "asu", "Tocharian A": "xto", "Tocharian B": "txb", "Tocho": "taz", "Toda": "tcx", "Todrah": "tdr", "Tofa": "kim", "Tofanma": "tlg", "Tofin Gbe": "tfi", "Togbo-Vara Banda": "tor", "Togoyo": "tgy", "Tojolabal": "toj", "Tok Pisin": "tpi", "Toka-Leya": "dov", "Tokano": "zuh", "Tokelauan": "tkl", "Toki Pona": "tok", "Toku-No-Shima": "tkn", "Tol": "jic", "Tolai": "ksd", "Tolaki": "lbw", "Tolomako": "tlm", "Tolowa": "tol", "Toma": "tod", "Tomadino": "tdi", "Tombelala": "ttp", "Tombonuo": "txa", "Tombulu": "tom", "Tomini": "txm", "Tommeginne": "xpv", "Tommo So": "dto", "Tomo Kan Dogon": "dtm", "Tomoip": "tqp", "Tondano": "tdn", "Tonga (Malawi)": "tog", "Tonga (Mozambique)": "toh", "Tonga (Zambia)": "toi", "Tongan": "to", "Tongwe": "tny", "Tonjon": "tjn", "Tonkawa": "tqw", "Tonsawang": "tnw", "Tonsea": "txs", "Tontemboan": "tnt", "Toogee": "xpx", "Tooro": "ttj", "Topoiyo": "toy", "Toposa": "toq", "Toraja-Sa'dan": "sda", "Toram": "trj", "Torau": "ttu", "Toro": "tdv", "Toro So Dogon": "dts", "Toro Tegu Dogon": "dtt", "Toromono": "tno", "Torona": "tqr", "Torres Strait Creole": "tcs", "Torricelli": "tei", "Torricelli Yau": "yyu", "Torwali": "trw", "Torá": "trz", "Tosu": "sit-tos", "Totela": "ttl", "Toto": "txo", "Totoli": "txe", "Totomachapan Zapotec": "zph", "Totontepec Mixe": "mto", "Totoro": "ttk", "Touo": "tqu", "Toura": "neb", "Tourangeau": "roa-tou", "Towei": "ttn", "Translingual": "mul", "Transylvanian Saxon": "gmw-tsx", "Traveller Danish": "rmd", "Traveller Norwegian": "rmg", "Traveller Scottish": "trl", "Tregami": "trm", "Tremembé": "tme", "Trieng": "stg", "Trimuris": "tip", "Tring": "tgq", "Tringgus": "trx", "Trinidad and Tobago Sign Language": "lst", "Trinidadian Creole English": "trf", "Trinitario": "trn", "Trió": "tri", "Truká": "tka", "Trumai": "tpy", "Ts'ün-Lao": "tsl", "Tsaangi": "tsa", "Tsafiki": "cof", "Tsakhur": "tkr", "Tsakonian": "tsd", "Tsakwambo": "kvz", "Tsamai": "tsb", "Tsat": "huq", "Tsetsaut": "txc", "Tsez": "ddo", "Tshangla": "tsj", "Tshobdun": "sit-tsh", "Tshwa": "hio", "Tsikimba": "kdl", "Tsimané": "cas", "Tsimshian": "tsi", "Tsishingini": "tsw", "Tso": "ldp", "Tsogo": "tsv", "Tsonga": "ts", "Tsotsitaal": "fly", "Tsou": "tsu", "Tsum": "ttz", "Tsuvadi": "tvd", "Tsuvan": "tsh", "Tswa": "tsc", "Tswana": "tn", "Tswapong": "two", "Tuamotuan": "pmt", "Tuareg": "tmh", "Tubar": "tbu", "Tucano": "tuo", "Tugen": "tuy", "Tugun": "tzn", "Tugutil": "tuj", "Tukang Besi North": "khc", "Tukang Besi South": "bhq", "Tuki": "bag", "Tukpa": "tpq", "Tukudede": "tkd", "Tukumanféd": "tkf", "Tula": "tul", "Tule-Kaweah Yokuts": "nai-tky", "Tulehu": "tlu", "Tulishi": "tey", "Tulu": "tcy", "Tulu-Bohuai": "rak", "Tulua": "aus-tul", "Tuma-Irumu": "iou", "Tumak": "tmc", "Tumbuka": "tum", "Tumi": "kku", "Tumleo": "tmq", "Tumshuqese": "xtq", "Tumtum": "tbr", "Tumulung Sisaala": "sil", "Tundra Enets": "enh", "Tundra Nenets": "yrk", "Tunen": "tvu", "Tungag": "lcm", "Tunggare": "trt", "Tunia": "tug", "Tunica": "tun", "Tunisian Arabic": "aeb", "Tunisian Berber": "sds", "Tunisian Sign Language": "tse", "Tunjung": "tjg", "Tunni": "tqq", "Tunumiisut": "esx-tut", "Tunzu": "dza", "Tuoba": "qfa-xgx-tuo", "Tuotomb": "ttf", "Tuparí": "tpr", "Tupinambá": "tpn", "Tupinikin": "tpk", "Tupuri": "tui", "Turaka": "trh", "Turi": "trd", "Turiwára": "twt", "Turka": "tuz", "Turkana": "tuv", "Turkish": "tr", "Turkish Sign Language": "tsm", "Turkmen": "tk", "Turks and Caicos Creole English": "tch", "Turoyo": "tru", "Turumsa": "tqm", "Turung": "try", "Tuscarora": "tus", "Tutelo": "tta", "Tutong": "ttg", "Tutsa Naga": "tvt", "Tutuba": "tmi", "Tututepec Mixtec": "mtu", "Tututni": "tuu", "Tuvaluan": "tvl", "Tuvan": "tyv", "Tuwali Ifugao": "ifk", "Tuwari": "tww", "Tuwuli": "bov", "Tuxináwa": "tux", "Tuxá": "tud", "Tuyuca": "tue", "Tuyuhun": "qfa-xgx-tuh", "Twana": "twa", "Twendi": "twn", "Tyap": "kcg", "Tyaraity": "woa", "Tyerrernotepanner": "xph", "Tz'utujil": "tzj", "Tzeltal": "tzh", "Tzotzil": "tzo", "Tày": "tyz", "Tày Tac": "tyt", "Tây Bồi": "tas", "Téén": "lor", "Tübatulabal": "tub", "U": "uuu", "Uab Meto": "aoz", "Uamué": "uam", "Uare": "ksj", "Ubaghara": "byc", "Ubang": "uba", "Ubi": "ubi", "Ubir": "ubr", "Ubykh": "uby", "Ucayali-Yurúa Ashéninka": "cpb", "Uda": "uda", "Udi": "udi", "Udihe": "ude", "Udmurt": "udm", "Uduk": "udu", "Ufim": "ufi", "Ugandan Sign Language": "ugn", "Ugaritic": "uga", "Ughele": "uge", "Uhami": "uha", "Uisai": "uis", "Ujir": "udj", "Ukaan": "kcf", "Ukhwejo": "ukh", "Ukit": "umi", "Ukpe-Bayobiri": "ukp", "Ukpet-Ehom": "akd", "Ukrainian": "uk", "Ukrainian Sign Language": "ukl", "Ukue": "uku", "Ukuriguma": "ukg", "Ukwa": "ukq", "Ukwuani-Aboh-Ndoni": "ukw", "Ulau-Suain": "svb", "Ulch": "ulc", "Uldeme": "udl", "Ulithian": "uli", "Ullatan": "ull", "Ulumanda'": "ulm", "Ulwa": "ulw", "Uma": "ppk", "Uma' Lasan": "xky", "Uma' Lung": "ulu", "Umanakaina": "gdn", "Umatilla": "uma", "Umbindhamu": "umd", "Umbrian": "xum", "Umbu-Ungu": "ubu", "Umbugarla": "umr", "Umbundu": "umb", "Umbuygamu": "umg", "Ume Sami": "sju", "Umeda": "upi", "Umiida": "xud", "Umiray Dumaget Agta": "due", "Umon": "umm", "Umotína": "umo", "Umpila": "ump", "Una": "mtg", "Unami": "unm", "Unas": "art-una", "Unde Kaili": "unz", "Undetermined": "und", "Uneapa": "bbn", "Uneme": "une", "Unggaranggu": "xun", "Unggumi": "xgu", "Unserdeutsch": "uln", "Unua": "onu", "Unubahe": "unu", "Uokha": "uok", "Upper Chehalis": "cjh", "Upper Grand Valley Dani": "dna", "Upper Kinabatangan": "dmg", "Upper Kuskokwim": "kuu", "Upper Necaxa Totonac": "tku", "Upper Sorbian": "hsb", "Upper Ta'oih": "tth", "Upper Tanana": "tau", "Upper Taromi": "tov", "Upper Umpqua": "xup", "Ura (New Guinea)": "uro", "Ura (Vanuatu)": "uur", "Uradhi": "urf", "Urak Lawoi'": "urk", "Urali": "url", "Urapmin": "urm", "Urarina": "ura", "Urartian": "xur", "Urat": "urt", "Urdu": "ur", "Urhobo": "urh", "Uri": "uvh", "Urigina": "urg", "Urim": "uri", "Urimo": "urx", "Uripiv-Wala-Rano-Atchin": "upv", "Urningangg": "urc", "Uru": "ure", "Uru-Eu-Wau-Wau": "urz", "Uru-Pa-In": "urp", "Uruangnirin": "urn", "Uruava": "urv", "Urubú-Kaapor": "urb", "Uruguayan Sign Language": "ugy", "Urum": "uum", "Urumi": "uru", "Usaghade": "usk", "Usan": "wnu", "Usarufa": "usa", "Ushojo": "ush", "Usila Chinantec": "cuc", "Uspanteco": "usp", "Usui": "usi", "Utarmbung": "omo", "Ute": "ute", "Utu": "utu", "Uvbie": "evh", "Uwinymil": "aus-uwi", "Uya": "usu", "Uyajitaya": "duk", "Uyghur": "ug", "Uzbek": "uz", "Uzbeki Arabic": "auz", "Uzekwe": "eze", "Vaagri Booli": "vaa", "Vaghri": "vgr", "Vaghua": "tva", "Vagla": "vag", "Vai": "vai", "Vaiphei": "vap", "Vale": "vae", "Valencian Sign Language": "vsv", "Valle Nacional Chinantec": "cvn", "Valley Maidu": "vmv", "Valman": "van", "Valpei": "vlp", "Vamale": "mkt", "Vame": "mlr", "Vandalic": "xvn", "Vangunu": "mpr", "Vanimo": "vam", "Vanji": "ira-wnj", "Vanuma": "vau", "Vao": "vao", "Varhadi": "vah", "Varisi": "vrs", "Varli": "vav", "Vasavi": "vas", "Vayu": "vay", "Veddah": "ved", "Vehes": "val", "Vemgo-Mabas": "vem", "Venda": "ve", "Venetian": "vec", "Venetic": "xve", "Venezuelan Sign Language": "vsl", "Ventureño": "veo", "Veps": "vep", "Vera'a": "vra", "Vestinian": "xvs", "Vidunda": "vid", "Viemo": "vig", "Vietnamese": "vi", "Vilamovian": "wym", "Vilela": "vil", "Vili": "vif", "Villa Viciosa Agta": "dyg", "Vincentian Creole English": "svc", "Virgin Islands Creole": "vic", "Vishavan": "vis", "Viti": "vit", "Vitou": "vto", "Viya": "gev", "Vlax Romani": "rmy", "Volapük": "vo", "Volga German": "gmw-vog", "Volscian": "xvo", "Vono": "kch", "Voro": "vor", "Votic": "vot", "Vracada Apabhramsa": "inc-vra", "Vumbu": "vum", "Vunapu": "vnp", "Vunjo": "vun", "Vurës": "msn", "Vute": "vut", "Võro": "vro", "Wa": "wbm", "Wa'ema": "wag", "Waama": "wwa", "Waamwang": "wmn", "Wab": "wab", "Wabo": "wbb", "Waboda": "kmx", "Waci Gbe": "wci", "Wadaginam": "wdg", "Waddar": "wbq", "Wadi Wadi": "xwd", "Wadiyara Koli": "kxp", "Wadjabangayi": "wdy", "Wadjiginy": "wdj", "Wadjigu": "wdu", "Wae Rana": "wrx", "Waffa": "waj", "Wagawaga": "wgb", "Wagaya": "wga", "Wagdi": "wbr", "Wageman": "waq", "Wagi": "fad", "Wahau Kayan": "whu", "Wahau Kenyah": "whk", "Wahgi": "wgi", "Waigali": "wbk", "Waigeo": "wgo", "Waikuri": "nai-wai", "Wailaki": "wlk", "Wailapa": "wlr", "Waima'a": "wmh", "Waimaha": "bao", "Waimiri-Atroari": "atr", "Wainumá": "awd-wai", "Waioli": "wli", "Waitaká": "sai-wai", "Waiwai": "waw", "Waja": "wja", "Wajarri": "wbv", "Wajuk": "xwj", "Waka": "wav", "Wakawaka": "wkw", "Wakhi": "wbl", "Wakoná": "waf", "Wala": "lgl", "Walak": "wlw", "Walangama": "nlw", "Wali (Ghana)": "wlx", "Wali (Sudan)": "wll", "Waling": "wly", "Walio": "wla", "Walla Walla": "waa", "Wallisian": "wls", "Walloon": "wa", "Walmajarri": "wmt", "Wam": "wmo", "Wamas": "wmc", "Wambaya": "wmb", "Wambon": "wms", "Wambule": "wme", "Wamey": "cou", "Wamin": "wmi", "Wampar": "lbq", "Wampur": "waz", "Wan": "wan", "Wanambre": "wnb", "Wanap": "wnp", "Wancho": "nnp", "Wanda": "wbh", "Wandala": "mfi", "Wandamen": "wad", "Wandarang": "wnd", "Wandji": "wdd", "Waneci": "wne", "Wanga": "lwg", "Wanggamala": "wnm", "Wangganguru": "wgg", "Wanggom": "wng", "Wangkayutyuru": "wky", "Wangkumara": "xwk", "Wanham": "sai-wnm", "Wanji": "wbi", "Wanman": "wbt", "Wannu": "jub", "Wano": "wno", "Wantoat": "wnc", "Wanukaka": "wnk", "Wanyi": "wny", "Wané": "hwa", "Wapan": "juk", "Wapishana": "wap", "Wappo": "wao", "War-Jaintia": "aml", "Wara": "wbf", "Warao": "wba", "Warapu": "wra", "Waray Sorsogon": "srv", "Waray-Waray": "war", "Wardaman": "wrr", "Wardandi": "wxw", "Warekena": "gae", "Warembori": "wsa", "Wari'": "pav", "Waris": "wrs", "Waritai": "wbe", "Wariyangga": "wri", "Warji": "wji", "Warkay-Bipim": "bgv", "Warlmanpa": "wrl", "Warlpiri": "wbp", "Warluwara": "wrb", "Warnang": "wrn", "Waropen": "wrp", "Warray": "wrz", "Warrgamay": "wgy", "Warrwa": "wwr", "Waru": "wru", "Warumungu": "wrm", "Waruna": "wrv", "Warungu": "wrg", "Warwar Feni": "hrw", "Wasa": "wss", "Wasco-Wishram": "wac", "Wasembo": "gsp", "Washo": "was", "Waskia": "wsk", "Wastek": "hus", "Wasu": "wsu", "Watakataui": "wtk", "Watam": "wax", "Wathaurong": "wth", "Watiwa": "wtf", "Watubela": "wah", "Waube": "kop", "Wauja": "wau", "Wauyai": "wuy", "Wawa": "www", "Wawonii": "wow", "Waxianghua": "wxa", "Wayampi": "oym", "Wayana": "way", "Wayanad Chetti": "ctt", "Wayoró": "wyr", "Wayumará": "sai-way", "Wayuu": "guc", "Wedau": "wed", "Weh": "weh", "Welaung": "weu", "Weliki": "klh", "Welsh": "cy", "Welsh Romani": "rmw", "Wemale": "weo", "Wemba-Wemba": "xww", "Weme Gbe": "wem", "Wendat": "wdt", "Weri": "wer", "Wersing": "kvw", "West Albay Bikol": "fbl", "West Ambae": "nnd", "West Central Banda": "bbp", "West Coast Bajau": "bdr", "West Damar": "drn", "West Flemish": "vls", "West Frisian": "fy", "West Greenlandic Pidgin": "crp-gep", "West Lembata": "lmj", "West Makian": "mqs", "West Masela": "mss", "West Tarangan": "txn", "West Uvean": "uve", "West-Central Limba": "lia", "Western Apache": "apw", "Western Arrernte": "are", "Western Bolivian Guaraní": "gnw", "Western Bru": "brv", "Western Bukidnon Manobo": "mbb", "Western Cham": "cja", "Western Dani": "dnw", "Western Durango Nahuatl": "azn", "Western Fijian": "wyy", "Western Gurung": "gvr", "Western Highland Chatino": "ctp", "Western Huasteca Nahuatl": "nhw", "Western Jicaque": "und-wji", "Western Juxtlahuaca Mixtec": "jmx", "Western Karaboro": "kza", "Western Katu": "kuf", "Western Kayah": "kyu", "Western Keres": "kjq", "Western Krahn": "krw", "Western Lalu": "ywl", "Western Lawa": "lcp", "Western Magar": "mrd", "Western Maninkakan": "mlq", "Western Mari": "mrj", "Western Mashan Hmong": "hmw", "Western Meohang": "raf", "Western Muria": "mut", "Western Neo-Aramaic": "amw", "Western Ojibwa": "ojw", "Western Panjabi": "pnb", "Western Penan": "pne", "Western Pwo": "pwo", "Western Sisaala": "ssl", "Western Subanon": "suc", "Western Tamang": "tdg", "Western Tawbuid": "twb", "Western Totonac": "tqt", "Western Tunebo": "tnb", "Western Xiangxi Miao": "mmr", "Western Xwla Gbe": "xwl", "Western Yugur": "ybe", "Wewaw": "wea", "Weyewa": "wew", "White Gelao": "giw", "White Hmong": "mww", "White Lachi": "lwh", "Whitesands": "tnp", "Wiarumus": "tua", "Wichita": "wic", "Wichí Lhamtés Güisnay": "mzh", "Wichí Lhamtés Nocten": "mtp", "Wichí Lhamtés Vejoz": "wlv", "Wik-Epa": "wie", "Wik-Iiyanh": "wij", "Wik-Keyangan": "wif", "Wik-Me'anha": "wih", "Wik-Mungkan": "wim", "Wik-Ngathana": "wig", "Wikalkan": "wik", "Wikngenchera": "wua", "Wilawila": "wil", "Winnebago": "win", "Wintu": "wnw", "Winyé": "kst", "Wipi": "gdr", "Wiradhuri": "wrh", "Wiraféd": "wir", "Wirangu": "wgu", "Wiru": "wiu", "Wirö": "wpc", "Wiwa": "mbp", "Wiyot": "wiy", "Woccon": "xwc", "Wogamusin": "wog", "Wogeo": "woc", "Woi": "wbw", "Woiwurrung": "wyi", "Wojenaka": "jod", "Wolane": "wle", "Wolani": "wod", "Wolaytta": "wal", "Woleaian": "woe", "Wolio": "wlo", "Wolof": "wo", "Womo": "wmx", "Wong-gie": "aus-won", "Wongo": "won", "Woods Cree": "cwd", "Woria": "wor", "Worimi": "kda", "Worodougou": "jud", "Worora": "wro", "Wotapuri-Katarqalai": "wsv", "Wotu": "wtw", "Woun Meu": "noa", "Written Oirat": "xwo", "Wu": "wuu", "Wudu": "wud", "Wuhuan": "qfa-xgx-wuh", "Wulguru": "aus-wul", "Wuliwuli": "wlu", "Wulna": "wux", "Wumboko": "bqm", "Wumbvu": "wum", "Wumeng Nasu": "ywu", "Wunai Bunu": "bwn", "Wunambal": "wub", "Wurrugu": "wur", "Wusa Nasu": "yig", "Wushi": "bse", "Wusi": "wsi", "Wutung": "wut", "Wutunhua": "wuh", "Wuvulu-Aua": "wuv", "Wyandot": "wya", "Wára": "tci", "Wãpha": "juw", "Wè Northern": "wob", "Wè Southern": "gxx", "Wè Western": "wec", "Xadani Zapotec": "zax", "Xakriabá": "xkr", "Xamtanga": "xan", "Xanaguía Zapotec": "ztg", "Xaragure": "axx", "Xavante": "xav", "Xerénte": "xer", "Xetá": "xet", "Xhosa": "xh", "Xianbei": "qfa-xgx-xbi", "Xiang": "hsn", "Xibe": "sjo", "Xicotepec de Juárez Totonac": "too", "Xinca": "xin", "Xingú Asuriní": "asn", "Xipaya": "xiy", "Xiri": "xii", "Xiriâna": "xir", "Xishanba Lalo": "ywt", "Xocó": "sai-xoc", "Xokleng": "xok", "Xukurú": "xoo", "Xwela Gbe": "xwe", "Xârâcùù": "ane", "Yaa": "iyx", "Yaaku": "muu", "Yabarana": "yar", "Yabaâna": "ybn", "Yaben": "ybm", "Yabong": "ybo", "Yabula Yabula": "yxy", "Yace": "ekr", "Yaeyama": "rys", "Yafi": "wfg", "Yagara": "yxg", "Yagaria": "ygr", "Yagnobi": "yai", "Yagomi": "ygm", "Yagua": "yad", "Yagwoia": "ygw", "Yahadian": "ner", "Yahang": "rhp", "Yahuna": "ynu", "Yaka": "yaf", "Yakaikeke": "ykk", "Yakan": "yka", "Yakima": "yak", "Yakkha": "ybh", "Yakoma": "yky", "Yakut": "sah", "Yala": "yba", "Yalahatan": "jal", "Yalakalore": "xyl", "Yalarnnga": "ylr", "Yale": "nce", "Yaleba": "ylb", "Yalunka": "yal", "Yalálag Zapotec": "zpu", "Yamap": "ymp", "Yamba": "yam", "Yambes": "ymb", "Yambeta": "yat", "Yamdena": "jmd", "Yameo": "yme", "Yami": "tao", "Yaminahua": "yaa", "Yamongeri": "ymg", "Yamphu": "ybi", "Yan-nhangu": "jay", "Yana": "ynn", "Yanda": "yda", "Yanda Dogon": "dym", "Yandjibara": "xyb", "Yandruwandha": "ynd", "Yanesha'": "ame", "Yangben": "yav", "Yangkaal": "aus-ynk", "Yangkam": "bsx", "Yangman": "jng", "Yango": "yng", "Yangulam": "ynl", "Yangum Dey": "yde", "Yangum Gel": "ygl", "Yangum Mon": "ymo", "Yankunytjatjara": "kdd", "Yanomamö": "guu", "Yanomámi": "wca", "Yansi": "yns", "Yanyuwa": "jao", "Yao": "yao", "Yao (South America)": "sai-yao", "Yaosakor Asmat": "asy", "Yaouré": "yre", "Yapese": "yap", "Yapunda": "yev", "Yaqay": "jaq", "Yaqui": "yaq", "Yarawata": "yrw", "Yareba": "yrb", "Yareni Zapotec": "zae", "Yarli": "yxl", "Yarluyandi": "yry", "Yaroamë": "yro", "Yarumá": "sai-yar", "Yarí": "yri", "Yasa": "yko", "Yatay": "yty", "Yatee Zapotec": "zty", "Yatzachi Zapotec": "zav", "Yaul": "yla", "Yaur": "jau", "Yautepec Zapotec": "zpb", "Yavitero": "yvt", "Yawa": "yva", "Yawalapití": "yaw", "Yawanawa": "ywn", "Yawarawarga": "yww", "Yaweyuha": "yby", "Yawijibaya": "jbw", "Yawiyo": "ybx", "Yawuru": "ywr", "Yaygir": "xya", "Yazghulami": "yah", "Yei": "jei", "Yekhee": "ets", "Yekora": "ykr", "Yele": "yle", "Yelmek": "jel", "Yelogu": "ylg", "Yemba": "ybb", "Yemeni Arabic": "ayn", "Yemsa": "jnj", "Yendang": "yen", "Yeni": "yei", "Yeniche": "yec", "Yerakai": "yra", "Yeretuar": "gop", "Yerong": "yrn", "Yerukula": "yeu", "Yeskwa": "yes", "Yessan-Mayo": "yss", "Yetfa": "yet", "Yevanic": "yej", "Yeyi": "yey", "Yiddish": "yi", "Yidgha": "ydg", "Yidiny": "yii", "Yil": "yll", "Yilan Creole": "ycr", "Yimas": "yee", "Yimchungru Naga": "yim", "Yinbaw Karen": "kvu", "Yinchia": "yin", "Yindjibarndi": "yij", "Yindjilandji": "yil", "Yine": "pib", "Yinggarda": "yia", "Yinhawangka": "ywg", "Yiningayi": "ygi", "Yintale Karen": "kvy", "Yinwum": "yxm", "Yir-Yoront": "yiy", "Yirandali": "ljw", "Yis": "yis", "Yitha Yitha": "xth", "Yoba": "yob", "Yocoboué Dida": "gud", "Yogad": "yog", "Yoidik": "ydk", "Yoke": "yki", "Yola": "yol", "Yolmo": "scp", "Yolngu Sign Language": "ygs", "Yoloxochitl Mixtec": "xty", "Yom": "pil", "Yombe": "yom", "Yonaguni": "yoi", "Yong": "yno", "Yongkom": "yon", "Yopno": "yut", "Yora": "mts", "Yoron": "yox", "Yorta Yorta": "xyy", "Yoruba": "yo", "Yosondúa Mixtec": "mpm", "Youle Jinuo": "jiu", "Younuo Bunu": "buh", "Yout Wam": "ytw", "Yoy": "yoy", "Yuaga": "nua", "Yucatec Maya": "yua", "Yucatec Maya Sign Language": "msd", "Yuchi": "yuc", "Yucuañe Mixtec": "mvg", "Yucuna": "ycn", "Yug": "yug", "Yugambal": "yub", "Yugoslavian Sign Language": "ysl", "Yugul": "ygu", "Yuhup": "yab", "Yuki": "yuk", "Yukpa": "yup", "Yukuben": "ybl", "Yulu": "yul", "Yuma": "yum", "Yumana": "awd-yum", "Yup'ik": "esu", "Yupiltepeque": "nai-yup", "Yupua": "sai-yup", "Yuqui": "yuq", "Yuracare": "yuz", "Yuri": "sai-yri", "Yurok": "yur", "Yuru": "ljx", "Yurumanguí": "sai-yur", "Yurutí": "yui", "Yutanduchi Mixtec": "mab", "Yuwana": "yau", "Yuyu": "yxu", "Yámana": "yag", "Zaachila Zapotec": "ztx", "Zabana": "kji", "Zacatepec Chatino": "ctz", "Zacatlán-Ahuacatlán-Tepetzintla Nahuatl": "nhi", "Zaghawa": "zag", "Zaiwa": "atb", "Zakhring": "zkr", "Zambian Sign Language": "zsl", "Zan Gula": "zna", "Zanaki": "zak", "Zande": "zne", "Zangskari": "zau", "Zangwal": "zah", "Zaniza Zapotec": "zpw", "Zapotec": "zap", "Zaramo": "zaj", "Zari": "zaz", "Zarma": "dje", "Zauzou": "zal", "Zay": "zwa", "Zayein Karen": "kxk", "Zayse-Zergulla": "zay", "Zazaki": "zza", "Zazao": "jaj", "Zbu": "sit-zbu", "Zealandic": "zea", "Zeem": "zua", "Zemba": "dhm", "Zeme Naga": "nzm", "Zemgalian": "xzm", "Zenag": "zeg", "Zenaga": "zen", "Zenzontepec Chatino": "czn", "Zhaba": "zhb", "Zhang-Zhung": "xzh", "Zhire": "zhi", "Zhoa": "zhw", "Zhuang": "za", "Zhár": "jjr", "Zia": "zia", "Zialo": "zil", "Zigula": "ziw", "Zimakani": "zik", "Zimba": "zmb", "Zimbabwe Sign Language": "zib", "Zinza": "zin", "Zipser German": "gmw-zps", "Zire": "sih", "Zirenkel": "zrn", "Ziriya": "zir", "Zizilivakan": "ziz", "Zo'é": "pto", "Zokhuo": "yzk", "Zoogocho Zapotec": "zpq", "Zotung Chin": "czt", "Zou": "zom", "Zulgo-Gemzek": "gnd", "Zulu": "zu", "Zumaya": "zuy", "Zumbun": "jmb", "Zuni": "zun", "Zuojiang Zhuang": "zzj", "Zuwara": "ber-zuw", "Zyphe": "zyp", "Záparo": "zro", "Àhàn": "ahn", "Áncá": "acb", "Ömie": "aom", "Önge": "oon", "ǀXam": "xam", "ǁAni": "hnh", "ǁGana": "gnk", "ǁXegwi": "xeg", "ǂHoan": "huc", "ǃKung": "khi-kun", "ǃXóõ": "nmn" } sm1t9u20q0628am0j2skn75t2bzd9ds मॉड्यूल:languages/code to canonical name 828 304629 487551 477992 2026-09-01T15:16:10Z SM7 6218 असमिया 487551 Scribunto text/plain return { ["aa"] = "Afar", ["aaa"] = "Ghotuo", ["aab"] = "Alumu-Tesu", ["aac"] = "Ari", ["aad"] = "Amal", ["aaf"] = "Aranadan", ["aag"] = "Ambrak", ["aah"] = "Abu' Arapesh", ["aai"] = "Arifama-Miniafia", ["aak"] = "Ankave", ["aal"] = "Afade", ["aan"] = "Anambé", ["aap"] = "Pará Arára", ["aaq"] = "Penobscot", ["aas"] = "Aasax", ["aau"] = "Abau", ["aav-khs-pro"] = "Proto-Khasian", ["aav-nic-pro"] = "Proto-Nicobarese", ["aav-pkl-pro"] = "Proto-Pnar-Khasi-Lyngngam", ["aav-pro"] = "Proto-Austroasiatic", ["aaw"] = "Solong", ["aax"] = "Mandobo Atas", ["aaz"] = "Amarasi", ["ab"] = "Abkhaz", ["aba"] = "Abé", ["abb"] = "Bankon", ["abc"] = "Ambala Ayta", ["abd"] = "Camarines Norte Agta", ["abe"] = "Abenaki", ["abf"] = "Abai Sungai", ["abg"] = "Abaga", ["abh"] = "Tajiki Arabic", ["abi"] = "Abidji", ["abj"] = "Aka-Bea", ["abl"] = "Abung", ["abm"] = "Abanyom", ["abn"] = "Abua", ["abo"] = "Abon", ["abp"] = "Abenlen Ayta", ["abq"] = "Abaza", ["abr"] = "Abron", ["abs"] = "Ambonese Malay", ["abt"] = "Ambulas", ["abu"] = "Abure", ["abv"] = "Baharna Arabic", ["abw"] = "Pal", ["abx"] = "Inabaknon", ["aby"] = "Aneme Wake", ["abz"] = "Abui", ["aca"] = "Achagua", ["acb"] = "Áncá", ["acd"] = "Gikyode", ["ace"] = "Acehnese", ["ach"] = "Acholi", ["aci"] = "Aka-Cari", ["ack"] = "Aka-Kora", ["acl"] = "Akar-Bale", ["acm"] = "Iraqi Arabic", ["acn"] = "Achang", ["acp"] = "Eastern Acipa", ["acr"] = "Achi", ["acs"] = "Acroá", ["acu"] = "Achuar", ["acv"] = "Achumawi", ["acw"] = "Hijazi Arabic", ["acx"] = "Omani Arabic", ["acy"] = "Cypriot Arabic", ["acz"] = "Acheron", ["ada"] = "Adangme", ["adb"] = "Adabe", ["add"] = "Dzodinka", ["ade"] = "Adele", ["adf"] = "Dhofari Arabic", ["adg"] = "Andegerebinha", ["adh"] = "Adhola", ["adi"] = "Adi", ["adj"] = "Adioukrou", ["adl"] = "Galo", ["adn"] = "Adang", ["ado"] = "Abu", ["adp"] = "Adap", ["adq"] = "Adangbe", ["adr"] = "Adonara", ["ads"] = "Adamorobe Sign Language", ["adt"] = "Adnyamathanha", ["adu"] = "Aduge", ["adw"] = "Amondawa", ["ady"] = "Adyghe", ["adz"] = "Adzera", ["ae"] = "Avestan", ["aea"] = "Areba", ["aeb"] = "Tunisian Arabic", ["aed"] = "Argentine Sign Language", ["aee"] = "Northeast Pashayi", ["aek"] = "Haeke", ["ael"] = "Ambele", ["aem"] = "Arem", ["aen"] = "Armenian Sign Language", ["aeq"] = "Aer", ["aer"] = "Eastern Arrernte", ["aes"] = "Alsea", ["aeu"] = "Akeu", ["aew"] = "Ambakich", ["aey"] = "Amele", ["aez"] = "Aeka", ["af"] = "Afrikaans", ["afa-pro"] = "Proto-Afroasiatic", ["afb"] = "Gulf Arabic", ["afd"] = "Andai", ["afe"] = "Putukwam", ["afg"] = "Afghan Sign Language", ["afh"] = "Afrihili", ["afi"] = "Akrukay", ["afk"] = "Nanubae", ["afn"] = "Defaka", ["afo"] = "Eloyi", ["afp"] = "Tapei", ["afs"] = "Afro-Seminole Creole", ["aft"] = "Afitti", ["afu"] = "Awutu", ["afz"] = "Obokuitai", ["aga"] = "Aguano", ["agb"] = "Legbo", ["agc"] = "Agatu", ["agd"] = "Agarabi", ["age"] = "Angal", ["agf"] = "Arguni", ["agg"] = "Angor", ["agh"] = "Ngelima", ["agi"] = "Agariya", ["agj"] = "Argobba", ["agk"] = "Isarog Agta", ["agl"] = "Fembe", ["agm"] = "Angaataha", ["agn"] = "Agutaynen", ["ago"] = "Tainae", ["agq"] = "Aghem", ["agr"] = "Aguaruna", ["ags"] = "Esimbi", ["agt"] = "Central Cagayan Agta", ["agu"] = "Aguacateca", ["agv"] = "Remontado Agta", ["agw"] = "Kahua", ["agx"] = "Aghul", ["agy"] = "Southern Alta", ["agz"] = "Mount Iriga Agta", ["aha"] = "Ahanta", ["ahb"] = "Axamb", ["ahg"] = "Qimant", ["ahh"] = "Aghu", ["ahi"] = "Tiagbamrin Aizi", ["ahk"] = "Akha", ["ahl"] = "Igo", ["ahm"] = "Mobumrin Aizi", ["ahn"] = "Àhàn", ["aho"] = "Ahom", ["ahp"] = "Aproumu Aizi", ["ahr"] = "Ahirani", ["ahs"] = "Ashe", ["aht"] = "Ahtna", ["aia"] = "Arosi", ["aib"] = "Aynu", ["aic"] = "Ainbai", ["aid"] = "Alngith", ["aie"] = "Amara", ["aif"] = "Agi", ["aig"] = "Antigua and Barbuda Creole English", ["aih"] = "Ai-Cham", ["aii"] = "Assyrian Neo-Aramaic", ["aij"] = "Lishanid Noshan", ["aik"] = "Ake", ["ail"] = "Aimele", ["aim"] = "Aimol", ["ain"] = "Ainu", ["aio"] = "Aiton", ["aip"] = "Burumakok", ["air"] = "Airoran", ["ait"] = "Arikem", ["aiw"] = "Aari", ["aix"] = "Aighon", ["aiy"] = "Ali", ["aja"] = "Aja", ["ajg"] = "Adja", ["aji"] = "Ajië", ["ajn"] = "Andajin", ["ajp"] = "South Levantine Arabic", ["ajw"] = "Ajawa", ["ajz"] = "Amri Karbi", ["ak"] = "Akan", ["akb"] = "Angkola Batak", ["akc"] = "Mpur", ["akd"] = "Ukpet-Ehom", ["ake"] = "Akawaio", ["akf"] = "Akpa", ["akg"] = "Anakalangu", ["akh"] = "Angal Heneng", ["aki"] = "Aiome", ["akj"] = "Jeru", ["akk"] = "Akkadian", ["akl"] = "Aklanon", ["akm"] = "Aka-Bo", ["ako"] = "Akurio", ["akp"] = "Siwu", ["akq"] = "Ak", ["akr"] = "Araki", ["aks"] = "Akaselem", ["akt"] = "Akolet", ["aku"] = "Akum", ["akv"] = "Akhvakh", ["akw"] = "Akwa", ["akx"] = "Aka-Kede", ["aky"] = "Aka-Kol", ["akz"] = "Alabama", ["ala"] = "Alago", ["alc"] = "Kawésqar", ["ald"] = "Alladian", ["ale"] = "Aleut", ["alf"] = "Alege", ["alg-aga"] = "Agawam", ["alg-pro"] = "Proto-Algonquian", ["alh"] = "Alawa", ["ali"] = "Amaimon", ["alj"] = "Alangan", ["alk"] = "Alak", ["all"] = "Allar", ["alm"] = "Amblong", ["alo"] = "Larike-Wakasihu", ["alp"] = "Alune", ["alq"] = "Algonquin", ["alr"] = "Alutor", ["alt"] = "Southern Altai", ["alu"] = "'Are'are", ["alv-ama"] = "Amasi", ["alv-bgu"] = "Baïnounk Gubëeher", ["alv-bua-pro"] = "Proto-Bua", ["alv-cng-pro"] = "Proto-Cangin", ["alv-edk-pro"] = "Proto-Edekiri", ["alv-edo-pro"] = "Proto-Edoid", ["alv-fli-pro"] = "Proto-Fali", ["alv-gbe-pro"] = "Proto-Gbe", ["alv-gng-pro"] = "Proto-Guang", ["alv-gtm-pro"] = "Proto-Central Togo", ["alv-gwa"] = "Gwara", ["alv-hei-pro"] = "Proto-Heiban", ["alv-ido-pro"] = "Proto-Idomoid", ["alv-igb-pro"] = "Proto-Igboid", ["alv-kwa-pro"] = "Proto-Kwa", ["alv-mum-pro"] = "Proto-Mumuye", ["alv-nup-pro"] = "Proto-Nupoid", ["alv-pro"] = "Proto-Atlantic-Congo", ["alv-von-pro"] = "Proto-Volta-Niger", ["alv-yor-pro"] = "Proto-Yoruba", ["alv-yrd-pro"] = "Proto-Yoruboid", ["alw"] = "Alaba", ["alx"] = "Amol", ["aly"] = "Alyawarr", ["alz"] = "Alur", ["am"] = "Amharic", ["ama"] = "Amanayé", ["amb"] = "Ambo", ["amc"] = "Amahuaca", ["ame"] = "Yanesha'", ["amf"] = "Hamer-Banna", ["amg"] = "Amurdag", ["ami"] = "Amis", ["amj"] = "Amdang", ["amk"] = "Ambai", ["aml"] = "War-Jaintia", ["amm"] = "Ama", ["amn"] = "Amanab", ["amo"] = "Amo", ["amp"] = "Alamblak", ["amq"] = "Amahai", ["amr"] = "Amarakaeri", ["ams"] = "Southern Amami-Oshima", ["amt"] = "Amto", ["amu"] = "Guerrero Amuzgo", ["amv"] = "Ambelau", ["amw"] = "Western Neo-Aramaic", ["amx"] = "Anmatyerre", ["amy"] = "Ami", ["amz"] = "Atampaya", ["an"] = "Aragonese", ["ana"] = "Andaqui", ["anb"] = "Andoa", ["anc"] = "Ngas", ["and"] = "Ansus", ["ane"] = "Xârâcùù", ["anf"] = "Animere", ["ang"] = "Old English", ["anh"] = "Nend", ["ani"] = "Andi", ["anj"] = "Anor", ["ank"] = "Goemai", ["anl"] = "Anu", ["anm"] = "Anal", ["ann"] = "Obolo", ["ano"] = "Andoque", ["anp"] = "Angika", ["anq"] = "Jarawa", ["anr"] = "Andh", ["ans"] = "Anserma", ["ant"] = "Antakarinya", ["anu"] = "Anuak", ["anv"] = "Denya", ["anw"] = "Anaang", ["anx"] = "Andra-Hus", ["any"] = "Anyi", ["anz"] = "Anem", ["aoa"] = "Angolar", ["aob"] = "Abom", ["aoc"] = "Pemon", ["aod"] = "Andarum", ["aoe"] = "Angal Enen", ["aof"] = "Bragat", ["aog"] = "Angoram", ["aoi"] = "Anindilyakwa", ["aoj"] = "Mufian", ["aok"] = "Arhö", ["aol"] = "Alor", ["aom"] = "Ömie", ["aon"] = "Bumbita Arapesh", ["aor"] = "Aore", ["aos"] = "Taikat", ["aot"] = "Atong (India)", ["aou"] = "A'ou", ["aox"] = "Atorada", ["aoz"] = "Uab Meto", ["apa-pro"] = "Proto-Apachean", ["apb"] = "Sa'a", ["apc"] = "North Levantine Arabic", ["apd"] = "Sudanese Arabic", ["ape"] = "Bukiyip", ["apf"] = "Pahanan Agta", ["apg"] = "Ampanang", ["aph"] = "Athpare", ["api"] = "Apiaká", ["apj"] = "Jicarilla", ["apk"] = "Plains Apache", ["apl"] = "Lipan", ["apm"] = "Chiricahua", ["apn"] = "Apinayé", ["apo"] = "Ambul", ["app"] = "Apma", ["apq"] = "A-Pucikwar", ["apr"] = "Arop-Lokep", ["aps"] = "Arop-Sissano", ["apt"] = "Apatani", ["apu"] = "Apurinã", ["apv"] = "Alapmunte", ["apw"] = "Western Apache", ["apx"] = "Aputai", ["apy"] = "Apalaí", ["apz"] = "Safeyoka", ["aqc"] = "Archi", ["aqd"] = "Ampari Dogon", ["aqg"] = "Arigidi", ["aql-pro"] = "Proto-Algic", ["aqm"] = "Atohwaim", ["aqn"] = "Northern Alta", ["aqp"] = "Atakapa", ["aqr"] = "Arhâ", ["aqt"] = "Angaité", ["aqz"] = "Akuntsu", ["ar"] = "Arabic", ["arc"] = "Aramaic", ["ard"] = "Arabana", ["are"] = "Western Arrernte", ["arh"] = "Arhuaco", ["ari"] = "Arikara", ["arj"] = "Arapaso", ["ark"] = "Arikapú", ["arl"] = "Arabela", ["arn"] = "Mapudungun", ["aro"] = "Araona", ["arp"] = "Arapaho", ["arq"] = "Algerian Arabic", ["arr"] = "Arara-Karo", ["ars"] = "Najdi Arabic", ["art-blk"] = "Bolak", ["art-bsp"] = "Black Speech", ["art-com"] = "Communicationssprache", ["art-dtk"] = "Dothraki", ["art-elo"] = "Eloi", ["art-gld"] = "Goa'uld", ["art-lap"] = "Lapine", ["art-man"] = "Mandalorian", ["art-mun"] = "Mundolinco", ["art-nav"] = "Na'vi", ["art-nox"] = "Noxilo", ["art-una"] = "Unas", ["aru"] = "Arua", ["arv"] = "Arbore", ["arw"] = "Arawak", ["arx"] = "Aruá", ["ary"] = "Moroccan Arabic", ["arz"] = "Egyptian Arabic", ["as"] = "असमिया", ["asa"] = "Pare", ["asb"] = "Assiniboine", ["asc"] = "Casuarina Coast Asmat", ["ase"] = "American Sign Language", ["asf"] = "Auslan", ["asg"] = "Cishingini", ["ash"] = "Abishira", ["asi"] = "Buruwai", ["asj"] = "Nsari", ["ask"] = "Ashkun", ["asl"] = "Asilulu", ["asn"] = "Xingú Asuriní", ["aso"] = "Dano", ["asp"] = "Algerian Sign Language", ["asq"] = "Austrian Sign Language", ["asr"] = "Asuri", ["ass"] = "Ipulo", ["ast"] = "Asturian", ["asu"] = "Tocantins Asurini", ["asv"] = "Asoa", ["asw"] = "Australian Aboriginal Sign Language", ["asx"] = "Muratayak", ["asy"] = "Yaosakor Asmat", ["asz"] = "As", ["ata"] = "Pele-Ata", ["atb"] = "Zaiwa", ["atc"] = "Atsahuaca", ["atd"] = "Ata Manobo", ["ate"] = "Atemble", ["atg"] = "Okpela", ["ath-nic"] = "Nicola", ["ath-pro"] = "Proto-Athabaskan", ["ati"] = "Attié", ["atj"] = "Atikamekw", ["atk"] = "Ati", ["atl"] = "Mount Iraya Agta", ["atm"] = "Ata", ["ato"] = "Atong (Cameroon)", ["atp"] = "Pudtol Atta", ["atq"] = "Aralle-Tabulahan", ["atr"] = "Waimiri-Atroari", ["ats"] = "Gros Ventre", ["att"] = "Pamplona Atta", ["atu"] = "Reel", ["atv"] = "Northern Altai", ["atw"] = "Atsugewi", ["atx"] = "Arutani", ["aty"] = "Aneityum", ["atz"] = "Arta", ["aua"] = "Asumboa", ["aub"] = "Alugu", ["auc"] = "Huaorani", ["aud"] = "Anuta", ["auf-pro"] = "Proto-Arawa", ["aug"] = "Aguna", ["auh"] = "Aushi", ["aui"] = "Anuki", ["auj"] = "Awjila", ["auk"] = "Heyo", ["aul"] = "Aulua", ["aum"] = "Asu", ["aun"] = "Molmo One", ["auo"] = "Auyokawa", ["aup"] = "Makayam", ["auq"] = "Anus", ["aur"] = "Aruek", ["aus-alu"] = "Alungul", ["aus-and"] = "Andjingith", ["aus-ang"] = "Angkula", ["aus-arn-pro"] = "Proto-Arnhem", ["aus-bra"] = "Barranbinya", ["aus-brm"] = "Barunggam", ["aus-cww-pro"] = "Proto-Central New South Wales", ["aus-dal-pro"] = "Proto-Daly", ["aus-guw"] = "Guwar", ["aus-lsw"] = "Little Swanport", ["aus-mbi"] = "Mbiywom", ["aus-ngk"] = "Ngkoth", ["aus-nyu-pro"] = "Proto-Nyulnyulan", ["aus-pam-pro"] = "Proto-Pama-Nyungan", ["aus-tul"] = "Tulua", ["aus-uwi"] = "Uwinymil", ["aus-wdj-pro"] = "Proto-Iwaidjan", ["aus-won"] = "Wong-gie", ["aus-wul"] = "Wulguru", ["aus-ynk"] = "Yangkaal", ["aut"] = "Austral", ["auu"] = "Auye", ["auw"] = "Awyi", ["aux"] = "Aurá", ["auy"] = "Auyana", ["auz"] = "Uzbeki Arabic", ["av"] = "Avar", ["avb"] = "Avau", ["avd"] = "Alviri-Vidari", ["avi"] = "Avikam", ["avk"] = "Kotava", ["avm"] = "Angkamuthi", ["avn"] = "Avatime", ["avo"] = "Agavotaguerra", ["avs"] = "Aushiri", ["avt"] = "Au", ["avu"] = "Avokaya", ["avv"] = "Avá-Canoeiro", ["awa"] = "Awadhi", ["awb"] = "Awa (New Guinea)", ["awc"] = "Cicipu", ["awd-ama"] = "Amarizana", ["awd-amc-pro"] = "Proto-Amuesha-Chamicuro", ["awd-ana"] = "Anauyá", ["awd-apo"] = "Apolista", ["awd-cav"] = "Cavere", ["awd-gnu"] = "Guinau", ["awd-kar"] = "Cariay", ["awd-kaw"] = "Kawishana", ["awd-kmp-pro"] = "Proto-Kampa", ["awd-kus"] = "Kustenau", ["awd-man"] = "Manao", ["awd-mar"] = "Marawan", ["awd-mpr"] = "Maypure", ["awd-mrt"] = "Mariaté", ["awd-nwk-pro"] = "Proto-Nawiki", ["awd-pai"] = "Paikoneka", ["awd-pas"] = "Passé", ["awd-pro"] = "Proto-Arawak", ["awd-prw-pro"] = "Proto-Paresi-Waura", ["awd-she"] = "Shebayo", ["awd-taa-pro"] = "Proto-Ta-Arawak", ["awd-wai"] = "Wainumá", ["awd-yum"] = "Yumana", ["awe"] = "Awetí", ["awg"] = "Anguthimri", ["awh"] = "Awbono", ["awi"] = "Aekyom", ["awk"] = "Awabakal", ["awm"] = "Arawum", ["awn"] = "Awngi", ["awo"] = "Awak", ["awr"] = "Awera", ["aws"] = "South Awyu", ["awt"] = "Araweté", ["awu"] = "Central Awyu", ["awv"] = "Jair Awyu", ["aww"] = "Awun", ["awx"] = "Awara", ["awy"] = "Edera Awyu", ["axb"] = "Abipon", ["axe"] = "Ayerrerenge", ["axg"] = "Mato Grosso Arára", ["axk"] = "Aka (Central Africa)", ["axl"] = "Lower Southern Aranda", ["axm"] = "Middle Armenian", ["axx"] = "Xaragure", ["ay"] = "Aymara", ["aya"] = "Awar", ["ayb"] = "Ayizo", ["ayd"] = "Ayabadhu", ["aye"] = "Ayere", ["ayg"] = "Nyanga (Togo)", ["ayi"] = "Leyigha", ["ayk"] = "Akuku", ["ayl"] = "Libyan Arabic", ["ayn"] = "Yemeni Arabic", ["ayo"] = "Ayoreo", ["ayp"] = "North Mesopotamian Arabic", ["ayq"] = "Ayi", ["ays"] = "Sorsogon Ayta", ["ayt"] = "Bataan Ayta", ["ayu"] = "Ayu", ["ayy"] = "Tayabas Ayta", ["ayz"] = "Maybrat", ["az"] = "Azerbaijani", ["aza"] = "Azha", ["azc-caz"] = "Cazcan", ["azc-cup-pro"] = "Proto-Cupan", ["azc-ktn"] = "Kitanemuk", ["azc-nah-pro"] = "Proto-Nahuan", ["azc-num-pro"] = "Proto-Numic", ["azc-pro"] = "Proto-Uto-Aztecan", ["azc-tak-pro"] = "Proto-Takic", ["azc-tat"] = "Tataviam", ["azd"] = "Eastern Durango Nahuatl", ["azg"] = "San Pedro Amuzgos Amuzgo", ["azm"] = "Ipalapa Amuzgo", ["azn"] = "Western Durango Nahuatl", ["azo"] = "Awing", ["azt"] = "Faire Atta", ["azz"] = "Highland Puebla Nahuatl", ["ba"] = "Bashkir", ["baa"] = "Babatana", ["bab"] = "Bainouk-Gunyuño", ["bac"] = "Badui", ["bae"] = "Baré", ["baf"] = "Nubaca", ["bag"] = "Tuki", ["bah"] = "Bahamian Creole", ["baj"] = "Barakai", ["bal"] = "Baluchi", ["ban"] = "Balinese", ["bao"] = "Waimaha", ["bap"] = "Bantawa", ["bar"] = "Bavarian", ["bas"] = "Basaa", ["bau"] = "Badanchi", ["bav"] = "Babungo", ["baw"] = "Bambili-Bambui", ["bax"] = "Bamum", ["bay"] = "Batuley", ["bba"] = "Baatonum", ["bbb"] = "Barai", ["bbc"] = "Toba Batak", ["bbd"] = "Bau", ["bbe"] = "Bangba", ["bbf"] = "Baibai", ["bbg"] = "Barama", ["bbh"] = "Bugan", ["bbi"] = "Barombi", ["bbj"] = "Ghomala'", ["bbk"] = "Babanki", ["bbl"] = "Bats", ["bbm"] = "Babango", ["bbn"] = "Uneapa", ["bbo"] = "Konabéré", ["bbp"] = "West Central Banda", ["bbq"] = "Bamali", ["bbr"] = "Girawa", ["bbs"] = "Bakpinka", ["bbt"] = "Mburku", ["bbu"] = "Bakulung", ["bbv"] = "Karnai", ["bbw"] = "Baba", ["bbx"] = "Bubia", ["bby"] = "Befang", ["bca"] = "Central Bai", ["bcb"] = "Bainouk-Samik", ["bcd"] = "North Babar", ["bce"] = "Bamenyam", ["bcf"] = "Bamu", ["bcg"] = "Baga Pokur", ["bch"] = "Bariai", ["bci"] = "Baoule", ["bcj"] = "Bardi", ["bck"] = "Bunaba", ["bcl"] = "Bikol Central", ["bcm"] = "Banoni", ["bcn"] = "Bibaali", ["bco"] = "Kaluli", ["bcp"] = "Bali", ["bcq"] = "Bench", ["bcr"] = "Babine-Witsuwit'en", ["bcs"] = "Kohumono", ["bct"] = "Bendi", ["bcu"] = "Biliau", ["bcv"] = "Shoo-Minda-Nye", ["bcw"] = "Bana", ["bcy"] = "Bacama", ["bcz"] = "Bainouk-Gunyaamolo", ["bda"] = "Bayot", ["bdb"] = "Basap", ["bdc"] = "Emberá-Baudó", ["bdd"] = "Bunama", ["bde"] = "Bade", ["bdf"] = "Biage", ["bdg"] = "Bonggi", ["bdh"] = "Tara Baka", ["bdi"] = "Burun", ["bdj"] = "Bai", ["bdk"] = "Budukh", ["bdl"] = "Indonesian Bajau", ["bdm"] = "Buduma", ["bdn"] = "Baldemu", ["bdo"] = "Morom", ["bdp"] = "Bende", ["bdq"] = "Bahnar", ["bdr"] = "West Coast Bajau", ["bds"] = "Burunge", ["bdt"] = "Bokoto", ["bdu"] = "Oroko", ["bdv"] = "Bodo Parja", ["bdw"] = "Baham", ["bdx"] = "Budong-Budong", ["bdy"] = "Bandjalang", ["bdz"] = "Badeshi", ["be"] = "Belarusian", ["bea"] = "Beaver", ["beb"] = "Bebele", ["bec"] = "Iceve-Maci", ["bed"] = "Bedoanas", ["bee"] = "Byangsi", ["bef"] = "Benabena", ["beg"] = "Belait", ["beh"] = "Biali", ["bei"] = "Bekati'", ["bej"] = "Beja", ["bek"] = "Bebeli", ["bem"] = "Bemba", ["beo"] = "Beami", ["bep"] = "Besoa", ["beq"] = "Beembe", ["ber-fog"] = "Fogaha", ["ber-pro"] = "Proto-Berber", ["ber-zuw"] = "Zuwara", ["bes"] = "Besme", ["bet"] = "Guiberoua Bété", ["beu"] = "Blagar", ["bev"] = "Daloa Bété", ["bew"] = "Betawi", ["bex"] = "Jur Modo", ["bey"] = "Akuwagel", ["bez"] = "Kibena", ["bfa"] = "Bari", ["bfb"] = "Pauri Bareli", ["bfc"] = "Northern Bai", ["bfd"] = "Bafut", ["bfe"] = "Betaf", ["bff"] = "Bofi", ["bfg"] = "Busang Kayan", ["bfh"] = "Blafe", ["bfi"] = "British Sign Language", ["bfj"] = "Bafanji", ["bfk"] = "Ban Khor Sign Language", ["bfl"] = "Banda-Ndélé", ["bfm"] = "Mmen", ["bfn"] = "Bunak", ["bfo"] = "Malba Birifor", ["bfp"] = "Beba", ["bfq"] = "Badaga", ["bfr"] = "Bazigar", ["bfs"] = "Southern Bai", ["bft"] = "Balti", ["bfu"] = "Gahri", ["bfw"] = "Bondo", ["bfx"] = "Bantayanon", ["bfy"] = "Bagheli", ["bfz"] = "Mahasu Pahari", ["bg"] = "Bulgarian", ["bga"] = "Gwamhi-Wuri", ["bgb"] = "Bobongko", ["bgc"] = "Haryanvi", ["bgd"] = "Rathwi Bareli", ["bge"] = "Bauria", ["bgf"] = "Bangandu", ["bgg"] = "Bugun", ["bgi"] = "Giangan", ["bgj"] = "Bangolan", ["bgk"] = "Bit", ["bgl"] = "Bo", ["bgo"] = "Baga Koga", ["bgq"] = "Bagri", ["bgr"] = "Bawm Chin", ["bgs"] = "Tagabawa", ["bgt"] = "Bughotu", ["bgu"] = "Mbongno", ["bgv"] = "Warkay-Bipim", ["bgw"] = "Bhatri", ["bgx"] = "Balkan Gagauz Turkish", ["bgy"] = "Benggoi", ["bgz"] = "Banggai", ["bh"] = "Bihari", ["bha"] = "Bharia", ["bhb"] = "Bhili", ["bhc"] = "Biga", ["bhd"] = "Bhadrawahi", ["bhe"] = "Bhaya", ["bhf"] = "Odiai", ["bhg"] = "Binandere", ["bhh"] = "Bukhari", ["bhi"] = "Bhilali", ["bhj"] = "Bahing", ["bhl"] = "Bimin", ["bhm"] = "Bathari", ["bhn"] = "Bohtan Neo-Aramaic", ["bho"] = "भोजपुरी", ["bhp"] = "Bima", ["bhq"] = "Tukang Besi South", ["bhs"] = "Buwal", ["bht"] = "Bhattiyali", ["bhu"] = "Bhunjia", ["bhv"] = "Bahau", ["bhw"] = "Biak", ["bhx"] = "Bhalay", ["bhy"] = "Bhele", ["bhz"] = "Bada", ["bi"] = "Bislama", ["bia"] = "Badimaya", ["bib"] = "Bissa", ["bic"] = "Bikaru", ["bid"] = "Bidiyo", ["bie"] = "Bepour", ["bif"] = "Biafada", ["big"] = "Biangai", ["bij"] = "Kwanka", ["bil"] = "Bile", ["bim"] = "Bimoba", ["bin"] = "Edo", ["bio"] = "Nai", ["bip"] = "Bila", ["biq"] = "Bipi", ["bir"] = "Bisorio", ["bit"] = "Berinomo", ["biu"] = "Biete", ["biv"] = "Southern Birifor", ["biw"] = "Kol (Cameroon)", ["bix"] = "Bijori", ["biy"] = "Birhor", ["biz"] = "Baloi", ["bja"] = "Budza", ["bjb"] = "Barngarla", ["bjc"] = "Bariji", ["bje"] = "Biao-Jiao Mien", ["bjf"] = "Barzani Jewish Neo-Aramaic", ["bjg"] = "Bidyogo", ["bjh"] = "Bahinemo", ["bji"] = "Burji", ["bjj"] = "Kannauji", ["bjk"] = "Barok", ["bjl"] = "Bulu (New Guinea)", ["bjm"] = "Bajelani", ["bjn"] = "Banjarese", ["bjo"] = "Mid-Southern Banda", ["bjp"] = "Fanamaket", ["bjr"] = "Binumarien", ["bjs"] = "Bajan", ["bjt"] = "Balanta-Ganja", ["bju"] = "Busuu", ["bjv"] = "Bedjond", ["bjw"] = "Bakwé", ["bjx"] = "Banao Itneg", ["bjy"] = "Bayali", ["bjz"] = "Baruga", ["bka"] = "Kyak", ["bkc"] = "Baka", ["bkd"] = "Binukid", ["bkf"] = "Beeke", ["bkg"] = "Buraka", ["bkh"] = "Bakoko", ["bki"] = "Baki", ["bkj"] = "Pande", ["bkk"] = "Brokskat", ["bkl"] = "Berik", ["bkm"] = "Kom (Cameroon)", ["bkn"] = "Bukitan", ["bko"] = "Kwa'", ["bkp"] = "Iboko", ["bkq"] = "Bakairí", ["bkr"] = "Bakumpai", ["bks"] = "Masbate Sorsogon", ["bkt"] = "Boloki", ["bku"] = "Buhid", ["bkv"] = "Bekwarra", ["bkw"] = "Bekwel", ["bkx"] = "Baikeno", ["bky"] = "Bokyi", ["bkz"] = "Bungku", ["bla"] = "Blackfoot", ["blb"] = "Bilua", ["blc"] = "Bella Coola", ["bld"] = "Bolango", ["ble"] = "Balanta-Kentohe", ["blf"] = "Buol", ["blg"] = "Balau", ["blh"] = "Kuwaa", ["bli"] = "Bolia", ["blj"] = "Bolongan", ["blk"] = "Pa'o Karen", ["bll"] = "Biloxi", ["blm"] = "Beli", ["bln"] = "Southern Catanduanes Bicolano", ["blo"] = "Anii", ["blp"] = "Blablanga", ["blq"] = "Baluan-Pam", ["blr"] = "Blang", ["bls"] = "Balaesang", ["blt"] = "Tai Dam", ["blv"] = "Kibala", ["blw"] = "Balangao", ["blx"] = "Mag-Indi Ayta", ["bly"] = "Notre", ["blz"] = "Balantak", ["bm"] = "Bambara", ["bma"] = "Lame", ["bmb"] = "Bembe", ["bmc"] = "Biem", ["bmd"] = "Baga Manduri", ["bme"] = "Limassa", ["bmf"] = "Bom", ["bmg"] = "Bamwe", ["bmh"] = "Kein", ["bmi"] = "Bagirmi", ["bmj"] = "Bote-Majhi", ["bmk"] = "Ghayavi", ["bml"] = "Bomboli", ["bmn"] = "Bina", ["bmo"] = "Bambalang", ["bmp"] = "Bulgebi", ["bmq"] = "Bomu", ["bmr"] = "Muinane", ["bmt"] = "Biao Mon", ["bmu"] = "Somba-Siawari", ["bmv"] = "Bum", ["bmw"] = "Bomwali", ["bmx"] = "Baimak", ["bmz"] = "Baramu", ["bn"] = "बंगाली", ["bna"] = "Bonerate", ["bnb"] = "Bookan", ["bnd"] = "Banda", ["bne"] = "Bintauna", ["bnf"] = "Masiwang", ["bng"] = "Benga", ["bni"] = "Bangi", ["bnj"] = "Eastern Tawbuid", ["bnk"] = "Bierebo", ["bnl"] = "Boon", ["bnm"] = "Batanga", ["bnn"] = "Bunun", ["bno"] = "Asi", ["bnp"] = "Bola", ["bnq"] = "Bantik", ["bnr"] = "Butmas-Tur", ["bns"] = "Bundeli", ["bnt-bal"] = "Balong", ["bnt-bon"] = "Boma Nkuu", ["bnt-boy"] = "Boma Yumu", ["bnt-bwa"] = "Bwala", ["bnt-cmw"] = "Chimwiini", ["bnt-ind"] = "Indanga", ["bnt-lal"] = "Lala (South Africa)", ["bnt-lwl"] = "Lwel", ["bnt-mpi"] = "Mpiin", ["bnt-mpu"] = "Mpuono", ["bnt-ngu-pro"] = "Proto-Nguni", ["bnt-phu"] = "Phuthi", ["bnt-pro"] = "Proto-Bantu", ["bnt-sbo"] = "South Boma", ["bnt-sts-pro"] = "Proto-Sotho-Tswana", ["bnu"] = "Bentong", ["bnv"] = "Beneraf", ["bnw"] = "Bisis", ["bnx"] = "Bangubangu", ["bny"] = "Bintulu", ["bnz"] = "Beezen", ["bo"] = "Tibetan", ["boa"] = "Bora", ["bob"] = "Aweer", ["boe"] = "Mundabli", ["bof"] = "Bolon", ["bog"] = "Bamako Sign Language", ["boh"] = "North Boma", ["boi"] = "Barbareño", ["boj"] = "Anjam", ["bok"] = "Bonjo", ["bol"] = "Bole", ["bom"] = "Berom", ["bon"] = "Bine", ["boo"] = "Tiemacèwè Bozo", ["bop"] = "Bonkiman", ["boq"] = "Bogaya", ["bor"] = "Borôro", ["bot"] = "Bongo", ["bou"] = "Bondei", ["bov"] = "Tuwuli", ["bow"] = "Rema", ["box"] = "Buamu", ["boy"] = "Bodo (Central Africa)", ["boz"] = "Tiéyaxo Bozo", ["bpa"] = "Dakaka", ["bpd"] = "Banda-Banda", ["bpg"] = "Bonggo", ["bph"] = "Botlikh", ["bpi"] = "Bagupi", ["bpj"] = "Binji", ["bpk"] = "Orowe", ["bpl"] = "Broome Pearling Lugger Pidgin", ["bpm"] = "Biyom", ["bpn"] = "Dzao Min", ["bpo"] = "Anasi", ["bpp"] = "Kaure", ["bpq"] = "Banda Malay", ["bpr"] = "Koronadal Blaan", ["bps"] = "Sarangani Blaan", ["bpt"] = "Barrow Point", ["bpu"] = "Bongu", ["bpv"] = "Bian Marind", ["bpx"] = "Palya Bareli", ["bpy"] = "Bishnupriya Manipuri", ["bpz"] = "Bilba", ["bqa"] = "Tchumbuli", ["bqb"] = "Bagusa", ["bqc"] = "Boko", ["bqd"] = "Bung", ["bqf"] = "Baga Kaloum", ["bqg"] = "Bago-Kusuntu", ["bqh"] = "Baima", ["bqi"] = "Bakhtiari", ["bqj"] = "Bandial", ["bqk"] = "Banda-Mbrès", ["bql"] = "Bilakura", ["bqm"] = "Wumboko", ["bqn"] = "Bulgarian Sign Language", ["bqo"] = "Balo", ["bqp"] = "Busa", ["bqq"] = "Biritai", ["bqr"] = "Burusu", ["bqs"] = "Bosngun", ["bqt"] = "Bamukumbit", ["bqu"] = "Boguru", ["bqv"] = "Begbere-Ejar", ["bqw"] = "Buru (Nigeria)", ["bqx"] = "Baangi", ["bqy"] = "Bengkala Sign Language", ["bqz"] = "Bakaka", ["br"] = "Breton", ["bra"] = "Braj", ["brb"] = "Lave", ["brc"] = "Berbice Creole Dutch", ["brd"] = "Baraamu", ["brf"] = "Bera", ["brg"] = "Baure", ["brh"] = "Brahui", ["bri"] = "Mokpwe", ["brj"] = "Bieria", ["brk"] = "Birgid", ["brl"] = "Birwa", ["brm"] = "Barambu", ["brn"] = "Boruca", ["bro"] = "Brokkat", ["brp"] = "Barapasi", ["brq"] = "Breri", ["brr"] = "Birao", ["brs"] = "Baras", ["brt"] = "Bitare", ["bru"] = "Eastern Bru", ["brv"] = "Western Bru", ["brw"] = "Bellari", ["brx"] = "Bodo (India)", ["bry"] = "Burui", ["brz"] = "Bilbil", ["bsa"] = "Abinomn", ["bsb"] = "Brunei Bisaya", ["bsc"] = "Bassari", ["bse"] = "Wushi", ["bsf"] = "Bauchi", ["bsg"] = "Bashkardi", ["bsh"] = "Kamkata-viri", ["bsi"] = "Bassossi", ["bsj"] = "Bangwinji", ["bsk"] = "Burushaski", ["bsl"] = "Basa-Gumna", ["bsm"] = "Busami", ["bsn"] = "Barasana", ["bso"] = "Buso", ["bsp"] = "Baga Sitemu", ["bsq"] = "Bassa", ["bsr"] = "Bassa-Kontagora", ["bss"] = "Akoose", ["bst"] = "Basketo", ["bsu"] = "Bahonsuai", ["bsv"] = "Baga Sobané", ["bsw"] = "Baiso", ["bsx"] = "Yangkam", ["bsy"] = "Sabah Bisaya", ["bta"] = "Bata", ["btc"] = "Bati (Cameroon)", ["btd"] = "Dairi Batak", ["bte"] = "Gamo-Ningi", ["btf"] = "Birgit", ["btg"] = "Gagnoa Bété", ["bth"] = "Biatah Bidayuh", ["bti"] = "Burate", ["btj"] = "Bacanese Malay", ["btk-pro"] = "Proto-Batak", ["btm"] = "Mandailing Batak", ["btn"] = "Ratagnon", ["bto"] = "Iriga Bicolano", ["btp"] = "Budibud", ["btq"] = "Batek", ["btr"] = "Baetora", ["bts"] = "Simalungun Batak", ["btt"] = "Bete-Bendi", ["btu"] = "Batu", ["btv"] = "Bateri", ["btw"] = "Butuanon", ["btx"] = "Karo Batak", ["bty"] = "Bobot", ["btz"] = "Alas-Kluet Batak", ["bua"] = "Buryat", ["bub"] = "Bua", ["bud"] = "Ntcham", ["bue"] = "Beothuk", ["buf"] = "Bushoong", ["bug"] = "Buginese", ["buh"] = "Younuo Bunu", ["bui"] = "Bongili", ["buj"] = "Basa-Gurmana", ["buk"] = "Bukawa", ["bum"] = "Bulu (Cameroon)", ["bun"] = "Sherbro", ["buo"] = "Terei", ["bup"] = "Busoa", ["buq"] = "Brem", ["bus"] = "Bokobaru", ["but"] = "Bungain", ["buu"] = "Budu", ["buv"] = "Bun", ["buw"] = "Bubi", ["bux"] = "Boghom", ["buy"] = "Mmani", ["bva"] = "Barein", ["bvb"] = "Bube", ["bvc"] = "Baelelea", ["bvd"] = "Baeggu", ["bve"] = "Berau Malay", ["bvf"] = "Boor", ["bvg"] = "Bonkeng", ["bvh"] = "Bure", ["bvi"] = "Belanda Viri", ["bvj"] = "Baan", ["bvk"] = "Bukat", ["bvl"] = "Bolivian Sign Language", ["bvm"] = "Bamunka", ["bvn"] = "Buna", ["bvo"] = "Bolgo", ["bvp"] = "Bumang", ["bvq"] = "Birri", ["bvr"] = "Burarra", ["bvt"] = "Bati (Indonesia)", ["bvu"] = "Bukit Malay", ["bvv"] = "Baniva", ["bvw"] = "Boga", ["bvx"] = "Babole", ["bvy"] = "Baybayanon", ["bvz"] = "Bauzi", ["bwa"] = "Bwatoo", ["bwb"] = "Namosi-Naitasiri-Serua", ["bwc"] = "Bwile", ["bwd"] = "Bwaidoka", ["bwe"] = "Bwe Karen", ["bwf"] = "Boselewa", ["bwg"] = "Barwe", ["bwh"] = "Bishuo", ["bwi"] = "Baniwa", ["bwj"] = "Láá Láá Bwamu", ["bwk"] = "Bauwaki", ["bwl"] = "Bwela", ["bwm"] = "Biwat", ["bwn"] = "Wunai Bunu", ["bwo"] = "Shinasha", ["bwp"] = "Mandobo Bawah", ["bwq"] = "Southern Bobo", ["bwr"] = "Bura", ["bws"] = "Bomboma", ["bwt"] = "Bafaw", ["bwu"] = "Buli (Ghana)", ["bww"] = "Bwa", ["bwx"] = "Bu-Nao Bunu", ["bwy"] = "Cwi Bwamu", ["bwz"] = "Bwisi", ["bxa"] = "Bauro", ["bxb"] = "Belanda Bor", ["bxc"] = "Molengue", ["bxd"] = "Pela", ["bxe"] = "Ongota", ["bxf"] = "Bilur", ["bxg"] = "Bangala", ["bxh"] = "Buhutu", ["bxi"] = "Pirlatapa", ["bxj"] = "Bayungu", ["bxk"] = "Bukusu", ["bxl"] = "Jalkunan", ["bxn"] = "Burduna", ["bxo"] = "Barikanchi", ["bxp"] = "Bebil", ["bxq"] = "Beele", ["bxs"] = "Busam", ["bxv"] = "Berakou", ["bxw"] = "Banka", ["bxz"] = "Binahari", ["bya"] = "Palawan Batak", ["byb"] = "Bikya", ["byc"] = "Ubaghara", ["byd"] = "Benyadu'", ["bye"] = "Pouye", ["byf"] = "Bete", ["byg"] = "Baygo", ["byh"] = "Bujhyal", ["byi"] = "Buyu", ["byj"] = "Binawa", ["byk"] = "Biao", ["byl"] = "Bayono", ["bym"] = "Bidyara", ["byn"] = "Blin", ["byo"] = "Biyo", ["byp"] = "Bumaji", ["byq"] = "Basay", ["byr"] = "Baruya", ["bys"] = "Burak", ["byt"] = "Berti", ["byv"] = "Medumba", ["byw"] = "Belhariya", ["byx"] = "Qaqet", ["byz"] = "Banaro", ["bza"] = "Bandi", ["bzb"] = "Andio", ["bzd"] = "Bribri", ["bze"] = "Jenaama Bozo", ["bzf"] = "Boikin", ["bzg"] = "Babuza", ["bzh"] = "Mapos Buang", ["bzi"] = "Bisu", ["bzj"] = "Belizean Creole", ["bzk"] = "Nicaraguan Creole", ["bzl"] = "Boano (Sulawesi)", ["bzm"] = "Bolondo", ["bzn"] = "Boano (Maluku)", ["bzo"] = "Bozaba", ["bzp"] = "Kemberano", ["bzq"] = "Buli (Indonesia)", ["bzr"] = "Biri", ["bzs"] = "Brazilian Sign Language", ["bzu"] = "Burmeso", ["bzv"] = "Bebe", ["bzw"] = "Basa", ["bzx"] = "Hainyaxo Bozo", ["bzy"] = "Obanliku", ["bzz"] = "Evant", ["ca"] = "Catalan", ["caa"] = "Ch'orti'", ["cab"] = "Garifuna", ["cac"] = "Chuj", ["cad"] = "Caddo", ["cae"] = "Laalaa", ["caf"] = "Southern Carrier", ["cag"] = "Nivaclé", ["cah"] = "Cahuarano", ["caj"] = "Chané", ["cak"] = "Kaqchikel", ["cal"] = "Carolinian", ["cam"] = "Cemuhî", ["can"] = "Chambri", ["cao"] = "Chácobo", ["cap"] = "Chipaya", ["caq"] = "Car Nicobarese", ["car"] = "Galibi Carib", ["cas"] = "Tsimané", ["cau-abz-pro"] = "Proto-Abkhaz-Abaza", ["cau-ava-pro"] = "Proto-Avaro-Andian", ["cau-cir-pro"] = "Proto-Circassian", ["cau-drg-pro"] = "Proto-Dargwa", ["cau-lzg-pro"] = "Proto-Lezghian", ["cau-nec-pro"] = "Proto-Northeast Caucasian", ["cau-nkh-pro"] = "Proto-Nakh", ["cau-nwc-pro"] = "Proto-Northwest Caucasian", ["cau-tsz-pro"] = "Proto-Tsezian", ["cav"] = "Cavineña", ["caw"] = "Callawalla", ["cax"] = "Chiquitano", ["cay"] = "Cayuga", ["caz"] = "Canichana", ["cba-ata"] = "Atanques", ["cba-cat"] = "Catío Chibcha", ["cba-dor"] = "Dorasque", ["cba-dui"] = "Duit", ["cba-hue"] = "Huetar", ["cba-nut"] = "Nutabe", ["cba-pro"] = "Proto-Chibchan", ["cbb"] = "Cabiyarí", ["cbc"] = "Carapana", ["cbd"] = "Carijona", ["cbg"] = "Chimila", ["cbi"] = "Chachi", ["cbj"] = "Ede Cabe", ["cbk"] = "Chavacano", ["cbl"] = "Bualkhaw Chin", ["cbn"] = "Nyah Kur", ["cbo"] = "Izora", ["cbq"] = "Shuba", ["cbr"] = "Cashibo-Cacataibo", ["cbs"] = "Cashinahua", ["cbt"] = "Chayahuita", ["cbu"] = "Candoshi-Shapra", ["cbv"] = "Cacua", ["cbw"] = "Kinabalian", ["cby"] = "Carabayo", ["cca"] = "Cauca", ["ccc"] = "Chamicuro", ["ccd"] = "Cafundó", ["cce"] = "Chopi", ["ccg"] = "Chamba Daka", ["cch"] = "Atsam", ["ccj"] = "Kasanga", ["ccl"] = "Cutchi-Swahili", ["ccm"] = "Malaccan Creole Malay", ["ccn-pro"] = "Proto-North Caucasian", ["cco"] = "Comaltepec Chinantec", ["ccp"] = "Chakma", ["ccr"] = "Cacaopera", ["ccs-gzn-pro"] = "Proto-Georgian-Zan", ["ccs-pro"] = "Proto-Kartvelian", ["cda"] = "Choni", ["cdc-cbm-pro"] = "Proto-Central Chadic", ["cdc-mas-pro"] = "Proto-Masa", ["cdc-pro"] = "Proto-Chadic", ["cdd-pro"] = "Proto-Caddoan", ["cde"] = "Chenchu", ["cdf"] = "Chiru", ["cdh"] = "Chambeali", ["cdi"] = "Chodri", ["cdj"] = "Churahi", ["cdm"] = "Chepang", ["cdn"] = "Chaudangsi", ["cdo"] = "Min Dong", ["cdr"] = "Cinda-Regi-Tiyal", ["cds"] = "Chadian Sign Language", ["cdy"] = "Chadong", ["cdz"] = "Koda", ["ce"] = "Chechen", ["cea"] = "Lower Chehalis", ["ceb"] = "Cebuano", ["ceg"] = "Chamacoco", ["cel-bry-pro"] = "Proto-Brythonic", ["cel-gal"] = "Gallaecian", ["cel-gau"] = "Gaulish", ["cel-pro"] = "Proto-Celtic", ["cen"] = "Cen", ["cet"] = "Centúúm", ["cfa"] = "Dijim-Bwilim", ["cfd"] = "Cara", ["cfg"] = "Como Karim", ["cfm"] = "Falam Chin", ["cga"] = "Changriwa", ["cgc"] = "Kagayanen", ["cgg"] = "Rukiga", ["cgk"] = "Chocangaca", ["ch"] = "Chamorro", ["chb"] = "Chibcha", ["chc"] = "Catawba", ["chd"] = "Highland Oaxaca Chontal", ["chf"] = "Tabasco Chontal", ["chg"] = "Chagatai", ["chh"] = "Chinook", ["chi-pro"] = "Proto-Chimakuan", ["chj"] = "Ojitlán Chinantec", ["chk"] = "Chuukese", ["chl"] = "Cahuilla", ["chm-pro"] = "Proto-Mari", ["chn"] = "Chinook Jargon", ["cho"] = "Choctaw", ["chp"] = "Chipewyan", ["chq"] = "Quiotepec Chinantec", ["chr"] = "Cherokee", ["cht"] = "Cholón", ["chw"] = "Chuabo", ["chx"] = "Chantyal", ["chy"] = "Cheyenne", ["chz"] = "Ozumacín Chinantec", ["cia"] = "Cia-Cia", ["cib"] = "Ci Gbe", ["cic"] = "Chickasaw", ["cid"] = "Chimariko", ["cie"] = "Cineni", ["cih"] = "Chinali", ["cik"] = "Chitkuli Kinnauri", ["cim"] = "Cimbrian", ["cin"] = "Cinta Larga", ["cip"] = "Chiapanec", ["cir"] = "Tiri", ["ciy"] = "Chaima", ["cja"] = "Western Cham", ["cje"] = "Chru", ["cjh"] = "Upper Chehalis", ["cji"] = "Chamalal", ["cjk"] = "Chokwe", ["cjm"] = "Eastern Cham", ["cjn"] = "Chenapian", ["cjo"] = "Ashéninka Pajonal", ["cjp"] = "Cabécar", ["cjs"] = "Shor", ["cjv"] = "Chuave", ["cjy"] = "Jin", ["ckb"] = "Central Kurdish", ["ckh"] = "Chak", ["ckl"] = "Cibak", ["ckn"] = "Kaang Chin", ["cko"] = "Anufo", ["ckq"] = "Kajakse", ["ckr"] = "Kairak", ["cks"] = "Tayo", ["ckt"] = "Chukchi", ["cku"] = "Koasati", ["ckv"] = "Kavalan", ["ckx"] = "Caka", ["cky"] = "Cakfem-Mushere", ["ckz"] = "Cakchiquel-Quiché Mixed Language", ["cla"] = "Ron", ["clc"] = "Chilcotin", ["cld"] = "Chaldean Neo-Aramaic", ["cle"] = "Lealao Chinantec", ["clh"] = "Chilisso", ["cli"] = "Chakali", ["clj"] = "Laitu Chin", ["clk"] = "Idu", ["cll"] = "Chala", ["clm"] = "Klallam", ["clo"] = "Lowland Oaxaca Chontal", ["clt"] = "Lautu Chin", ["clu"] = "Caluyanun", ["clw"] = "Chulym", ["cly"] = "Eastern Highland Chatino", ["cma"] = "Maa", ["cmc-pro"] = "Proto-Chamic", ["cme"] = "Cerma", ["cmg"] = "Classical Mongolian", ["cmi"] = "Emberá-Chamí", ["cml"] = "Campalagian", ["cmm"] = "Michigamea", ["cmn"] = "Mandarin", ["cmo"] = "Central Mnong", ["cmr"] = "Mro Chin", ["cms"] = "Messapic", ["cmt"] = "Camtho", ["cna"] = "Changthang", ["cnb"] = "Chinbon Chin", ["cnc"] = "Côông", ["cng"] = "Northern Qiang", ["cnh"] = "Lai", ["cni"] = "Asháninka", ["cnk"] = "Khumi Chin", ["cnl"] = "Lalana Chinantec", ["cno"] = "Con", ["cns"] = "Central Asmat", ["cnt"] = "Tepetotutla Chinantec", ["cnu"] = "Chenoua", ["cnw"] = "Ngawn Chin", ["cnx"] = "Middle Cornish", ["co"] = "Corsican", ["coa"] = "Cocos Islands Malay", ["cob"] = "Chicomuceltec", ["coc"] = "Cocopa", ["cod"] = "Cocama", ["coe"] = "Koreguaje", ["cof"] = "Tsafiki", ["cog"] = "Chong", ["coh"] = "Chichonyi-Chidzihana-Chikauma", ["coj"] = "Cochimi", ["cok"] = "Santa Teresa Cora", ["col"] = "Columbia-Wenatchi", ["com"] = "Comanche", ["con"] = "Cofán", ["coo"] = "Comox", ["cop"] = "Coptic", ["coq"] = "Coquille", ["cot"] = "Caquinte", ["cou"] = "Wamey", ["cov"] = "Cao Miao", ["cow"] = "Cowlitz", ["cox"] = "Nanti", ["coy"] = "Coyaima", ["coz"] = "Chochotec", ["cpa"] = "Palantla Chinantec", ["cpb"] = "Ucayali-Yurúa Ashéninka", ["cpc"] = "Ajyíninka Apurucayali", ["cpe-mar"] = "Maroon Spirit Language", ["cpe-spp"] = "Samoan Plantation Pidgin", ["cpg"] = "Cappadocian Greek", ["cpi"] = "Chinese Pidgin English", ["cpn"] = "Cherepon", ["cpo"] = "Kpee", ["cps"] = "Capiznon", ["cpu"] = "Pichis Ashéninka", ["cpx"] = "Puxian", ["cpy"] = "South Ucayali Ashéninka", ["cqd"] = "Chuanqiandian Cluster Miao", ["cr"] = "Cree", ["cra"] = "Chara", ["crb"] = "Island Carib", ["crc"] = "Lonwolwol", ["crd"] = "Coeur d'Alene", ["crf"] = "Caramanta", ["crg"] = "Michif", ["crh"] = "Crimean Tatar", ["cri"] = "Sãotomense", ["crj"] = "Southern East Cree", ["crk"] = "Plains Cree", ["crl"] = "Northern East Cree", ["crm"] = "Moose Cree", ["crn"] = "Cora", ["cro"] = "Crow", ["crp-gep"] = "West Greenlandic Pidgin", ["crp-mpp"] = "Macau Pidgin Portuguese", ["crp-rsn"] = "Russenorsk", ["crp-tnw"] = "Tangwang", ["crp-tpr"] = "Taimyr Pidgin Russian", ["crq"] = "Iyo'wujwa Chorote", ["crr"] = "Carolina Algonquian", ["crs"] = "Seychellois Creole", ["crt"] = "Iyojwa'ja Chorote", ["crv"] = "Chaura", ["crw"] = "Chrau", ["crx"] = "Carrier", ["cry"] = "Cori", ["crz"] = "Cruzeño", ["cs"] = "Czech", ["csa"] = "Chiltepec Chinantec", ["csb"] = "Kashubian", ["csc"] = "Catalan Sign Language", ["csd"] = "Chiangmai Sign Language", ["cse"] = "Czech Sign Language", ["csf"] = "Cuban Sign Language", ["csg"] = "Chilean Sign Language", ["csh"] = "Asho Chin", ["csi"] = "Coast Miwok", ["csj"] = "Songlai Chin", ["csk"] = "Jola-Kasa", ["csl"] = "Chinese Sign Language", ["csm"] = "Central Sierra Miwok", ["csn"] = "Colombian Sign Language", ["cso"] = "Sochiapam Chinantec", ["csq"] = "Croatian Sign Language", ["csr"] = "Costa Rican Sign Language", ["css"] = "Southern Ohlone", ["cst"] = "Northern Ohlone", ["csu-bba-pro"] = "Proto-Bongo-Bagirmi", ["csu-maa-pro"] = "Proto-Mangbetu", ["csu-pro"] = "Proto-Central Sudanic", ["csu-sar-pro"] = "Proto-Sara", ["csv"] = "Sumtu Chin", ["csw"] = "Swampy Cree", ["csy"] = "Siyin Chin", ["csz"] = "Coos", ["cta"] = "Tataltepec Chatino", ["ctc"] = "Chetco-Tolowa", ["ctd"] = "Tedim Chin", ["cte"] = "Tepinapa Chinantec", ["ctg"] = "Chittagonian", ["cth"] = "Thaiphum Chin", ["ctl"] = "Tlacoatzintepec Chinantec", ["ctm"] = "Chitimacha", ["ctn"] = "Chhintange", ["cto"] = "Emberá-Catío", ["ctp"] = "Western Highland Chatino", ["ctp-san"] = "San Juan Quiahije Chatino", ["cts"] = "Northern Catanduanes Bicolano", ["ctt"] = "Wayanad Chetti", ["ctu"] = "Chol", ["ctz"] = "Zacatepec Chatino", ["cu"] = "Old Church Slavonic", ["cua"] = "Cua", ["cub"] = "Cubeo", ["cuc"] = "Usila Chinantec", ["cug"] = "Cung", ["cuh"] = "Chuka", ["cui"] = "Cuiba", ["cuj"] = "Mashco Piro", ["cuk"] = "Kuna", ["cul"] = "Culina", ["cuo"] = "Cumanagoto", ["cup"] = "Cupeño", ["cuq"] = "Cun", ["cur"] = "Chhulung", ["cus-ash"] = "Ashraaf", ["cus-hec-pro"] = "Proto-Highland East Cushitic", ["cus-pro"] = "Proto-Cushitic", ["cus-som-pro"] = "Proto-Somaloid", ["cus-sou-pro"] = "Proto-South Cushitic", ["cut"] = "Teutila Cuicatec", ["cuu"] = "Tai Ya", ["cuv"] = "Cuvok", ["cuw"] = "Chukwa", ["cux"] = "Tepeuxila Cuicatec", ["cuy"] = "Cuitlatec", ["cv"] = "Chuvash", ["cvg"] = "Chug", ["cvn"] = "Valle Nacional Chinantec", ["cwa"] = "Kabwa", ["cwb"] = "Maindo", ["cwd"] = "Woods Cree", ["cwe"] = "Kwere", ["cwg"] = "Chewong", ["cwt"] = "Kuwaataay", ["cy"] = "Welsh", ["cya"] = "Nopala Chatino", ["cyb"] = "Cayubaba", ["cyo"] = "Cuyunon", ["czh"] = "Huizhou", ["czk"] = "Knaanic", ["czn"] = "Zenzontepec Chatino", ["czo"] = "Min Zhong", ["czt"] = "Zotung Chin", ["da"] = "Danish", ["daa"] = "Dangaléat", ["dac"] = "Dambi", ["dad"] = "Marik", ["dae"] = "Duupa", ["dag"] = "Dagbani", ["dah"] = "Gwahatike", ["dai"] = "Day", ["daj"] = "Dar Fur Daju", ["dak"] = "Dakota", ["dal"] = "Dahalo", ["dam"] = "Damakawa", ["dao"] = "Daai Chin", ["daq"] = "Dandami Maria", ["dar"] = "Dargwa", ["das"] = "Daho-Doo", ["dau"] = "Dar Sila Daju", ["dav"] = "Taita", ["daw"] = "Davawenyo", ["dax"] = "Dayi", ["daz"] = "Dao", ["dba"] = "Bangime", ["dbb"] = "Deno", ["dbd"] = "Dadiya", ["dbe"] = "Dabe", ["dbf"] = "Edopi", ["dbg"] = "Dogul Dom", ["dbi"] = "Doka", ["dbj"] = "Ida'an", ["dbl"] = "Dyirbal", ["dbm"] = "Duguri", ["dbn"] = "Duriankere", ["dbo"] = "Dulbu", ["dbp"] = "Duwai", ["dbq"] = "Daba", ["dbr"] = "Dabarre", ["dbt"] = "Ben Tey", ["dbu"] = "Bondum Dom Dogon", ["dbv"] = "Dungu", ["dbw"] = "Bankan Tey Dogon", ["dby"] = "Dibiyaso", ["dcc"] = "Deccani", ["dcr"] = "Negerhollands", ["dda"] = "Dadi Dadi", ["ddd"] = "Dongotono", ["dde"] = "Doondo", ["ddg"] = "Fataluku", ["ddi"] = "Diodio", ["ddj"] = "Jaru", ["ddn"] = "Dendi", ["ddo"] = "Tsez", ["ddr"] = "Dhudhuroa", ["dds"] = "Donno So Dogon", ["ddw"] = "Dawera-Daweloor", ["de"] = "जर्मन", ["dec"] = "Dagik", ["ded"] = "Dedua", ["dee"] = "Dewoin", ["def"] = "Dezfuli", ["deg"] = "Degema", ["deh"] = "Dehwari", ["dei"] = "Demisa", ["dek"] = "Dek", ["dem"] = "Dem", ["den"] = "Slavey", ["dep"] = "Pidgin Delaware", ["der"] = "Deori", ["des"] = "Desano", ["dev"] = "Domung", ["dez"] = "Dengese", ["dga"] = "Southern Dagaare", ["dgb"] = "Bunoge", ["dgc"] = "Casiguran Dumagat Agta", ["dgd"] = "Dagaari Dioula", ["dge"] = "Degenan", ["dgg"] = "Doga", ["dgh"] = "Dghwede", ["dgi"] = "Northern Dagara", ["dgk"] = "Dagba", ["dgn"] = "Dagoman", ["dgo"] = "Hindi Dogri", ["dgr"] = "Dogrib", ["dgs"] = "Dogoso", ["dgt"] = "Ntra'ngith", ["dgw"] = "Daungwurrung", ["dgx"] = "Doghoro", ["dgz"] = "Daga", ["dhg"] = "Dhangu", ["dhi"] = "Dhimal", ["dhl"] = "Dhalandji", ["dhm"] = "Zemba", ["dhn"] = "Dhanki", ["dho"] = "Dhodia", ["dhr"] = "Tharrgari", ["dhs"] = "Dhaiso", ["dhu"] = "Dhurga", ["dhv"] = "Drehu", ["dhw"] = "Danuwar", ["dhx"] = "Dhungaloo", ["dia"] = "Dia", ["dib"] = "South Central Dinka", ["dic"] = "Lakota Dida", ["did"] = "Didinga", ["dif"] = "Dieri", ["dig"] = "Digo", ["dii"] = "Dimbong", ["dij"] = "Dai", ["dik"] = "Southwestern Dinka", ["dil"] = "Dilling", ["dim"] = "Dime", ["din"] = "Dinka", ["dio"] = "Dibo", ["dip"] = "Northeastern Dinka", ["dir"] = "Dirim", ["dis"] = "Dimasa", ["diu"] = "Gciriku", ["diw"] = "Northwestern Dinka", ["dix"] = "Dixon Reef", ["diy"] = "Diuwe", ["diz"] = "Ding", ["dja"] = "Djadjawurrung", ["djb"] = "Djinba", ["djc"] = "Dar Daju Daju", ["djd"] = "Jaminjung", ["dje"] = "Zarma", ["djf"] = "Djangun", ["dji"] = "Djinang", ["djj"] = "Ndjébbana", ["djk"] = "Aukan", ["djl"] = "Djiwarli", ["djm"] = "Jamsay", ["djn"] = "Djauan", ["djo"] = "Jangkang", ["djr"] = "Djambarrpuyngu", ["dju"] = "Kapriman", ["djw"] = "Djawi", ["dka"] = "Dakpa", ["dkk"] = "Dakka", ["dkr"] = "Kuijau", ["dks"] = "Southeastern Dinka", ["dkx"] = "Mazagway", ["dlg"] = "Dolgan", ["dlk"] = "Dahalik", ["dlm"] = "Dalmatian", ["dln"] = "Darlong", ["dma"] = "Duma", ["dmb"] = "Mombo Dogon", ["dmc"] = "Gavak", ["dmd"] = "Madhi Madhi", ["dme"] = "Dugwor", ["dmf"] = "Medefaidrin", ["dmg"] = "Upper Kinabatangan", ["dmk"] = "Domaaki", ["dml"] = "Dameli", ["dmm"] = "Dama (Nigeria)", ["dmn-dam"] = "Dama (Sierra Leone)", ["dmn-mdw-pro"] = "Proto-Western Mande", ["dmn-pro"] = "Proto-Mande", ["dmo"] = "Kemezung", ["dmr"] = "East Damar", ["dms"] = "Dampelas", ["dmu"] = "Dubu", ["dmv"] = "Dumpas", ["dmw"] = "Mudburra", ["dmx"] = "Dema", ["dmy"] = "Demta", ["dna"] = "Upper Grand Valley Dani", ["dnd"] = "Daonda", ["dne"] = "Ndendeule", ["dng"] = "Dungan", ["dni"] = "Lower Grand Valley Dani", ["dnj"] = "Dan", ["dnk"] = "Dengka", ["dnn"] = "Dzuun", ["dno"] = "Ndrulo", ["dnr"] = "Danaru", ["dnt"] = "Mid Grand Valley Dani", ["dnu"] = "Danau", ["dnv"] = "Danu", ["dnw"] = "Western Dani", ["dny"] = "Dení", ["doa"] = "Dom", ["dob"] = "Dobu", ["doc"] = "Northern Kam", ["doe"] = "Doe", ["dof"] = "Domu", ["doh"] = "Dong", ["doi"] = "Dogri", ["dok"] = "Dondo", ["dol"] = "Doso", ["don"] = "Doura", ["doo"] = "Dongo", ["dop"] = "Lukpa", ["doq"] = "Dominican Sign Language", ["dor"] = "Dori'o", ["dos"] = "Dogosé", ["dot"] = "Dass", ["dov"] = "Toka-Leya", ["dow"] = "Doyayo", ["dox"] = "Bussa", ["doy"] = "Dompo", ["doz"] = "Dorze", ["dpp"] = "Papar", ["dra-mkn"] = "Middle Kannada", ["dra-okn"] = "Old Kannada", ["dra-ote"] = "Old Telugu", ["dra-pro"] = "Proto-Dravidian", ["drb"] = "Dair", ["drc"] = "Minderico", ["drd"] = "Darmiya", ["drg"] = "Rungus", ["dri"] = "Lela", ["drl"] = "Baagandji", ["drn"] = "West Damar", ["dro"] = "Daro-Matu Melanau", ["drq"] = "Dura", ["drs"] = "Gedeo", ["dru"] = "Rukai", ["dru-pro"] = "Proto-Rukai", ["dry"] = "Darai", ["dsb"] = "Lower Sorbian", ["dse"] = "Dutch Sign Language", ["dsh"] = "Daasanach", ["dsi"] = "Disa", ["dsl"] = "Danish Sign Language", ["dsn"] = "Dusner", ["dso"] = "Desiya", ["dsq"] = "Tadaksahak", ["dta"] = "Daur", ["dtb"] = "Labuk-Kinabatangan Kadazan", ["dtd"] = "Ditidaht", ["dth"] = "Adithinngithigh", ["dti"] = "Ana Tinga Dogon", ["dtk"] = "Tene Kan Dogon", ["dtm"] = "Tomo Kan Dogon", ["dto"] = "Tommo So", ["dtp"] = "Central Dusun", ["dtr"] = "Lotud", ["dts"] = "Toro So Dogon", ["dtt"] = "Toro Tegu Dogon", ["dtu"] = "Tebul Ure Dogon", ["dty"] = "Doteli", ["dua"] = "Duala", ["dub"] = "Dubli", ["duc"] = "Duna", ["due"] = "Umiray Dumaget Agta", ["duf"] = "Dumbea", ["dug"] = "Chiduruma", ["duh"] = "Dungra Bhil", ["dui"] = "Dumun", ["duk"] = "Uyajitaya", ["dul"] = "Alabat Island Agta", ["dum"] = "Middle Dutch", ["dun"] = "Dusun Deyah", ["duo"] = "Dupaningan Agta", ["dup"] = "Duano", ["duq"] = "Dusun Malang", ["dur"] = "Dii", ["dus"] = "Dumi", ["duu"] = "Drung", ["duv"] = "Duvle", ["duw"] = "Dusun Witu", ["dux"] = "Duun", ["duy"] = "Dicamay Agta", ["duz"] = "Duli", ["dv"] = "Dhivehi", ["dva"] = "Duau", ["dwa"] = "Diri", ["dwr"] = "Dawro", ["dwu"] = "Dhuwal", ["dww"] = "Dawawa", ["dwy"] = "Dhuwaya", ["dwz"] = "Dewas Rai", ["dya"] = "Dyan", ["dyb"] = "Dyaberdyaber", ["dyd"] = "Dyugun", ["dyg"] = "Villa Viciosa Agta", ["dyi"] = "Djimini", ["dym"] = "Yanda Dogon", ["dyn"] = "Dyangadi", ["dyo"] = "Jola-Fonyi", ["dyu"] = "Dyula", ["dyy"] = "Dyaabugay", ["dz"] = "Dzongkha", ["dza"] = "Tunzu", ["dzg"] = "Dazaga", ["dzl"] = "Dzala", ["dzn"] = "Dzando", ["ebg"] = "Ebughu", ["ebk"] = "Eastern Bontoc", ["ebr"] = "Ebrié", ["ebu"] = "Embu", ["ecr"] = "Eteocretan", ["ecs"] = "Ecuadorian Sign Language", ["ecy"] = "Eteocypriot", ["ee"] = "Ewe", ["eee"] = "E", ["efa"] = "Efai", ["efe"] = "Efe", ["efi"] = "Efik", ["ega"] = "Ega", ["egl"] = "Emilian", ["ego"] = "Eggon", ["egx-dem"] = "Demotic", ["egy"] = "Egyptian", ["ehu"] = "Ehueun", ["eip"] = "Eipomek", ["eit"] = "Eitiep", ["eiv"] = "Askopan", ["eja"] = "Ejamat", ["eka"] = "Ekajuk", ["eke"] = "Ekit", ["ekg"] = "Ekari", ["eki"] = "Eki", ["ekl"] = "Kolhe", ["ekm"] = "Elip", ["eko"] = "Koti", ["ekp"] = "Ekpeye", ["ekr"] = "Yace", ["eky"] = "Eastern Kayah", ["el"] = "Greek", ["ele"] = "Elepi", ["elh"] = "El Hugeirat", ["eli"] = "Nding", ["elk"] = "Elkei", ["elm"] = "Eleme", ["elo"] = "El Molo", ["elu"] = "Elu", ["elu-prk"] = "Helu", ["elx"] = "Elamite", ["ema"] = "Emai", ["emb"] = "Embaloh", ["eme"] = "Emerillon", ["emg"] = "Eastern Meohang", ["emi"] = "Mussau-Emira", ["emk"] = "Eastern Maninkakan", ["emm"] = "Mamulique", ["emn"] = "Eman", ["emp"] = "Northern Emberá", ["ems"] = "Alutiiq", ["emu"] = "Eastern Muria", ["emw"] = "Emplawas", ["emx"] = "Erromintxela", ["emy"] = "Epigraphic Mayan", ["en"] = "अंग्रेज़ी", ["ena"] = "Apali", ["enb"] = "Markweeta", ["enc"] = "En", ["end"] = "Ende", ["enf"] = "Forest Enets", ["enh"] = "Tundra Enets", ["enl"] = "Enlhet", ["enm"] = "Middle English", ["enn"] = "Engenni", ["eno"] = "Enggano", ["enq"] = "Enga", ["enr"] = "Emem", ["enu"] = "Enu", ["env"] = "Enwan", ["enw"] = "Enwang", ["enx"] = "Enxet", ["eo"] = "Esperanto", ["eot"] = "Eotile", ["epi"] = "Epie", ["era"] = "Eravallan", ["erg"] = "Sie", ["erh"] = "Eruwa", ["eri"] = "Ogea", ["erk"] = "South Efate", ["ero"] = "Horpa", ["err"] = "Erre", ["ers"] = "Ersu", ["ert"] = "Eritai", ["erw"] = "Erokwanas", ["es"] = "Spanish", ["ese"] = "Ese Ejja", ["esh"] = "Eshtehardi", ["esi"] = "North Alaskan Inupiatun", ["esk"] = "Northwest Alaska Inupiatun", ["esl"] = "Egyptian Sign Language", ["esm"] = "Esuma", ["esn"] = "Salvadoran Sign Language", ["eso"] = "Estonian Sign Language", ["esq"] = "Esselen", ["ess"] = "Central Siberian Yupik", ["esu"] = "Yup'ik", ["esx-esk-pro"] = "Proto-Eskimo", ["esx-ink"] = "Inuktun", ["esx-inq"] = "Inuinnaqtun", ["esx-inu-pro"] = "Proto-Inuit", ["esx-pro"] = "Proto-Eskimo-Aleut", ["esx-tut"] = "Tunumiisut", ["esy"] = "Eskayan", ["et"] = "Estonian", ["etb"] = "Etebi", ["etc"] = "Etchemin", ["eth"] = "Ethiopian Sign Language", ["etn"] = "Eton (Vanuatu)", ["eto"] = "Eton (Cameroon)", ["etr"] = "Edolo", ["ets"] = "Yekhee", ["ett"] = "Etruscan", ["etu"] = "Ejagham", ["etx"] = "Eten", ["etz"] = "Semimi", ["eu"] = "Basque", ["euq-pro"] = "Proto-Basque", ["eve"] = "Even", ["evh"] = "Uvbie", ["evn"] = "Evenki", ["ewo"] = "Ewondo", ["ext"] = "Extremaduran", ["eya"] = "Eyak", ["eyo"] = "Keiyo", ["eza"] = "Ezaa", ["eze"] = "Uzekwe", ["fa"] = "फ़ारसी", ["faa"] = "Fasu", ["fab"] = "Annobonese", ["fad"] = "Wagi", ["faf"] = "Fagani", ["fag"] = "Finongan", ["fah"] = "Baissa Fali", ["fai"] = "Faiwol", ["faj"] = "Faita", ["fak"] = "Fang (Beboid)", ["fal"] = "South Fali", ["fam"] = "Fam", ["fan"] = "Fang (Bantu)", ["fap"] = "Palor", ["far"] = "Fataleka", ["fau"] = "Fayu", ["fax"] = "Fala", ["fay"] = "Southwestern Fars", ["faz"] = "Northwestern Fars", ["fbl"] = "West Albay Bikol", ["fcs"] = "Quebec Sign Language", ["fer"] = "Feroge", ["ff"] = "Fula", ["ffi"] = "Foia Foia", ["fgr"] = "Fongoro", ["fi"] = "Finnish", ["fia"] = "Nobiin", ["fie"] = "Fyer", ["fip"] = "Fipa", ["fir"] = "Firan", ["fit"] = "Meänkieli", ["fiw"] = "Fiwaga", ["fj"] = "Fijian", ["fkk"] = "Kirya-Konzel", ["fkv"] = "Kven", ["fla"] = "Montana Salish", ["flh"] = "Foau", ["fli"] = "Fali", ["fll"] = "North Fali", ["fln"] = "Flinders Island", ["flr"] = "Fuliiru", ["fly"] = "Tsotsitaal", ["fmp"] = "Fe'fe'", ["fmu"] = "Far Western Muria", ["fng"] = "Fanagalo", ["fni"] = "Fania", ["fo"] = "Faroese", ["fod"] = "Foodo", ["foi"] = "Foi", ["fom"] = "Foma", ["fon"] = "Fon", ["for"] = "Fore", ["fos"] = "Siraya", ["fpe"] = "Pichinglis", ["fqs"] = "Fas", ["fr"] = "French", ["frd"] = "Fordata", ["frm"] = "Middle French", ["fro"] = "Old French", ["frp"] = "Franco-Provençal", ["frq"] = "Forak", ["frr"] = "North Frisian", ["frt"] = "Fortsenal", ["fse"] = "Finnish Sign Language", ["fsl"] = "French Sign Language", ["fss"] = "Finnish-Swedish Sign Language", ["fud"] = "East Futuna", ["fuj"] = "Ko", ["fum"] = "Fum", ["fun"] = "Fulniô", ["fur"] = "Friulian", ["fut"] = "Futuna-Aniwa", ["fuu"] = "Furu", ["fuy"] = "Fuyug", ["fvr"] = "Fur", ["fwa"] = "Fwâi", ["fwe"] = "Fwe", ["fy"] = "West Frisian", ["ga"] = "Irish", ["gaa"] = "Ga", ["gab"] = "Gabri", ["gac"] = "Mixed Great Andamanese", ["gad"] = "Gaddang", ["gae"] = "Warekena", ["gaf"] = "Gende", ["gag"] = "Gagauz", ["gah"] = "Alekano", ["gai"] = "Borei", ["gaj"] = "Gadsup", ["gak"] = "Gamkonora", ["gal"] = "Galoli", ["gam"] = "Kandawo", ["gan"] = "Gan", ["gao"] = "Gants", ["gap"] = "Gal", ["gaq"] = "Gata'", ["gar"] = "Galeya", ["gas"] = "Adiwasi Garasia", ["gat"] = "Kenati", ["gau"] = "Kondekor", ["gaw"] = "Nobonob", ["gay"] = "Gayo", ["gba"] = "Gbaya", ["gbb"] = "Kaytetye", ["gbd"] = "Karadjeri", ["gbe"] = "Niksek", ["gbf"] = "Gaikundi", ["gbg"] = "Gbanziri", ["gbh"] = "Defi Gbe", ["gbi"] = "Galela", ["gbj"] = "Bodo Gadaba", ["gbk"] = "Gaddi", ["gbl"] = "Gamit", ["gbm"] = "Garhwali", ["gbn"] = "Mo'da", ["gbo"] = "Northern Grebo", ["gbp"] = "Gbaya-Bossangoa", ["gbq"] = "Gbaya-Bozoum", ["gbr"] = "Gbagyi", ["gbs"] = "Gbesi Gbe", ["gbu"] = "Gagadu", ["gbv"] = "Gbanu", ["gbw"] = "Gabi", ["gbx"] = "Eastern Xwla Gbe", ["gby"] = "Gbari", ["gcc"] = "Mali", ["gcd"] = "Ganggalida", ["gce"] = "Galice", ["gcf"] = "Antillean Creole", ["gcl"] = "Grenadian Creole English", ["gcn"] = "Gaina", ["gcr"] = "Guianese Creole", ["gct"] = "Colonia Tovar German", ["gd"] = "Scottish Gaelic", ["gdb"] = "Ollari", ["gdc"] = "Gugu Badhun", ["gdd"] = "Gedaged", ["gde"] = "Gude", ["gdf"] = "Guduf-Gava", ["gdg"] = "Ga'dang", ["gdh"] = "Gadjerawang", ["gdi"] = "Gundi", ["gdj"] = "Kurtjar", ["gdk"] = "Gadang", ["gdl"] = "Dirasha", ["gdm"] = "Laal", ["gdn"] = "Umanakaina", ["gdo"] = "Godoberi", ["gdq"] = "Mehri", ["gdr"] = "Wipi", ["gds"] = "Ghandruk Sign Language", ["gdt"] = "Kungardutyi", ["gdu"] = "Gudu", ["gdx"] = "Godwari", ["gea"] = "Geruma", ["geb"] = "Kire", ["gec"] = "Gboloo Grebo", ["ged"] = "Gade", ["geg"] = "Gengle", ["geh"] = "Hutterisch", ["gei"] = "Gebe", ["gej"] = "Gen", ["gek"] = "Gerka", ["gel"] = "Fakkanci", ["gem-bur"] = "Burgundian", ["gem-pro"] = "Proto-Germanic", ["geq"] = "Geme", ["ges"] = "Geser-Gorom", ["gev"] = "Viya", ["gew"] = "Gera", ["gex"] = "Garre", ["gey"] = "Enya", ["gez"] = "Ge'ez", ["gfk"] = "Patpatar", ["gft"] = "Gafat", ["gga"] = "Gao", ["ggb"] = "Gbii", ["ggd"] = "Gugadj", ["gge"] = "Guragone", ["ggg"] = "Gurgula", ["ggk"] = "Kungarakany", ["ggl"] = "Ganglau", ["ggn"] = "Eastern Gurung", ["ggt"] = "Gitua", ["ggu"] = "Gban", ["ggw"] = "Gogodala", ["gha"] = "Ghadames", ["ghe"] = "Southern Ghale", ["ghh"] = "Northern Ghale", ["ghk"] = "Geko Karen", ["ghl"] = "Ghulfan", ["ghn"] = "Ghanongga", ["gho"] = "Ghomara", ["ghr"] = "Ghera", ["ghs"] = "Guhu-Samane", ["ght"] = "Kutang Ghale", ["gia"] = "Kitja", ["gib"] = "Gibanawa", ["gid"] = "Gidar", ["gie"] = "Guébie", ["gig"] = "Goaria", ["gih"] = "Githabul", ["gii"] = "Girirra", ["gil"] = "Gilbertese", ["gim"] = "Gimi (Goroka)", ["gin"] = "Hinukh", ["gio"] = "Gelao", ["gip"] = "Gimi (Austronesian)", ["giq"] = "Green Gelao", ["gir"] = "Red Gelao", ["gis"] = "North Giziga", ["git"] = "Gitxsan", ["giu"] = "Mulao", ["giw"] = "White Gelao", ["gix"] = "Gilima", ["giy"] = "Giyug", ["giz"] = "South Giziga", ["gji"] = "Geji", ["gjk"] = "Kachi Koli", ["gjm"] = "Gunditjmara", ["gjn"] = "Gonja", ["gju"] = "Gojri", ["gka"] = "Guya", ["gkd"] = "Magɨ", ["gke"] = "Ndai", ["gkn"] = "Gokana", ["gko"] = "Kok-Nar", ["gkp"] = "Guinea Kpelle", ["gl"] = "Galician", ["glc"] = "Bon Gula", ["gld"] = "Nanai", ["glh"] = "Northwest Pashayi", ["glj"] = "Kulaal", ["glk"] = "Gilaki", ["glo"] = "Galambu", ["glr"] = "Glaro-Twabo", ["glu"] = "Gula", ["glw"] = "Glavda", ["gly"] = "Gule", ["gma"] = "Gambera", ["gmb"] = "Gula'alaa", ["gmd"] = "Mághdì", ["gme-cgo"] = "Crimean Gothic", ["gmg"] = "Magiyi", ["gmh"] = "Middle High German", ["gml"] = "Middle Low German", ["gmm"] = "Gbaya-Mbodomo", ["gmn"] = "Gimnime", ["gmq-gut"] = "Gutnish", ["gmq-jmk"] = "Jamtish", ["gmq-mno"] = "Middle Norwegian", ["gmq-oda"] = "Old Danish", ["gmq-osw"] = "Old Swedish", ["gmq-pro"] = "Proto-Norse", ["gmq-scy"] = "Scanian", ["gmu"] = "Gumalu", ["gmv"] = "Gamo", ["gmw-bgh"] = "Bergish", ["gmw-cfr"] = "Central Franconian", ["gmw-ecg"] = "East Central German", ["gmw-gts"] = "Gottscheerish", ["gmw-jdt"] = "Jersey Dutch", ["gmw-pro"] = "Proto-West Germanic", ["gmw-rfr"] = "Rhine Franconian", ["gmw-stm"] = "Sathmar Swabian", ["gmw-tsx"] = "Transylvanian Saxon", ["gmw-vog"] = "Volga German", ["gmw-zps"] = "Zipser German", ["gmx"] = "Magoma", ["gmy"] = "Mycenaean Greek", ["gmz"] = "Mgbo", ["gn"] = "Guaraní", ["gn-cls"] = "Classical Guaraní", ["gna"] = "Kaansa", ["gnb"] = "Gangte", ["gnc"] = "Guanche", ["gnd"] = "Zulgo-Gemzek", ["gne"] = "Ganang", ["gng"] = "Ngangam", ["gnh"] = "Lere", ["gni"] = "Gooniyandi", ["gnj"] = "Ngen", ["gnk"] = "ǁGana", ["gnl"] = "Gangulu", ["gnm"] = "Ginuman", ["gnn"] = "Gumatj", ["gnq"] = "Gana", ["gnr"] = "Gureng Gureng", ["gnt"] = "Guntai", ["gnu"] = "Gnau", ["gnw"] = "Western Bolivian Guaraní", ["gnz"] = "Ganzi", ["goa"] = "Guro", ["gob"] = "Playero", ["goc"] = "Gorakor", ["god"] = "Godié", ["goe"] = "Gongduk", ["gof"] = "Gofa", ["gog"] = "Gogo", ["goh"] = "Old High German", ["goi"] = "Gobasi", ["goj"] = "Gowlan", ["gol"] = "Gola", ["gon"] = "Gondi", ["goo"] = "Gone Dau", ["gop"] = "Yeretuar", ["goq"] = "Gorap", ["gor"] = "Gorontalo", ["got"] = "Gothic", ["gou"] = "Gavar", ["gov"] = "Goo", ["gow"] = "Gorowa", ["gox"] = "Gobu", ["goy"] = "Goundo", ["goz"] = "Gozarkhani", ["gpa"] = "Gupa-Abawa", ["gpn"] = "Taiap", ["gqa"] = "Ga'anda", ["gqi"] = "Guiqiong", ["gqn"] = "Kinikinao", ["gqr"] = "Gor", ["gqu"] = "Qau", ["gra"] = "Rajput Garasia", ["grb"] = "Grebo", ["grc"] = "Ancient Greek", ["grd"] = "Guruntum", ["grg"] = "Madi", ["grh"] = "Gbiri-Niragu", ["gri"] = "Ghari", ["grj"] = "Southern Grebo", ["grk-cal"] = "Calabrian Greek", ["grk-ita"] = "Italiot Greek", ["grk-mar"] = "Mariupol Greek", ["grk-pro"] = "Proto-Hellenic", ["grm"] = "Kota Marudu Talantang", ["gro"] = "Groma", ["grq"] = "Gorovu", ["grs"] = "Gresi", ["grt"] = "Garo", ["gru"] = "Kistane", ["grv"] = "Central Grebo", ["grw"] = "Gweda", ["grx"] = "Guriaso", ["gry"] = "Barclayville Grebo", ["grz"] = "Guramalum", ["gse"] = "Ghanaian Sign Language", ["gsg"] = "German Sign Language", ["gsl"] = "Gusilay", ["gsm"] = "Guatemalan Sign Language", ["gsn"] = "Gusan", ["gso"] = "Southwest Gbaya", ["gsp"] = "Wasembo", ["gss"] = "Greek Sign Language", ["gsw"] = "Alemannic German", ["gta"] = "Guató", ["gtu"] = "Aghu Tharrnggala", ["gu"] = "Gujarati", ["gua"] = "Shiki", ["gub"] = "Guajajára", ["guc"] = "Wayuu", ["gud"] = "Yocoboué Dida", ["gue"] = "Gurindji", ["guf"] = "Gupapuyngu", ["gug"] = "Paraguayan Guaraní", ["guh"] = "Guahibo", ["gui"] = "Eastern Bolivian Guaraní", ["guk"] = "Gumuz", ["gul"] = "Gullah", ["gum"] = "Guambiano", ["gun"] = "Mbyá Guaraní", ["guo"] = "Guayabero", ["gup"] = "Gunwinggu", ["guq"] = "Aché", ["gur"] = "Farefare", ["gus"] = "Guinean Sign Language", ["gut"] = "Maléku Jaíka", ["guu"] = "Yanomamö", ["guv"] = "Gey", ["guw"] = "Gun", ["gux"] = "Gourmanchéma", ["guz"] = "Gusii", ["gv"] = "Manx", ["gva"] = "Kaskihá", ["gvc"] = "Guanano", ["gve"] = "Duwet", ["gvf"] = "Golin", ["gvj"] = "Guajá", ["gvl"] = "Gulay", ["gvm"] = "Gurmana", ["gvn"] = "Kuku-Yalanji", ["gvo"] = "Gavião do Jiparaná", ["gvp"] = "Pará Gavião", ["gvr"] = "Western Gurung", ["gvs"] = "Gumawana", ["gvy"] = "Guyani", ["gwa"] = "Mbato", ["gwb"] = "Gwa", ["gwc"] = "Kalami", ["gwd"] = "Gawwada", ["gwe"] = "Gweno", ["gwf"] = "Gowro", ["gwg"] = "Moo", ["gwi"] = "Gwich'in", ["gwj"] = "Gcwi", ["gwm"] = "Awngthim", ["gwn"] = "Gwandara", ["gwr"] = "Gwere", ["gwt"] = "Gawar-Bati", ["gwu"] = "Guwamu", ["gww"] = "Kwini", ["gwx"] = "Gua", ["gxx"] = "Wè Southern", ["gya"] = "Northwest Gbaya", ["gyb"] = "Garus", ["gyd"] = "Kayardild", ["gye"] = "Gyem", ["gyf"] = "Gungabula", ["gyg"] = "Gbayi", ["gyi"] = "Gyele", ["gyl"] = "Gayil", ["gym"] = "Ngäbere", ["gyn"] = "Guyanese Creole English", ["gyo"] = "Gyalsumdo", ["gyr"] = "Guarayu", ["gyy"] = "Gunya", ["gza"] = "Ganza", ["gzn"] = "Gane", ["ha"] = "Hausa", ["haa"] = "Hän", ["hab"] = "Hanoi Sign Language", ["hac"] = "Gurani", ["had"] = "Hatam", ["haf"] = "Haiphong Sign Language", ["hag"] = "Hanga", ["hah"] = "Hahon", ["hai"] = "Haida", ["haj"] = "Hajong", ["hak"] = "Hakka", ["hal"] = "Halang", ["ham"] = "Hewa", ["hao"] = "Hakö", ["hap"] = "Hupla", ["har"] = "Harari", ["has"] = "Haisla", ["hav"] = "Havu", ["haw"] = "Hawaiian", ["hax"] = "Southern Haida", ["hay"] = "Haya", ["haz"] = "Hazaragi", ["hba"] = "Hamba", ["hbb"] = "Huba", ["hbn"] = "Heiban", ["hbu"] = "Habu", ["hca"] = "Andaman Creole Hindi", ["hch"] = "Huichol", ["hdn"] = "Northern Haida", ["hds"] = "Honduras Sign Language", ["hdy"] = "Hadiyya", ["he"] = "Hebrew", ["hea"] = "Northern Qiandong Miao", ["hed"] = "Herdé", ["heg"] = "Helong", ["heh"] = "Hehe", ["hei"] = "Heiltsuk", ["hem"] = "Hemba", ["hgm"] = "Haiǁom", ["hgw"] = "Haigwai", ["hhi"] = "Hoia Hoia", ["hhr"] = "Kerak", ["hhy"] = "Hoyahoya", ["hi"] = "हिंदी", ["hia"] = "Lamang", ["hib"] = "Hibito", ["hid"] = "Hidatsa", ["hif"] = "फीजी हिंदी", ["hig"] = "Kamwe", ["hih"] = "Pamosu", ["hii"] = "Hinduri", ["hij"] = "Hijuk", ["hik"] = "Seit-Kaitetu", ["hil"] = "Hiligaynon", ["hio"] = "Tshwa", ["hir"] = "Himarimã", ["hit"] = "Hittite", ["hiw"] = "Hiw", ["hix"] = "Hixkaryana", ["hji"] = "Haji", ["hka"] = "Kahe", ["hke"] = "Hunde", ["hkk"] = "Hunjara-Kaina Ke", ["hkn"] = "Mel-Khaonh", ["hks"] = "Hong Kong Sign Language", ["hla"] = "Halia", ["hlb"] = "Halbi", ["hld"] = "Halang Doan", ["hle"] = "Hlersu", ["hlt"] = "Nga La", ["hma"] = "Southern Mashan Hmong", ["hmb"] = "Humburi Senni", ["hmc"] = "Central Huishui Hmong", ["hmd"] = "A-Hmao", ["hme"] = "Eastern Huishui Hmong", ["hmf"] = "Hmong Don", ["hmg"] = "Southwestern Guiyang Hmong", ["hmh"] = "Southwestern Huishui Hmong", ["hmi"] = "Northern Huishui Hmong", ["hmj"] = "Ge", ["hmk"] = "Maek", ["hml"] = "Luopohe Hmong", ["hmm"] = "Central Mashan Hmong", ["hmn-pro"] = "Proto-Hmong", ["hmp"] = "Northern Mashan Hmong", ["hmq"] = "Eastern Qiandong Miao", ["hmr"] = "Hmar", ["hms"] = "Southern Qiandong Miao", ["hmt"] = "Hamtai", ["hmu"] = "Hamap", ["hmv"] = "Hmong Dô", ["hmw"] = "Western Mashan Hmong", ["hmx-mie-pro"] = "Proto-Mien", ["hmx-pro"] = "Proto-Hmong-Mien", ["hmy"] = "Southern Guiyang Hmong", ["hmz"] = "Hmong Shua", ["hna"] = "Mina", ["hnd"] = "Southern Hindko", ["hne"] = "Chhattisgarhi", ["hnh"] = "ǁAni", ["hni"] = "Hani", ["hnj"] = "Green Hmong", ["hnn"] = "Hanunoo", ["hno"] = "Northern Hindko", ["hns"] = "Caribbean Hindustani", ["hnu"] = "Hung", ["ho"] = "Hiri Motu", ["hoa"] = "Hoava", ["hob"] = "Austronesian Mari", ["hoc"] = "Ho", ["hod"] = "Holma", ["hoe"] = "Horom", ["hoh"] = "Hobyót", ["hoi"] = "Holikachuk", ["hoj"] = "Hadothi", ["hol"] = "Holu", ["hom"] = "Homa", ["hoo"] = "Holoholo", ["hop"] = "Hopi", ["hor"] = "Horo", ["hos"] = "Ho Chi Minh City Sign Language", ["hot"] = "Hote", ["hov"] = "Hovongan", ["how"] = "Honi", ["hoy"] = "Holiya", ["hoz"] = "Hozo", ["hpo"] = "Hpon", ["hps"] = "Hawai'i Pidgin Sign Language", ["hra"] = "Hrangkhol", ["hrc"] = "Niwer Mil", ["hre"] = "Hre", ["hrk"] = "Haruku", ["hrm"] = "Horned Miao", ["hro"] = "Haroi", ["hrp"] = "Nhirrpi", ["hrt"] = "Hértevin", ["hru"] = "Hruso", ["hrw"] = "Warwar Feni", ["hrx"] = "Hunsrik", ["hrz"] = "Harzani", ["hsb"] = "Upper Sorbian", ["hsh"] = "Hungarian Sign Language", ["hsl"] = "Hausa Sign Language", ["hsn"] = "Xiang", ["hss"] = "Harsusi", ["ht"] = "Haitian Creole", ["hti"] = "Hoti", ["hto"] = "Minica Huitoto", ["hts"] = "Hadza", ["htu"] = "Hitu", ["hu"] = "Hungarian", ["hub"] = "Huambisa", ["huc"] = "ǂHoan", ["hud"] = "Huaulu", ["huf"] = "Humene", ["hug"] = "Huachipaeri", ["huh"] = "Huilliche", ["hui"] = "Huli", ["huj"] = "Northern Guiyang Hmong", ["huk"] = "Hulung", ["hul"] = "Hula", ["hum"] = "Hungana", ["huo"] = "Hu", ["hup"] = "Hupa", ["huq"] = "Tsat", ["hur"] = "Halkomelem", ["hus"] = "Wastek", ["huu"] = "Murui Huitoto", ["huv"] = "Huave", ["huw"] = "Hukumina", ["hux"] = "Nüpode Huitoto", ["huy"] = "Hulaulá", ["huz"] = "Hunzib", ["hvc"] = "Haitian Vodoun Culture Language", ["hvk"] = "Haveke", ["hvn"] = "Sabu", ["hwa"] = "Wané", ["hwc"] = "Hawaiian Creole", ["hwo"] = "Hwana", ["hy"] = "Armenian", ["hya"] = "Hya", ["hyx-pro"] = "Proto-Armenian", ["hz"] = "Herero", ["ia"] = "Interlingua", ["iai"] = "Iaai", ["ian"] = "Iatmul", ["iar"] = "Purari", ["iba"] = "Iban", ["ibb"] = "Ibibio", ["ibd"] = "Iwaidja", ["ibe"] = "Akpes", ["ibg"] = "Ibanag", ["ibh"] = "Bih", ["ibl"] = "Ibaloi", ["ibm"] = "Agoi", ["ibn"] = "Ibino", ["ibr"] = "Ibuoro", ["ibu"] = "Ibu", ["iby"] = "Ibani", ["ica"] = "Ede Ica", ["ich"] = "Etkywan", ["icl"] = "Icelandic Sign Language", ["icr"] = "Islander Creole English", ["id"] = "Indonesian", ["ida"] = "Idakho-Isukha-Tiriki", ["idb"] = "Indo-Portuguese", ["idc"] = "Idon", ["idd"] = "Ede Idaca", ["ide"] = "Idere", ["idi"] = "Idi", ["idr"] = "Indri", ["ids"] = "Idesa", ["idt"] = "Idaté", ["idu"] = "Idoma", ["ie"] = "Interlingue", ["ifa"] = "Amganad Ifugao", ["ifb"] = "Batad Ifugao", ["ife"] = "Ifè", ["iff"] = "Ifo", ["ifk"] = "Tuwali Ifugao", ["ifm"] = "Teke-Fuumu", ["ifu"] = "Mayoyao Ifugao", ["ify"] = "Keley-I Kallahan", ["ig"] = "Igbo", ["igb"] = "Ebira", ["ige"] = "Igede", ["igg"] = "Igana", ["igl"] = "Igala", ["igm"] = "Kanggape", ["ign"] = "Ignaciano", ["igo"] = "Isebe", ["igs"] = "Glosa", ["igw"] = "Igwe", ["ihb"] = "Pidgin Iha", ["ihi"] = "Ihievbe", ["ihp"] = "Iha", ["ii"] = "Sichuan Yi", ["iir-nur-pro"] = "Proto-Nuristani", ["iir-pro"] = "Proto-Indo-Iranian", ["ijc"] = "Izon", ["ije"] = "Biseni", ["ijj"] = "Ede Ije", ["ijn"] = "Kalabari", ["ijo-pro"] = "Proto-Ijoid", ["ijs"] = "Southeast Ijo", ["ik"] = "Inupiaq", ["ike"] = "Eastern Canadian Inuktitut", ["iki"] = "Iko", ["ikk"] = "Ika", ["ikl"] = "Ikulu", ["iko"] = "Olulumo-Ikom", ["ikp"] = "Ikpeshi", ["ikr"] = "Ikaranggal", ["iks"] = "Inuit Sign Language", ["ikt"] = "Inuvialuktun", ["ikv"] = "Iku-Gora-Ankwa", ["ikw"] = "Ikwere", ["ikx"] = "Ik", ["ikz"] = "Ikizu", ["ila"] = "Ile Ape", ["ilb"] = "Ila", ["ilg"] = "Ilgar", ["ili"] = "Ili Turki", ["ilk"] = "Ilongot", ["ill"] = "Iranun", ["ilo"] = "Ilocano", ["ils"] = "International Sign", ["ilu"] = "Ili'uun", ["ilv"] = "Ilue", ["ima"] = "Mala Malasar", ["imi"] = "Anamgura", ["iml"] = "Miluk", ["imn"] = "Imonda", ["imo"] = "Imbongu", ["imr"] = "Imroing", ["ims"] = "Marsian", ["imy"] = "Milyan", ["inb"] = "Inga", ["inc-ash"] = "Ashokan Prakrit", ["inc-cen-pro"] = "Proto-Central Indo-Aryan", ["inc-gup"] = "Gurjar Apabhramsa", ["inc-kam"] = "Kamarupi Prakrit", ["inc-kha"] = "Khasa Prakrit", ["inc-kho"] = "Kholosi", ["inc-mas"] = "मध्य असमिया", ["inc-mbn"] = "Middle Bengali", ["inc-mgd"] = "Magadhi Prakrit", ["inc-mgu"] = "Middle Gujarati", ["inc-mor"] = "Middle Oriya", ["inc-oas"] = "प्रारंभिक असमिया", ["inc-obn"] = "Old Bengali", ["inc-ogu"] = "Old Gujarati", ["inc-ohi"] = "Old Hindi", ["inc-oor"] = "Old Oriya", ["inc-opa"] = "Old Punjabi", ["inc-ork"] = "Old Kamta", ["inc-pra"] = "Prakrit", ["inc-pro"] = "Proto-Indo-Aryan", ["inc-psc"] = "Paisaci Prakrit", ["inc-sap"] = "Sauraseni Apabhramsa", ["inc-tak"] = "Takka Apabhramsa", ["inc-vra"] = "Vracada Apabhramsa", ["ine-ana-pro"] = "Proto-Anatolian", ["ine-bsl-pro"] = "Proto-Balto-Slavic", ["ine-pae"] = "Paeonian", ["ine-pro"] = "Proto-Indo-European", ["ine-toc-pro"] = "Proto-Tocharian", ["ing"] = "Deg Xinag", ["inh"] = "Ingush", ["inj"] = "Jungle Inga", ["inl"] = "Indonesian Sign Language", ["inm"] = "Minaean", ["inn"] = "Isinai", ["ino"] = "Inoke-Yate", ["inp"] = "Iñapari", ["ins"] = "Indian Sign Language", ["int"] = "Intha", ["inz"] = "Ineseño", ["io"] = "Ido", ["ior"] = "Inor", ["iou"] = "Tuma-Irumu", ["iow"] = "Chiwere", ["ipi"] = "Ipili", ["ipo"] = "Ipiko", ["iqu"] = "Iquito", ["iqw"] = "Ikwo", ["ira-kms-pro"] = "Proto-Komisenian", ["ira-mny-pro"] = "Proto-Munji-Yidgha", ["ira-mpr-pro"] = "Proto-Medo-Parthian", ["ira-pat-pro"] = "Proto-Pathan", ["ira-pro"] = "Proto-Iranian", ["ira-sgc-pro"] = "Proto-Sogdic", ["ira-sgi-pro"] = "Proto-Sanglechi-Ishkashimi", ["ira-shr-pro"] = "Proto-Shughni-Roshani", ["ira-shy-pro"] = "Proto-Shughni-Yazghulami", ["ira-sym-pro"] = "Proto-Shughni-Yazghulami-Munji", ["ira-wnj"] = "Vanji", ["ira-zgr-pro"] = "Proto-Zaza-Gorani", ["ire"] = "Iresim", ["irh"] = "Irarutu", ["iri"] = "Rigwe", ["irk"] = "Iraqw", ["irn"] = "Irantxe", ["iro-ere"] = "Erie", ["iro-min"] = "Mingo", ["iro-nor-pro"] = "Proto-North Iroquoian", ["iro-pro"] = "Proto-Iroquoian", ["irr"] = "Ir", ["iru"] = "Irula", ["irx"] = "Kamberau", ["iry"] = "Iraya", ["is"] = "Icelandic", ["isa"] = "Isabi", ["isc"] = "Isconahua", ["isd"] = "Isnag", ["ise"] = "Italian Sign Language", ["isg"] = "Irish Sign Language", ["ish"] = "Esan", ["isi"] = "Nkem-Nkum", ["isk"] = "Ishkashimi", ["ism"] = "Masimasi", ["isn"] = "Isanzu", ["iso"] = "Isoko", ["isr"] = "Israeli Sign Language", ["ist"] = "Istriot", ["isu"] = "Isu", ["it"] = "Italian", ["itb"] = "Binongan Itneg", ["itc-pro"] = "Proto-Italic", ["itd"] = "Southern Tidong", ["ite"] = "Itene", ["iti"] = "Inlaod Itneg", ["itk"] = "Judeo-Italian", ["itl"] = "Itelmen", ["itm"] = "Itu Mbon Uzo", ["ito"] = "Itonama", ["itr"] = "Iteri", ["its"] = "Itsekiri", ["itt"] = "Maeng Itneg", ["itv"] = "Itawit", ["itw"] = "Ito", ["itx"] = "Itik", ["ity"] = "Moyadan Itneg", ["itz"] = "Itzá", ["iu"] = "Inuktitut", ["ium"] = "Iu Mien", ["ivb"] = "Ibatan", ["ivv"] = "Ivatan", ["iwk"] = "I-Wak", ["iwm"] = "Iwam", ["iwo"] = "Iwur", ["iws"] = "Sepik Iwam", ["ixc"] = "Ixcatec", ["ixl"] = "Ixil", ["iya"] = "Iyayu", ["iyo"] = "Mesaka", ["iyx"] = "Yaa", ["izh"] = "Ingrian", ["izi"] = "Izi-Ezaa-Ikwo-Mgbo", ["izr"] = "Izere", ["izz"] = "Izi", ["ja"] = "Japanese", ["jaa"] = "Jamamadí", ["jab"] = "Hyam", ["jac"] = "Jakaltek", ["jad"] = "Jahanka", ["jae"] = "Jabem", ["jaf"] = "Jara", ["jah"] = "Jah Hut", ["jaj"] = "Zazao", ["jal"] = "Yalahatan", ["jam"] = "Jamaican Creole", ["jan"] = "Janday", ["jao"] = "Yanyuwa", ["jaq"] = "Yaqay", ["jas"] = "New Caledonian Javanese", ["jat"] = "Jakati", ["jau"] = "Yaur", ["jax"] = "Jambi Malay", ["jay"] = "Yan-nhangu", ["jaz"] = "Jawe", ["jbj"] = "Arandai", ["jbk"] = "Barikewa", ["jbn"] = "Nefusa", ["jbo"] = "Lojban", ["jbr"] = "Jofotek-Bromnya", ["jbt"] = "Jabutí", ["jbu"] = "Jukun Takum", ["jbw"] = "Yawijibaya", ["jcs"] = "Jamaican Country Sign Language", ["jct"] = "Krymchak", ["jda"] = "Jad", ["jdg"] = "Jadgali", ["jdt"] = "Judeo-Tat", ["jeb"] = "Jebero", ["jee"] = "Jerung", ["jeg"] = "Jeng", ["jeh"] = "Jeh", ["jei"] = "Yei", ["jek"] = "Jeri Kuo", ["jel"] = "Yelmek", ["jen"] = "Dza", ["jer"] = "Jere", ["jet"] = "Manem", ["jeu"] = "Jonkor Bourmataguil", ["jgb"] = "Ngbee", ["jgk"] = "Gwak", ["jgo"] = "Ngomba", ["jhi"] = "Jehai", ["jhs"] = "Jhankot Sign Language", ["jia"] = "Jina", ["jib"] = "Jibu", ["jic"] = "Tol", ["jid"] = "Bu", ["jie"] = "Jilbe", ["jig"] = "Jingulu", ["jih"] = "Shangzhai", ["jii"] = "Jiiddu", ["jil"] = "Jilim", ["jim"] = "Jimjimen", ["jio"] = "Jiamao", ["jiq"] = "Khroskyabs", ["jit"] = "Jita", ["jiu"] = "Youle Jinuo", ["jiv"] = "Shuar", ["jiy"] = "Buyuan Jinuo", ["jje"] = "Jeju", ["jjr"] = "Zhár", ["jka"] = "Kaera", ["jko"] = "Kubo", ["jkr"] = "Koro (India)", ["jku"] = "Labir", ["jle"] = "Ngile", ["jls"] = "Jamaican Sign Language", ["jma"] = "Dima", ["jmb"] = "Zumbun", ["jmc"] = "Machame", ["jmd"] = "Yamdena", ["jmi"] = "Jimi", ["jml"] = "Jumli", ["jmn"] = "Makuri Naga", ["jmr"] = "Kamara", ["jmw"] = "Mouwase", ["jmx"] = "Western Juxtlahuaca Mixtec", ["jna"] = "Jangshung", ["jnd"] = "Jandavra", ["jng"] = "Yangman", ["jni"] = "Janji", ["jnj"] = "Yemsa", ["jnl"] = "Rawat", ["jns"] = "Jaunsari", ["job"] = "Joba", ["jod"] = "Wojenaka", ["jor"] = "Jorá", ["jos"] = "Jordanian Sign Language", ["jow"] = "Jowulu", ["jpr"] = "Judeo-Persian", ["jpx-pro"] = "Proto-Japonic", ["jpx-ryu-pro"] = "Proto-Ryukyuan", ["jqr"] = "Jaqaru", ["jra"] = "Jarai", ["jrr"] = "Jiru", ["jru"] = "Japrería", ["jsl"] = "Japanese Sign Language", ["jua"] = "Júma", ["jub"] = "Wannu", ["juc"] = "Jurchen", ["jud"] = "Worodougou", ["juh"] = "Hone", ["jui"] = "Ngadjuri", ["juk"] = "Wapan", ["jul"] = "Jirel", ["jum"] = "Jumjum", ["jun"] = "Juang", ["juo"] = "Jiba", ["jup"] = "Hupdë", ["jur"] = "Jurúna", ["jus"] = "Jumla Sign Language", ["jut"] = "Jutish", ["juu"] = "Ju", ["juw"] = "Wãpha", ["juy"] = "Juray", ["jv"] = "Javanese", ["jvd"] = "Javindo", ["jvn"] = "Caribbean Javanese", ["jwi"] = "Jwira-Pepesa", ["jyy"] = "Jaya", ["ka"] = "Georgian", ["kaa"] = "Karakalpak", ["kab"] = "Kabyle", ["kac"] = "Jingpho", ["kad"] = "Kadara", ["kae"] = "Ketangalan", ["kaf"] = "Katso", ["kag"] = "Kajaman", ["kah"] = "Fer", ["kai"] = "Karekare", ["kaj"] = "Jju", ["kak"] = "Kayapa Kallahan", ["kam"] = "Kamba", ["kao"] = "Kassonke", ["kap"] = "Bezhta", ["kaq"] = "Capanahua", ["kar-pro"] = "Proto-Karen", ["kaw"] = "Old Javanese", ["kax"] = "Kao", ["kay"] = "Kamayurá", ["kba"] = "Kalarko", ["kbb"] = "Kaxuyana", ["kbc"] = "Kadiwéu", ["kbd"] = "Kabardian", ["kbe"] = "Kanju", ["kbh"] = "Camsá", ["kbi"] = "Kaptiau", ["kbj"] = "Kari", ["kbk"] = "Grass Koiari", ["kbm"] = "Iwal", ["kbn"] = "Kare (Africa)", ["kbo"] = "Keliko", ["kbp"] = "Kabiyé", ["kbq"] = "Kamano", ["kbr"] = "Kafa", ["kbs"] = "Kande", ["kbt"] = "Gabadi", ["kbu"] = "Kabutra", ["kbv"] = "Kamberataro", ["kbw"] = "Kaiep", ["kbx"] = "Ap Ma", ["kbz"] = "Duhwa", ["kca"] = "Khanty", ["kcb"] = "Kawacha", ["kcc"] = "Lubila", ["kcd"] = "Ngkâlmpw Kanum", ["kce"] = "Kaivi", ["kcf"] = "Ukaan", ["kcg"] = "Tyap", ["kch"] = "Vono", ["kci"] = "Kamantan", ["kcj"] = "Kobiana", ["kck"] = "Kalanga", ["kcl"] = "Kala", ["kcm"] = "Tar Gula", ["kcn"] = "Nubi", ["kco"] = "Kinalakna", ["kcp"] = "Kanga", ["kcq"] = "Kamo", ["kcr"] = "Katla", ["kcs"] = "Koenoem", ["kct"] = "Kaian", ["kcu"] = "Kikami", ["kcv"] = "Kete", ["kcw"] = "Kabwari", ["kcx"] = "Kachama-Ganjule", ["kcy"] = "Korandje", ["kcz"] = "Konongo", ["kda"] = "Worimi", ["kdc"] = "Kutu", ["kdd"] = "Yankunytjatjara", ["kde"] = "Makonde", ["kdf"] = "Mamusi", ["kdg"] = "Seba", ["kdh"] = "Tem", ["kdi"] = "Kumam", ["kdj"] = "Karamojong", ["kdk"] = "Numee", ["kdl"] = "Tsikimba", ["kdm"] = "Kagoma", ["kdn"] = "Kunda", ["kdp"] = "Kaningdon-Nindem", ["kdq"] = "Koch", ["kdr"] = "Karaim", ["kdt"] = "Kuy", ["kdu"] = "Kadaru", ["kdv"] = "Kado", ["kdw"] = "Koneraw", ["kdx"] = "Kam", ["kdy"] = "Keder", ["kdz"] = "Kwaja", ["kea"] = "Kabuverdianu", ["keb"] = "Kélé", ["kec"] = "Keiga", ["ked"] = "Kerewe", ["kee"] = "Eastern Keres", ["kef"] = "Kpessi", ["keg"] = "Tese", ["keh"] = "Keak", ["kei"] = "Kei", ["kej"] = "Kadar", ["kek"] = "Q'eqchi", ["kel"] = "Kela-Yela", ["kem"] = "Kemak", ["ken"] = "Kenyang", ["keo"] = "Kakwa", ["kep"] = "Kaikadi", ["keq"] = "Kamar", ["ker"] = "Kera", ["kes"] = "Kugbo", ["ket"] = "Ket", ["keu"] = "Akebu", ["kev"] = "Kanikkaran", ["kew"] = "Kewa", ["kex"] = "Kukna", ["key"] = "Kupia", ["kez"] = "Kukele", ["kfa"] = "Kodava", ["kfb"] = "Kolami", ["kfc"] = "Konda-Dora", ["kfd"] = "Korra Koraga", ["kfe"] = "Kota (India)", ["kff"] = "Koya", ["kfg"] = "Kudiya", ["kfh"] = "Kurichiya", ["kfi"] = "Kannada Kurumba", ["kfj"] = "Kemiehua", ["kfk"] = "Kinnauri", ["kfl"] = "Kung", ["kfn"] = "Kuk", ["kfo"] = "Koro (West Africa)", ["kfp"] = "Korwa", ["kfq"] = "Korku", ["kfr"] = "Kachchi", ["kfs"] = "Bilaspuri", ["kft"] = "Kanjari", ["kfu"] = "Katkari", ["kfv"] = "Kurmukar", ["kfw"] = "Kharam Naga", ["kfx"] = "Kullu Pahari", ["kfy"] = "Kumaoni", ["kfz"] = "Koromfé", ["kg"] = "Kongo", ["kga"] = "Koyaga", ["kgb"] = "Kawe", ["kgd"] = "Kataang", ["kge"] = "Komering", ["kgf"] = "Kube", ["kgg"] = "Kusunda", ["kgi"] = "Selangor Sign Language", ["kgj"] = "Gamale Kham", ["kgk"] = "Kaiwá", ["kgl"] = "Kunggari", ["kgm"] = "Karipúna", ["kgn"] = "Karingani", ["kgo"] = "Krongo", ["kgp"] = "Kaingang", ["kgq"] = "Kamoro", ["kgr"] = "Abun", ["kgs"] = "Kumbainggar", ["kgt"] = "Somyev", ["kgu"] = "Kobol", ["kgv"] = "Karas", ["kgw"] = "Karon Dori", ["kgx"] = "Kamaru", ["kgy"] = "Kyerung", ["kha"] = "Khasi", ["khb"] = "Lü", ["khc"] = "Tukang Besi North", ["khd"] = "Bädi Kanum", ["khe"] = "Korowai", ["khf"] = "Khuen", ["khh"] = "Kehu", ["khi-kho-pro"] = "Proto-Khoe", ["khi-kun"] = "ǃKung", ["khj"] = "Kuturmi", ["khl"] = "Lusi", ["khn"] = "Khandeshi", ["kho"] = "Khotanese", ["khp"] = "Kapauri", ["khq"] = "Koyra Chiini", ["khr"] = "Kharia", ["khs"] = "Kasua", ["kht"] = "Khamti", ["khu"] = "Nkhumbi", ["khv"] = "Khvarshi", ["khw"] = "Khowar", ["khx"] = "Kanu", ["khy"] = "Ekele", ["khz"] = "Keapara", ["ki"] = "Kikuyu", ["kia"] = "Kim", ["kib"] = "Koalib", ["kic"] = "Kickapoo", ["kid"] = "Koshin", ["kie"] = "Kibet", ["kif"] = "Eastern Parbate Kham", ["kig"] = "Kimaama", ["kih"] = "Kilmeri", ["kii"] = "Kitsai", ["kij"] = "Kilivila", ["kil"] = "Kariya", ["kim"] = "Tofa", ["kio"] = "Kiowa", ["kip"] = "Sheshi Kham", ["kiq"] = "Kosadle", ["kis"] = "Kis", ["kit"] = "Agob", ["kiv"] = "Kimbu", ["kiw"] = "Northeast Kiwai", ["kix"] = "Khiamniungan Naga", ["kiy"] = "Kirikiri", ["kiz"] = "Kisi", ["kj"] = "Kwanyama", ["kja"] = "Mlap", ["kjb"] = "Q'anjob'al", ["kjc"] = "Coastal Konjo", ["kjd"] = "Southern Kiwai", ["kje"] = "Kisar", ["kjg"] = "Khmu", ["kjh"] = "Khakas", ["kji"] = "Zabana", ["kjj"] = "Khinalug", ["kjk"] = "Highland Konjo", ["kjl"] = "Kham", ["kjm"] = "Kháng", ["kjn"] = "Kunjen", ["kjo"] = "Harijan Kinnauri", ["kjp"] = "Eastern Pwo", ["kjq"] = "Western Keres", ["kjr"] = "Kurudu", ["kjs"] = "East Kewa", ["kjt"] = "Phrae Pwo", ["kju"] = "Kashaya", ["kjx"] = "Ramopa", ["kjy"] = "Erave", ["kjz"] = "Bumthangkha", ["kk"] = "Kazakh", ["kka"] = "Kakanda", ["kkb"] = "Kwerisa", ["kkc"] = "Odoodee", ["kkd"] = "Kinuku", ["kke"] = "Kakabe", ["kkf"] = "Kalaktang Monpa", ["kkg"] = "Mabaka Valley Kalinga", ["kkh"] = "Khün", ["kki"] = "Kagulu", ["kkj"] = "Kako", ["kkk"] = "Kokota", ["kkl"] = "Kosarek Yale", ["kkm"] = "Kiong", ["kkn"] = "Kon Keu", ["kko"] = "Karko", ["kkp"] = "Koko-Bera", ["kkq"] = "Kaiku", ["kkr"] = "Kir-Balar", ["kks"] = "Kirfi", ["kkt"] = "Koi", ["kku"] = "Tumi", ["kkv"] = "Kangean", ["kkw"] = "Teke-Kukuya", ["kkx"] = "Kohin", ["kky"] = "Guugu Yimidhirr", ["kkz"] = "Kaska", ["kl"] = "Greenlandic", ["kla"] = "Klamath-Modoc", ["klb"] = "Kiliwa", ["klc"] = "Kolbila", ["kld"] = "Gamilaraay", ["kle"] = "Kulung", ["klf"] = "Kendeje", ["klg"] = "Tagakaulu Kalagan", ["klh"] = "Weliki", ["kli"] = "Kalumpang", ["klj"] = "Khalaj", ["klk"] = "Kono (Nigeria)", ["kll"] = "Kagan Kalagan", ["klm"] = "Kolom", ["kln"] = "Kalenjin", ["klo"] = "Kapya", ["klp"] = "Kamasa", ["klq"] = "Rumu", ["klr"] = "Khaling", ["kls"] = "Kalasha", ["klt"] = "Nukna", ["klu"] = "Klao", ["klv"] = "Maskelynes", ["klw"] = "Lindu", ["klx"] = "Koluwawa", ["kly"] = "Kalao", ["klz"] = "Kabola", ["km"] = "Khmer", ["kma"] = "Konni", ["kmb"] = "Kimbundu", ["kmc"] = "Southern Kam", ["kmd"] = "Madukayang Kalinga", ["kme"] = "Bakole", ["kmf"] = "Kare (New Guinea)", ["kmg"] = "Kâte", ["kmh"] = "Kalam", ["kmi"] = "Kami", ["kmj"] = "Kumarbhag Paharia", ["kmk"] = "Limos Kalinga", ["kml"] = "Tanudan Kalinga", ["kmm"] = "Kom (India)", ["kmn"] = "Awtuw", ["kmo"] = "Kwoma", ["kmp"] = "Gimme", ["kmq"] = "Kwama", ["kmr"] = "Northern Kurdish", ["kms"] = "Kamasau", ["kmt"] = "Kemtuik", ["kmu"] = "Kanite", ["kmv"] = "Karipúna Creole French", ["kmw"] = "Kumu", ["kmx"] = "Waboda", ["kmy"] = "Koma", ["kmz"] = "Khorasani Turkish", ["kn"] = "Kannada", ["kna"] = "Kanakuru", ["knb"] = "Lubuagan Kalinga", ["knd"] = "Konda", ["kne"] = "Kankanaey", ["knf"] = "Mankanya", ["kni"] = "Kanufi", ["knj"] = "Akatek", ["knk"] = "Kuranko", ["knl"] = "Keninjal", ["knm"] = "Kanamari", ["kno"] = "Kono (Sierra Leone)", ["knp"] = "Kwanja", ["knq"] = "Kintaq", ["knr"] = "Kaningra", ["kns"] = "Kensiu", ["knt"] = "Katukina", ["knu"] = "Kono (Guinea)", ["knv"] = "Tabo", ["knx"] = "Kendayan", ["kny"] = "Kanyok", ["knz"] = "Kalamsé", ["ko"] = "Korean", ["ko-ear"] = "Early Modern Korean", ["koa"] = "Konomala", ["koc"] = "Kpati", ["kod"] = "Kodi", ["koe"] = "Kacipo-Balesi", ["kof"] = "Kubi", ["kog"] = "Cogui", ["koh"] = "Koyo", ["koi"] = "Komi-Permyak", ["kok"] = "Konkani", ["kol"] = "Kol (New Guinea)", ["koo"] = "Konzo", ["kop"] = "Waube", ["koq"] = "Kota (Gabon)", ["kos"] = "Kosraean", ["kot"] = "Lagwan", ["kou"] = "Koke", ["kov"] = "Kudu-Camo", ["kow"] = "Kugama", ["koy"] = "Koyukon", ["koz"] = "Korak", ["kpa"] = "Kutto", ["kpb"] = "Mullu Kurumba", ["kpc"] = "Curripaco", ["kpd"] = "Koba", ["kpe"] = "Kpelle", ["kpf"] = "Komba", ["kpg"] = "Kapingamarangi", ["kph"] = "Kplang", ["kpi"] = "Kofei", ["kpj"] = "Karajá", ["kpk"] = "Kpan", ["kpl"] = "Kpala", ["kpm"] = "Koho", ["kpn"] = "Kepkiriwát", ["kpo"] = "Ikposo", ["kpp"] = "Paku Karen", ["kpq"] = "Korupun-Sela", ["kpr"] = "Korafe-Yegha", ["kps"] = "Tehit", ["kpt"] = "Karata", ["kpu"] = "Kafoa", ["kpv"] = "Komi-Zyrian", ["kpw"] = "Kobon", ["kpx"] = "Mountain Koiari", ["kpy"] = "Koryak", ["kpz"] = "Kupsabiny", ["kqa"] = "Mum", ["kqb"] = "Kovai", ["kqc"] = "Doromu-Koki", ["kqd"] = "Koy Sanjaq Surat", ["kqe"] = "Kalagan", ["kqf"] = "Kakabai", ["kqg"] = "Khe", ["kqh"] = "Kisankasa", ["kqi"] = "Koitabu", ["kqj"] = "Koromira", ["kqk"] = "Kotafon Gbe", ["kql"] = "Kyenele", ["kqm"] = "Khisa", ["kqn"] = "Kaonde", ["kqo"] = "Eastern Krahn", ["kqp"] = "Kimré", ["kqq"] = "Krenak", ["kqr"] = "Kimaragang", ["kqs"] = "Northern Kissi", ["kqt"] = "Klias River Kadazan", ["kqu"] = "Seroa", ["kqv"] = "Okolod", ["kqw"] = "Kandas", ["kqx"] = "Mser", ["kqy"] = "Koorete", ["kqz"] = "Korana", ["kr"] = "Kanuri", ["kra"] = "Kumhali", ["krb"] = "Karkin", ["krc"] = "Karachay-Balkar", ["krd"] = "Kairui-Midiki", ["kre"] = "Panará", ["krf"] = "Koro (Vanuatu)", ["krh"] = "Kurama", ["kri"] = "Krio", ["krj"] = "Kinaray-a", ["krk"] = "Kerek", ["krl"] = "Karelian", ["krm"] = "Krim", ["krn"] = "Sapo", ["kro-pro"] = "Proto-Kru", ["krp"] = "Korop", ["krr"] = "Kru'ng", ["krs"] = "Kresh", ["kru"] = "Kurukh", ["krv"] = "Kavet", ["krw"] = "Western Krahn", ["krx"] = "Karon", ["kry"] = "Kryts", ["krz"] = "Sota Kanum", ["ks"] = "Kashmiri", ["ksa"] = "Shuwa-Zamani", ["ksb"] = "Shambala", ["ksc"] = "Southern Kalinga", ["ksd"] = "Tolai", ["kse"] = "Kuni", ["ksf"] = "Bafia", ["ksg"] = "Kusaghe", ["ksi"] = "Krisa", ["ksj"] = "Uare", ["ksk"] = "Kansa", ["ksl"] = "Kumalu", ["ksm"] = "Kumba", ["ksn"] = "Kasiguranin", ["kso"] = "Kofa", ["ksp"] = "Kaba", ["ksq"] = "Kwaami", ["ksr"] = "Borong", ["kss"] = "Southern Kissi", ["kst"] = "Winyé", ["ksu"] = "Khamyang", ["ksv"] = "Kusu", ["ksw"] = "S'gaw Karen", ["ksx"] = "Kedang", ["ksy"] = "Kharia Thar", ["ksz"] = "Kodaku", ["kta"] = "Katua", ["ktb"] = "Kambaata", ["ktc"] = "Kholok", ["ktd"] = "Kokata", ["ktf"] = "Kwami", ["ktg"] = "Kalkatungu", ["kth"] = "Karanga", ["kti"] = "North Muyu", ["ktj"] = "Plapo Krumen", ["ktk"] = "Kaniet", ["ktl"] = "Koroshi", ["ktm"] = "Kurti", ["ktn"] = "Karitiâna", ["kto"] = "Kuot", ["ktp"] = "Kaduo", ["ktq"] = "Katabaga", ["ktr"] = "Kota Marudu Tinagas", ["kts"] = "South Muyu", ["ktt"] = "Ketum", ["ktu"] = "Kituba", ["ktv"] = "Eastern Katu", ["ktw"] = "Kato", ["ktx"] = "Kaxararí", ["kty"] = "Kango", ["ktz"] = "Juǀ'hoan", ["ku-pro"] = "Proto-Kurdish", ["kub"] = "Kutep", ["kuc"] = "Kwinsu", ["kud"] = "Auhelawa", ["kue"] = "Kuman", ["kuf"] = "Western Katu", ["kug"] = "Kupa", ["kuh"] = "Kushi", ["kui"] = "Kuikúro", ["kuj"] = "Kuria", ["kuk"] = "Kepo'", ["kul"] = "Kulere", ["kum"] = "Kumyk", ["kun"] = "Kunama", ["kuo"] = "Kumukio", ["kup"] = "Kunimaipa", ["kuq"] = "Karipuna", ["kus"] = "Kusaal", ["kut"] = "Kutenai", ["kuu"] = "Upper Kuskokwim", ["kuv"] = "Kur", ["kuw"] = "Kpagua", ["kux"] = "Kukatja", ["kuy"] = "Kuuku-Ya'u", ["kuz"] = "Kunza", ["kva"] = "Bagvalal", ["kvb"] = "Kubu", ["kvc"] = "Kove", ["kvd"] = "Kui (Indonesia)", ["kve"] = "Kalabakan", ["kvf"] = "Kabalai", ["kvg"] = "Kuni-Boazi", ["kvh"] = "Komodo", ["kvi"] = "Kwang", ["kvj"] = "Psikye", ["kvk"] = "Korean Sign Language", ["kvl"] = "Brek Karen", ["kvm"] = "Kendem", ["kvn"] = "Border Kuna", ["kvo"] = "Dobel", ["kvp"] = "Kompane", ["kvq"] = "Geba Karen", ["kvr"] = "Kerinci", ["kvt"] = "Lahta Karen", ["kvu"] = "Yinbaw Karen", ["kvv"] = "Kola", ["kvw"] = "Wersing", ["kvx"] = "Parkari Koli", ["kvy"] = "Yintale Karen", ["kvz"] = "Tsakwambo", ["kw"] = "Cornish", ["kwa"] = "Dâw", ["kwb"] = "Baa", ["kwc"] = "Likwala", ["kwd"] = "Kwaio", ["kwe"] = "Kwerba", ["kwf"] = "Kwara'ae", ["kwg"] = "Sara Kaba Deme", ["kwh"] = "Kowiai", ["kwi"] = "Awa-Cuaiquer", ["kwj"] = "Kwanga", ["kwk"] = "Kwak'wala", ["kwl"] = "Kofyar", ["kwm"] = "Kwambi", ["kwn"] = "Kwangali", ["kwo"] = "Kwomtari", ["kwp"] = "Kodia", ["kwq"] = "Kwak", ["kwr"] = "Kwer", ["kws"] = "Kwese", ["kwt"] = "Kwesten", ["kwu"] = "Kwakum", ["kwv"] = "Sara Kaba Náà", ["kww"] = "Kwinti", ["kwx"] = "Khirwar", ["kwz"] = "Kwadi", ["kxa"] = "Kairiru", ["kxb"] = "Krobu", ["kxc"] = "Khonso", ["kxd"] = "Brunei Malay", ["kxe"] = "Kakihum", ["kxf"] = "Manumanaw Karen", ["kxh"] = "Karo", ["kxi"] = "Keningau Murut", ["kxj"] = "Kulfa", ["kxk"] = "Zayein Karen", ["kxl"] = "Nepali Kurux", ["kxm"] = "Northern Khmer", ["kxn"] = "Kanowit", ["kxo"] = "Kanoé", ["kxp"] = "Wadiyara Koli", ["kxq"] = "Smärky Kanum", ["kxr"] = "Koro (New Guinea)", ["kxs"] = "Kangjia", ["kxt"] = "Koiwat", ["kxu"] = "Kui (India)", ["kxv"] = "Kuvi", ["kxw"] = "Konai", ["kxx"] = "Likuba", ["kxy"] = "Kayong", ["kxz"] = "Kerewo", ["ky"] = "Kyrgyz", ["kya"] = "Kwaya", ["kyb"] = "Butbut Kalinga", ["kyc"] = "Kyaka", ["kyd"] = "Karey", ["kye"] = "Krache", ["kyf"] = "Kouya", ["kyg"] = "Keyagana", ["kyh"] = "Karok", ["kyi"] = "Kiput", ["kyj"] = "Karao", ["kyk"] = "Kamayo", ["kyl"] = "Kalapuya", ["kym"] = "Kpatili", ["kyn"] = "Karolanos", ["kyo"] = "Kelon", ["kyp"] = "Kang", ["kyq"] = "Kenga", ["kyr"] = "Kuruáya", ["kys"] = "Baram Kayan", ["kyt"] = "Kayagar", ["kyu"] = "Western Kayah", ["kyv"] = "Kayort", ["kyw"] = "Kudmali", ["kyx"] = "Rapoisi", ["kyy"] = "Kambaira", ["kyz"] = "Kayabí", ["kza"] = "Western Karaboro", ["kzb"] = "Kaibobo", ["kzc"] = "Bondoukou Kulango", ["kzd"] = "Kadai", ["kze"] = "Kosena", ["kzf"] = "Da'a Kaili", ["kzg"] = "Kikai", ["kzh"] = "Dongolawi", ["kzi"] = "Kelabit", ["kzj"] = "Coastal Kadazan", ["kzk"] = "Kazukuru", ["kzl"] = "Kayeli", ["kzm"] = "Kais", ["kzn"] = "Kokola", ["kzo"] = "Kaningi", ["kzp"] = "Kaidipang", ["kzq"] = "Kaike", ["kzr"] = "Karang", ["kzs"] = "Sugut Dusun", ["kzt"] = "Tambunan Dusun", ["kzu"] = "Kayupulau", ["kzv"] = "Komyandaret", ["kzw"] = "Kariri", ["kzx"] = "Kamarian", ["kzy"] = "Kango-Sua", ["kzz"] = "Kalabra", ["la"] = "Latin", ["laa"] = "Lapuyan Subanun", ["lab"] = "Linear A", ["lac"] = "Lacandon", ["lad"] = "Ladino", ["lae"] = "Pattani", ["laf"] = "Lafofa", ["lag"] = "Langi", ["lah"] = "Lahnda", ["lai"] = "Lambya", ["laj"] = "Lango (Uganda)", ["lak"] = "Laka", ["lam"] = "Lamba", ["lan"] = "Laru", ["lap"] = "Kabba-Laka", ["laq"] = "Qabiao", ["lar"] = "Larteh", ["las"] = "Gur Lama", ["lau"] = "Laba", ["law"] = "Lauje", ["lax"] = "Tiwa", ["lay"] = "Lama Bai", ["laz"] = "Aribwatsa", ["lb"] = "Luxembourgish", ["lbb"] = "Label", ["lbc"] = "Lakkia", ["lbe"] = "Lak", ["lbf"] = "Tinani", ["lbg"] = "Laopang", ["lbi"] = "La'bi", ["lbj"] = "Ladakhi", ["lbk"] = "Central Bontoc", ["lbl"] = "Libon Bikol", ["lbm"] = "Lodhi", ["lbn"] = "Lamet", ["lbo"] = "Laven", ["lbq"] = "Wampar", ["lbr"] = "Northern Lorung", ["lbs"] = "Libyan Sign Language", ["lbt"] = "Lachi", ["lbu"] = "Labu", ["lbv"] = "Lavatbura-Lamusong", ["lbw"] = "Tolaki", ["lbx"] = "Lawangan", ["lby"] = "Lamu-Lamu", ["lbz"] = "Lardil", ["lcc"] = "Legenyem", ["lcd"] = "Lola", ["lce"] = "Loncong", ["lcf"] = "Lubu", ["lch"] = "Luchazi", ["lcl"] = "Lisela", ["lcm"] = "Tungag", ["lcp"] = "Western Lawa", ["lcq"] = "Luhu", ["lcs"] = "Lisabata-Nuniali", ["lda"] = "Kla", ["ldb"] = "Idun", ["ldd"] = "Luri (Nigeria)", ["ldg"] = "Lenyima", ["ldh"] = "Lamja-Dengsa-Tola", ["ldj"] = "Lemoro", ["ldk"] = "Leelau", ["ldl"] = "Kaan", ["ldm"] = "Landoma", ["ldn"] = "Láadan", ["ldo"] = "Loo", ["ldp"] = "Tso", ["ldq"] = "Lufu", ["lea"] = "Lega-Shabunda", ["leb"] = "Lala-Bisa", ["lec"] = "Leco", ["led"] = "Lendu", ["lee"] = "Lyélé", ["lef"] = "Lelemi", ["leh"] = "Lenje", ["lei"] = "Lemio", ["lej"] = "Lengola", ["lek"] = "Leipon", ["lel"] = "Lele (Congo)", ["lem"] = "Nomaande", ["len"] = "Honduran Lenca", ["leo"] = "Leti (Cameroon)", ["lep"] = "Lepcha", ["leq"] = "Lembena", ["ler"] = "Lenkau", ["les"] = "Lese", ["let"] = "Lesing-Gelimi", ["leu"] = "Kara (New Guinea)", ["lev"] = "Lamma", ["lew"] = "Ledo Kaili", ["lex"] = "Luang", ["ley"] = "Lemolang", ["lez"] = "Lezgi", ["lfa"] = "Lefa", ["lfn"] = "Lingua Franca Nova", ["lg"] = "Luganda", ["lga"] = "Lungga", ["lgb"] = "Laghu", ["lgg"] = "Lugbara", ["lgh"] = "Laghuu", ["lgi"] = "Lengilu", ["lgk"] = "Neverver", ["lgl"] = "Wala", ["lgm"] = "Lega-Mwenga", ["lgn"] = "Opuuo", ["lgq"] = "Logba", ["lgr"] = "Lengo", ["lgs"] = "Guinea-Bissau Sign Language", ["lgt"] = "Pahi", ["lgu"] = "Longgu", ["lgz"] = "Ligenza", ["lha"] = "Laha (Vietnam)", ["lhh"] = "Laha (Indonesia)", ["lhi"] = "Lahu Shi", ["lhl"] = "Lahul Lohar", ["lhn"] = "Lahanan", ["lhp"] = "Lhokpu", ["lhs"] = "Mlahsö", ["lht"] = "Lo-Toga", ["lhu"] = "Lahu", ["li"] = "Limburgish", ["lia"] = "West-Central Limba", ["lib"] = "Likum", ["lic"] = "Hlai", ["lid"] = "Nyindrou", ["lie"] = "Likila", ["lif"] = "Limbu", ["lig"] = "Ligbi", ["lih"] = "Lihir", ["lii"] = "Lingkhim", ["lij"] = "Ligurian", ["lik"] = "Lika", ["lil"] = "Lillooet", ["lio"] = "Liki", ["lip"] = "Sekpele", ["liq"] = "Libido", ["lir"] = "Liberian English", ["lis"] = "Lisu", ["liu"] = "Logorik", ["liv"] = "Livonian", ["liw"] = "Col", ["lix"] = "Liabuku", ["liy"] = "Banda-Bambari", ["liz"] = "Libinza", ["lja"] = "Golpa", ["lje"] = "Rampi", ["lji"] = "Laiyolo", ["ljl"] = "Li'o", ["ljp"] = "Lampung Api", ["ljw"] = "Yirandali", ["ljx"] = "Yuru", ["lka"] = "Lakalei", ["lkb"] = "Kabras", ["lkc"] = "Kucong", ["lkd"] = "Lakondê", ["lke"] = "Kenyi", ["lkh"] = "Lakha", ["lki"] = "Laki", ["lkj"] = "Remun", ["lkl"] = "Laeko-Libuat", ["lkm"] = "Kalaamaya", ["lkn"] = "Lakon", ["lko"] = "Khayo", ["lkr"] = "Päri", ["lks"] = "Kisa", ["lkt"] = "Lakota", ["lku"] = "Kungkari", ["lky"] = "Lokoya", ["lla"] = "Lala-Roba", ["llb"] = "Lolo", ["llc"] = "Lele (Guinea)", ["lld"] = "Ladin", ["lle"] = "Lele (New Guinea)", ["llf"] = "Hermit", ["llg"] = "Lole", ["llh"] = "Lamu", ["lli"] = "Teke-Laali", ["llj"] = "Ladji-Ladji", ["llk"] = "Lelak", ["lll"] = "Lilau", ["llm"] = "Lasalimu", ["lln"] = "Lele (Chad)", ["llo"] = "Khlor", ["llp"] = "North Efate", ["llq"] = "Lolak", ["lls"] = "Lithuanian Sign Language", ["llu"] = "Lau", ["llx"] = "Lauan", ["lma"] = "East Limba", ["lmb"] = "Merei", ["lmc"] = "Limilngan", ["lmd"] = "Lumun", ["lme"] = "Pévé", ["lmf"] = "South Lembata", ["lmg"] = "Lamogai", ["lmh"] = "Lambichhong", ["lmi"] = "Lombi", ["lmj"] = "West Lembata", ["lmk"] = "Lamkang", ["lml"] = "Raga", ["lmn"] = "Lambadi", ["lmo"] = "Lombard", ["lmp"] = "Limbum", ["lmq"] = "Lamatuka", ["lmr"] = "Lamalera", ["lmu"] = "Lamenu", ["lmv"] = "Lomaiviti", ["lmw"] = "Lake Miwok", ["lmx"] = "Laimbue", ["lmy"] = "Laboya", ["lmz"] = "Lumbee", ["ln"] = "Lingala", ["lna"] = "Langbashe", ["lnb"] = "Mbalanhu", ["lnd"] = "Lun Bawang", ["lnh"] = "Lanoh", ["lni"] = "Daantanai'", ["lnj"] = "Linngithigh", ["lnl"] = "South Central Banda", ["lnm"] = "Langam", ["lnn"] = "Lorediakarkar", ["lno"] = "Lango (Sudan)", ["lns"] = "Lamnso'", ["lnu"] = "Longuda", ["lnw"] = "Lanima", ["lo"] = "Lao", ["loa"] = "Loloda", ["lob"] = "Lobi", ["loc"] = "Inonhan", ["lod"] = "Berawan", ["loe"] = "Saluan", ["lof"] = "Logol", ["log"] = "Logo", ["loh"] = "Narim", ["loi"] = "Lomakka", ["loj"] = "Lou", ["lok"] = "Loko", ["lol"] = "Mongo", ["lom"] = "Looma", ["lon"] = "Malawi Lomwe", ["loo"] = "Lombo", ["lop"] = "Lopa", ["loq"] = "Lobala", ["lor"] = "Téén", ["los"] = "Loniu", ["lot"] = "Lotuko", ["lou"] = "Louisiana Creole", ["lov"] = "Lopi", ["low"] = "Tampias Lobu", ["lox"] = "Loun", ["loz"] = "Lozi", ["lpa"] = "Lelepa", ["lpe"] = "Lepki", ["lpn"] = "Long Phuri Naga", ["lpo"] = "Lipo", ["lpx"] = "Lopit", ["lra"] = "Rara Bakati'", ["lrc"] = "Northern Luri", ["lre"] = "Laurentian", ["lrg"] = "Laragia", ["lri"] = "Marachi", ["lrk"] = "Loarki", ["lrl"] = "Larestani", ["lrm"] = "Marama", ["lrn"] = "Lorang", ["lro"] = "Laro", ["lrr"] = "Southern Lorung", ["lrt"] = "Larantuka Malay", ["lrv"] = "Larevat", ["lrz"] = "Lemerig", ["lsa"] = "Lasgerdi", ["lsd"] = "Lishana Deni", ["lse"] = "Lusengo", ["lsh"] = "Lish", ["lsi"] = "Lashi", ["lsl"] = "Latvian Sign Language", ["lsm"] = "Saamia", ["lso"] = "Laos Sign Language", ["lsp"] = "Panamanian Sign Language", ["lsr"] = "Aruop", ["lss"] = "Lasi", ["lst"] = "Trinidad and Tobago Sign Language", ["lsy"] = "Mauritian Sign Language", ["lt"] = "Lithuanian", ["ltc"] = "Middle Chinese", ["ltg"] = "Latgalian", ["lti"] = "Leti (Indonesia)", ["ltn"] = "Latundê", ["lto"] = "Olutsotso", ["lts"] = "Lutachoni", ["ltu"] = "Latu", ["lu"] = "Luba-Katanga", ["lua"] = "Luba-Kasai", ["luc"] = "Aringa", ["lud"] = "Ludian", ["lue"] = "Luvale", ["luf"] = "Laua", ["lui"] = "Luiseño", ["luj"] = "Luna", ["luk"] = "Lunanakha", ["lul"] = "Olu'bo", ["lum"] = "Luimbi", ["lun"] = "Lunda", ["luo"] = "Luo", ["lup"] = "Lumbu", ["luq"] = "Lucumí", ["lur"] = "Laura", ["lus"] = "Mizo", ["lut"] = "Lushootseed", ["luu"] = "Lumba-Yakkha", ["luv"] = "Luwati", ["luy"] = "Luhya", ["luz"] = "Southern Luri", ["lv"] = "Latvian", ["lva"] = "Maku'a", ["lvi"] = "Lawi", ["lvk"] = "Lavukaleve", ["lvu"] = "Levuka", ["lwa"] = "Lwalu", ["lwe"] = "Lewo Eleng", ["lwg"] = "Wanga", ["lwh"] = "White Lachi", ["lwl"] = "Eastern Lawa", ["lwm"] = "Laomian", ["lwo"] = "Luwo", ["lws"] = "Malawian Sign Language", ["lwt"] = "Lewotobi", ["lwu"] = "Lawu", ["lww"] = "Lewo", ["lya"] = "Layakha", ["lyg"] = "Lyngngam", ["lyn"] = "Luyana", ["lzh"] = "Literary Chinese", ["lzl"] = "Litzlitz", ["lzn"] = "Leinong Naga", ["lzz"] = "Laz", ["maa"] = "San Jerónimo Tecóatl Mazatec", ["mab"] = "Yutanduchi Mixtec", ["mad"] = "Madurese", ["mae"] = "Bo-Rukul", ["maf"] = "Mafa", ["mag"] = "Magahi", ["mai"] = "Maithili", ["maj"] = "Jalapa de Díaz Mazatec", ["mak"] = "Makasar", ["mam"] = "Mam", ["man"] = "Mandingo", ["map-ata-pro"] = "Proto-Atayalic", ["map-bms"] = "Banyumasan", ["map-pro"] = "Proto-Austronesian", ["maq"] = "Chiquihuitlán Mazatec", ["mas"] = "Maasai", ["mat"] = "Matlatzinca", ["mau"] = "Huautla Mazatec", ["mav"] = "Sateré-Mawé", ["maw"] = "Mampruli", ["max"] = "North Moluccan Malay", ["maz"] = "Central Mazahua", ["mba"] = "Higaonon", ["mbb"] = "Western Bukidnon Manobo", ["mbc"] = "Macushi", ["mbd"] = "Dibabawon Manobo", ["mbe"] = "Molale", ["mbf"] = "Baba Malay", ["mbh"] = "Mangseng", ["mbi"] = "Ilianen Manobo", ["mbj"] = "Nadëb", ["mbk"] = "Malol", ["mbl"] = "Maxakalí", ["mbm"] = "Ombamba", ["mbn"] = "Macaguán", ["mbo"] = "Mbo (Cameroon)", ["mbp"] = "Wiwa", ["mbq"] = "Maisin", ["mbr"] = "Nukak Makú", ["mbs"] = "Sarangani Manobo", ["mbt"] = "Matigsalug Manobo", ["mbu"] = "Mbula-Bwazza", ["mbv"] = "Mbulungish", ["mbw"] = "Maring", ["mbx"] = "Sepik Mari", ["mby"] = "Memoni", ["mbz"] = "Amoltepec Mixtec", ["mca"] = "Maca", ["mcb"] = "Machiguenga", ["mcc"] = "Bitur", ["mcd"] = "Sharanahua", ["mce"] = "Itundujia Mixtec", ["mcf"] = "Matsés", ["mcg"] = "Mapoyo", ["mch"] = "Maquiritari", ["mci"] = "Mese", ["mcj"] = "Mvanip", ["mck"] = "Mbunda", ["mcl"] = "Macaguaje", ["mcm"] = "Kristang", ["mcn"] = "Masana", ["mco"] = "Coatlán Mixe", ["mcp"] = "Makaa", ["mcq"] = "Ese", ["mcr"] = "Menya", ["mcs"] = "Mambai", ["mcu"] = "Cameroon Mambila", ["mcv"] = "Minanibai", ["mcw"] = "Mawa", ["mcx"] = "Mpiemo", ["mcy"] = "South Watut", ["mcz"] = "Mawan", ["mda"] = "Mada (Nigeria)", ["mdb"] = "Morigi", ["mdc"] = "Male", ["mdd"] = "Mbum", ["mde"] = "Bura Mabang", ["mdf"] = "Moksha", ["mdg"] = "Massalat", ["mdh"] = "Maguindanao", ["mdi"] = "Mamvu", ["mdj"] = "Mangbetu", ["mdk"] = "Mangbutu", ["mdl"] = "Maltese Sign Language", ["mdm"] = "Mayogo", ["mdn"] = "Mbati", ["mdp"] = "Mbala", ["mdq"] = "Mbole", ["mdr"] = "Mandar", ["mds"] = "Maria", ["mdt"] = "Mbere", ["mdu"] = "Mboko", ["mdv"] = "Santa Lucía Monteverde Mixtec", ["mdw"] = "Mbosi", ["mdx"] = "Dizin", ["mdy"] = "Maale", ["mdz"] = "Suruí Do Pará", ["mea"] = "Menka", ["meb"] = "Ikobi-Mena", ["mec"] = "Mara", ["med"] = "Melpa", ["mee"] = "Mengen", ["mef"] = "Megam", ["meg"] = "Mea", ["meh"] = "Southwestern Tlaxiaco Mixtec", ["mei"] = "Midob", ["mej"] = "Meyah", ["mek"] = "Mekeo", ["mel"] = "Central Melanau", ["mem"] = "Mangala", ["men"] = "Mende", ["meo"] = "Kedah Malay", ["mep"] = "Miriwung", ["meq"] = "Merey", ["mer"] = "Meru", ["mes"] = "Masmaje", ["met"] = "Mato", ["meu"] = "Motu", ["mev"] = "Mano", ["mew"] = "Maaka", ["mey"] = "Hassaniya", ["mez"] = "Menominee", ["mfa"] = "Pattani Malay", ["mfb"] = "Bangka", ["mfc"] = "Mba", ["mfd"] = "Mendankwe-Nkwen", ["mfe"] = "Mauritian Creole", ["mff"] = "Naki", ["mfg"] = "Mixifore", ["mfh"] = "Matal", ["mfi"] = "Wandala", ["mfj"] = "Mefele", ["mfk"] = "North Mofu", ["mfl"] = "Putai", ["mfm"] = "Marghi South", ["mfn"] = "Cross River Mbembe", ["mfo"] = "Mbe", ["mfp"] = "Makassar Malay", ["mfq"] = "Moba", ["mfr"] = "Marrithiyel", ["mfs"] = "Mexican Sign Language", ["mft"] = "Mokerang", ["mfu"] = "Mbwela", ["mfv"] = "Mandjak", ["mfw"] = "Mulaha", ["mfx"] = "Melo", ["mfy"] = "Mayo", ["mfz"] = "Mabaan", ["mg"] = "Malagasy", ["mga"] = "Middle Irish", ["mgb"] = "Mararit", ["mgc"] = "Morokodo", ["mgd"] = "Moru", ["mge"] = "Mango", ["mgf"] = "Maklew", ["mgg"] = "Mpongmpong", ["mgh"] = "Makhuwa-Meetto", ["mgi"] = "Jili", ["mgj"] = "Abureni", ["mgk"] = "Mawes", ["mgl"] = "Maleu-Kilenge", ["mgm"] = "Mambae", ["mgn"] = "Mbangi", ["mgo"] = "Meta'", ["mgp"] = "Eastern Magar", ["mgq"] = "Malila", ["mgr"] = "Mambwe-Lungu", ["mgs"] = "Manda (Tanzania)", ["mgt"] = "Mongol", ["mgu"] = "Mailu", ["mgv"] = "Matengo", ["mgw"] = "Matumbi", ["mgy"] = "Mbunga", ["mgz"] = "Mbugwe", ["mh"] = "Marshallese", ["mha"] = "Manda (India)", ["mhb"] = "Mahongwe", ["mhc"] = "Mocho", ["mhd"] = "Mbugu", ["mhe"] = "Besisi", ["mhf"] = "Mamaa", ["mhg"] = "Margu", ["mhi"] = "Ma'di", ["mhj"] = "Mogholi", ["mhk"] = "Mungaka", ["mhl"] = "Mauwake", ["mhm"] = "Makhuwa-Moniga", ["mhn"] = "Mòcheno", ["mho"] = "Mashi", ["mhp"] = "Balinese Malay", ["mhq"] = "Mandan", ["mhr"] = "Eastern Mari", ["mhs"] = "Buru (Indonesia)", ["mht"] = "Mandahuaca", ["mhu"] = "Taraon", ["mhw"] = "Mbukushu", ["mhx"] = "Lhao Vo", ["mhy"] = "Ma'anyan", ["mhz"] = "Mor (Austronesian)", ["mi"] = "Maori", ["mia"] = "Miami", ["mib"] = "Atatláhuca Mixtec", ["mic"] = "Mi'kmaq", ["mid"] = "Mandaic", ["mie"] = "Ocotepec Mixtec", ["mif"] = "Mofu-Gudur", ["mig"] = "San Miguel el Grande Mixtec", ["mih"] = "Chayuco Mixtec", ["mii"] = "Chigmecatitlán Mixtec", ["mij"] = "Mungbam", ["mik"] = "Mikasuki", ["mil"] = "Peñoles Mixtec", ["mim"] = "Alacatlatzala Mixtec", ["min"] = "Minangkabau", ["mio"] = "Pinotepa Nacional Mixtec", ["mip"] = "Apasco-Apoala Mixtec", ["miq"] = "Miskito", ["mir"] = "Isthmus Mixe", ["mit"] = "Southern Puebla Mixtec", ["miu"] = "Cacaloxtepec Mixtec", ["miw"] = "Akoye", ["mix"] = "Mixtepec Mixtec", ["miy"] = "Ayutla Mixtec", ["miz"] = "Coatzospan Mixtec", ["mjb"] = "Makalero", ["mjc"] = "San Juan Colorado Mixtec", ["mjd"] = "Northwest Maidu", ["mje"] = "Muskum", ["mji"] = "Kim Mun", ["mjj"] = "Mawak", ["mjk"] = "Matukar", ["mjl"] = "Mandeali", ["mjm"] = "Medebur", ["mjn"] = "Mebu", ["mjo"] = "Malankuravan", ["mjp"] = "Malapandaram", ["mjq"] = "Malaryan", ["mjr"] = "Malavedan", ["mjs"] = "Miship", ["mjt"] = "Sawriya Paharia", ["mju"] = "Manna-Dora", ["mjv"] = "Mannan", ["mjw"] = "Karbi", ["mjx"] = "Mahali", ["mjy"] = "Mahican", ["mjz"] = "Majhi", ["mk"] = "Macedonian", ["mka"] = "Mbre", ["mkb"] = "Mal Paharia", ["mkc"] = "Siliput", ["mke"] = "Mawchi", ["mkf"] = "Miya", ["mkg"] = "Mak (China)", ["mkh-asl-pro"] = "Proto-Aslian", ["mkh-ban-pro"] = "Proto-Bahnaric", ["mkh-kat-pro"] = "Proto-Katuic", ["mkh-khm-pro"] = "Proto-Khmuic", ["mkh-kmr-pro"] = "Proto-Khmeric", ["mkh-mmn"] = "Middle Mon", ["mkh-mnc-pro"] = "Proto-Monic", ["mkh-mvi"] = "Middle Vietnamese", ["mkh-pal-pro"] = "Proto-Palaungic", ["mkh-pea-pro"] = "Proto-Pearic", ["mkh-pkn-pro"] = "Proto-Pakanic", ["mkh-pro"] = "Proto-Mon-Khmer", ["mkh-vie-pro"] = "Proto-Vietic", ["mki"] = "Dhatki", ["mkj"] = "Mokilese", ["mkk"] = "Byep", ["mkl"] = "Mokole", ["mkm"] = "Moklen", ["mkn"] = "Kupang Malay", ["mko"] = "Mingang Doso", ["mkp"] = "Moikodi", ["mkq"] = "Bay Miwok", ["mkr"] = "Malas", ["mks"] = "Silacayoapan Mixtec", ["mkt"] = "Vamale", ["mku"] = "Konyanka Maninka", ["mkv"] = "Mafea", ["mkx"] = "Cinamiguin Manobo", ["mky"] = "East Makian", ["mkz"] = "Makasae", ["ml"] = "Malayalam", ["mla"] = "Tamambo", ["mlb"] = "Mbule", ["mlc"] = "Caolan", ["mle"] = "Manambu", ["mlf"] = "Mal", ["mlh"] = "Mape", ["mli"] = "Malimpung", ["mlj"] = "Miltu", ["mlk"] = "Ilwana", ["mll"] = "Malua Bay", ["mlm"] = "Mulam", ["mln"] = "Malango", ["mlo"] = "Mlomp", ["mlp"] = "Bargam", ["mlq"] = "Western Maninkakan", ["mlr"] = "Vame", ["mls"] = "Masalit", ["mlu"] = "To'abaita", ["mlv"] = "Mwotlap", ["mlw"] = "Moloko", ["mlx"] = "Malfaxal", ["mlz"] = "Malaynon", ["mma"] = "Mama", ["mmb"] = "Momina", ["mmc"] = "Michoacán Mazahua", ["mmd"] = "Maonan", ["mme"] = "Mae", ["mmf"] = "Mundat", ["mmg"] = "North Ambrym", ["mmh"] = "Mehináku", ["mmi"] = "Musar", ["mmj"] = "Majhwar", ["mmk"] = "Mukha-Dora", ["mml"] = "Man Met", ["mmm"] = "Maii", ["mmn"] = "Mamanwa", ["mmo"] = "Mangga Buang", ["mmp"] = "Musan", ["mmq"] = "Aisi", ["mmr"] = "Western Xiangxi Miao", ["mmt"] = "Malalamai", ["mmu"] = "Mmaala", ["mmv"] = "Miriti", ["mmw"] = "Emae", ["mmx"] = "Madak", ["mmy"] = "Migaama", ["mmz"] = "Mabaale", ["mn"] = "Mongolian", ["mna"] = "Mbula", ["mnb"] = "Muna", ["mnc"] = "Manchu", ["mnd"] = "Mondé", ["mne"] = "Naba", ["mnf"] = "Mundani", ["mng"] = "Eastern Mnong", ["mnh"] = "Mono (Congo)", ["mni"] = "Manipuri", ["mnj"] = "Munji", ["mnk"] = "Mandinka", ["mnl"] = "Tiale", ["mnm"] = "Mapena", ["mnn"] = "Southern Mnong", ["mnp"] = "Min Bei", ["mnq"] = "Minriq", ["mnr"] = "Mono (California)", ["mns"] = "Mansi", ["mnt"] = "Maykulan", ["mnu"] = "Mer", ["mnv"] = "Rennellese", ["mnw"] = "Mon", ["mnw-tha"] = "Thai Mon", ["mnx"] = "Manikion", ["mny"] = "Manyawa", ["mnz"] = "Moni", ["moa"] = "Mwan", ["moc"] = "Mocoví", ["mod"] = "Mobilian", ["moe"] = "Montagnais", ["mog"] = "Mongondow", ["moh"] = "Mohawk", ["moi"] = "Mboi", ["moj"] = "Monzombo", ["mok"] = "Morori", ["mom"] = "Monimbo", ["moo"] = "Monom", ["mop"] = "Mopan Maya", ["moq"] = "Mor (Papuan)", ["mor"] = "Moro", ["mos"] = "Moore", ["mot"] = "Barí", ["mou"] = "Mogum", ["mov"] = "Mojave", ["mow"] = "Moi (Congo)", ["mox"] = "Molima", ["moy"] = "Shekkacho", ["moz"] = "Mukulu", ["mpa"] = "Mpoto", ["mpb"] = "Mullukmulluk", ["mpc"] = "Mangarayi", ["mpd"] = "Machinere", ["mpe"] = "Majang", ["mpg"] = "Marba", ["mph"] = "Maung", ["mpi"] = "Mpade", ["mpj"] = "Martu Wangka", ["mpk"] = "Mbara (Chad)", ["mpl"] = "Middle Watut", ["mpm"] = "Yosondúa Mixtec", ["mpn"] = "Mindiri", ["mpo"] = "Miu", ["mpp"] = "Migabac", ["mpq"] = "Matís", ["mpr"] = "Vangunu", ["mps"] = "Dadibi", ["mpt"] = "Mian", ["mpu"] = "Makuráp", ["mpv"] = "Mungkip", ["mpw"] = "Mapidian", ["mpx"] = "Misima-Paneati", ["mpy"] = "Mapia", ["mpz"] = "Mpi", ["mqa"] = "Maba", ["mqb"] = "Mbuko", ["mqc"] = "Mangole", ["mqe"] = "Matepi", ["mqf"] = "Momuna", ["mqg"] = "Kota Bangun Kutai Malay", ["mqh"] = "Tlazoyaltepec Mixtec", ["mqi"] = "Mariri", ["mqj"] = "Mamasa", ["mqk"] = "Rajah Kabunsuwan Manobo", ["mql"] = "Mbelime", ["mqm"] = "South Marquesan", ["mqn"] = "Moronene", ["mqo"] = "Modole", ["mqp"] = "Manipa", ["mqq"] = "Minokok", ["mqr"] = "Mander", ["mqs"] = "West Makian", ["mqt"] = "Mok", ["mqu"] = "Mandari", ["mqv"] = "Mosimo", ["mqw"] = "Murupi", ["mqx"] = "Mamuju", ["mqy"] = "Manggarai", ["mqz"] = "Malasanga", ["mr"] = "Marathi", ["mra"] = "Mlabri", ["mrb"] = "Marino", ["mrc"] = "Maricopa", ["mrd"] = "Western Magar", ["mre"] = "Martha's Vineyard Sign Language", ["mrf"] = "Elseng", ["mrg"] = "Mising", ["mrh"] = "Mara Chin", ["mrj"] = "Western Mari", ["mrk"] = "Hmwaveke", ["mrl"] = "Mortlockese", ["mrm"] = "Merlav", ["mrn"] = "Cheke Holo", ["mro"] = "Mru", ["mrp"] = "Morouas", ["mrq"] = "North Marquesan", ["mrr"] = "Hill Maria", ["mrs"] = "Maragus", ["mrt"] = "Margi", ["mru"] = "Mono (Cameroon)", ["mrv"] = "Mangarevan", ["mrw"] = "Maranao", ["mrx"] = "Dineor", ["mry"] = "Karaga Mandaya", ["mrz"] = "Marind", ["ms"] = "Malay", ["msb"] = "Masbatenyo", ["msc"] = "Sankaran Maninka", ["msd"] = "Yucatec Maya Sign Language", ["mse"] = "Musey", ["msf"] = "Mekwei", ["msg"] = "Moraid", ["msi"] = "Sabah Malay", ["msj"] = "Ma", ["msk"] = "Mansaka", ["msl"] = "Molof", ["msm"] = "Agusan Manobo", ["msn"] = "Vurës", ["mso"] = "Mombum", ["msp"] = "Maritsauá", ["msq"] = "Caac", ["msr"] = "Mongolian Sign Language", ["mss"] = "West Masela", ["msu"] = "Musom", ["msv"] = "Maslam", ["msw"] = "Mansoanka", ["msx"] = "Moresada", ["msy"] = "Aruamu", ["msz"] = "Momare", ["mt"] = "Maltese", ["mta"] = "Cotabato Manobo", ["mtb"] = "Anyin Morofo", ["mtc"] = "Munit", ["mtd"] = "Mualang", ["mte"] = "Alu", ["mtf"] = "Murik (New Guinea)", ["mtg"] = "Una", ["mth"] = "Munggui", ["mti"] = "Maiwa (New Guinea)", ["mtj"] = "Moskona", ["mtk"] = "Mbe'", ["mtl"] = "Montol", ["mtm"] = "Mator", ["mtn"] = "Matagalpa", ["mto"] = "Totontepec Mixe", ["mtp"] = "Wichí Lhamtés Nocten", ["mtq"] = "Muong", ["mtr"] = "Mewari", ["mts"] = "Yora", ["mtt"] = "Mota", ["mtu"] = "Tututepec Mixtec", ["mtv"] = "Asaro'o", ["mtw"] = "Magahat", ["mtx"] = "Tidaá Mixtec", ["mty"] = "Nabi", ["mua"] = "Mundang", ["mub"] = "Mubi", ["muc"] = "Mbu'", ["mud"] = "Mednyj Aleut", ["mue"] = "Media Lengua", ["mug"] = "Musgu", ["muh"] = "Mündü", ["mui"] = "Musi", ["muj"] = "Mabire", ["mul"] = "Translingual", ["mum"] = "Maiwala", ["mun-pro"] = "Proto-Munda", ["muo"] = "Nyong", ["mup"] = "Malvi", ["muq"] = "Eastern Xiangxi Miao", ["mur"] = "Murle", ["mus"] = "Creek", ["mut"] = "Western Muria", ["muu"] = "Yaaku", ["muv"] = "Muthuvan", ["mux"] = "Bo-Ung", ["muy"] = "Muyang", ["muz"] = "Mursi", ["mva"] = "Manam", ["mvb"] = "Mattole", ["mvd"] = "Mamboru", ["mvg"] = "Yucuañe Mixtec", ["mvh"] = "Mire", ["mvi"] = "Miyako", ["mvk"] = "Mekmek", ["mvl"] = "Mbara (Australia)", ["mvm"] = "Muya", ["mvn"] = "Minaveha", ["mvo"] = "Marovo", ["mvp"] = "Duri", ["mvq"] = "Moere", ["mvr"] = "Marau", ["mvs"] = "Massep", ["mvt"] = "Mpotovoro", ["mvu"] = "Marfa", ["mvv"] = "Tagal Murut", ["mvw"] = "Machinga", ["mvx"] = "Meoswar", ["mvy"] = "Indus Kohistani", ["mvz"] = "Mesqan", ["mwa"] = "Mwatebu", ["mwb"] = "Juwal", ["mwc"] = "Are", ["mwe"] = "Mwera", ["mwf"] = "Murrinh-Patha", ["mwg"] = "Aiklep", ["mwh"] = "Mouk-Aria", ["mwi"] = "Labo", ["mwk"] = "Kita Maninkakan", ["mwl"] = "Mirandese", ["mwm"] = "Sar", ["mwn"] = "Nyamwanga", ["mwo"] = "Central Maewo", ["mwp"] = "Kala Lagaw Ya", ["mwq"] = "Mün Chin", ["mwr"] = "Marwari", ["mws"] = "Mwimbi-Muthambi", ["mwt"] = "Moken", ["mwu"] = "Mittu", ["mwv"] = "Mentawai", ["mww"] = "White Hmong", ["mwz"] = "Moingi", ["mxa"] = "Northwest Oaxaca Mixtec", ["mxb"] = "Tezoatlán Mixtec", ["mxd"] = "Modang", ["mxe"] = "Mele-Fila", ["mxf"] = "Malgbe", ["mxg"] = "Mbangala", ["mxh"] = "Mvuba", ["mxi"] = "Mozarabic", ["mxj"] = "Miju", ["mxk"] = "Monumbo", ["mxl"] = "Maxi Gbe", ["mxm"] = "Meramera", ["mxn"] = "Moi (Indonesia)", ["mxo"] = "Mbowe", ["mxp"] = "Tlahuitoltepec Mixe", ["mxq"] = "Juquila Mixe", ["mxr"] = "Murik (Malaysia)", ["mxs"] = "Huitepec Mixtec", ["mxt"] = "Jamiltepec Mixtec", ["mxu"] = "Mada (Cameroon)", ["mxv"] = "Metlatónoc Mixtec", ["mxw"] = "Namo", ["mxx"] = "Mahou", ["mxy"] = "Southeastern Nochixtlán Mixtec", ["mxz"] = "Central Masela", ["my"] = "Burmese", ["myb"] = "Mbay", ["myc"] = "Mayeka", ["mye"] = "Myene", ["myf"] = "Bambassi", ["myg"] = "Manta", ["myh"] = "Makah", ["myj"] = "Mangayat", ["myk"] = "Mamara Senoufo", ["myl"] = "Moma", ["mym"] = "Me'en", ["myn-chl"] = "Ch'olti'", ["myn-pro"] = "Proto-Mayan", ["myo"] = "Anfillo", ["myp"] = "Pirahã", ["myr"] = "Muniche", ["mys"] = "Mesmes", ["myu"] = "Mundurukú", ["myv"] = "Erzya", ["myw"] = "Muyuw", ["myx"] = "Masaba", ["myy"] = "Macuna", ["myz"] = "Classical Mandaic", ["mza"] = "Santa María Zacatepec Mixtec", ["mzb"] = "Northern Saharan Berber", ["mzc"] = "Madagascar Sign Language", ["mzd"] = "Malimba", ["mze"] = "Morawa", ["mzg"] = "Monastic Sign Language", ["mzh"] = "Wichí Lhamtés Güisnay", ["mzi"] = "Ixcatlán Mazatec", ["mzj"] = "Manya", ["mzk"] = "Nigeria Mambila", ["mzl"] = "Mazatlán Mixe", ["mzm"] = "Mumuye", ["mzn"] = "Mazanderani", ["mzo"] = "Matipuhy", ["mzp"] = "Movima", ["mzq"] = "Mori Atas", ["mzr"] = "Marúbo", ["mzs"] = "Macanese", ["mzt"] = "Mintil", ["mzu"] = "Inapang", ["mzv"] = "Manza", ["mzw"] = "Deg", ["mzx"] = "Mawayana", ["mzy"] = "Mozambican Sign Language", ["mzz"] = "Maiadomu", ["na"] = "Nauruan", ["naa"] = "Namla", ["nab"] = "Nambikwara", ["nac"] = "Narak", ["nae"] = "Naka'ela", ["naf"] = "Nabak", ["nag"] = "Naga Pidgin", ["nah"] = "Nahuatl", ["nai-ala"] = "Alazapa", ["nai-bay"] = "Bayogoula", ["nai-bvy"] = "Buena Vista Yokuts", ["nai-cal"] = "Calusa", ["nai-chi"] = "Chiquimulilla", ["nai-chu-pro"] = "Proto-Chumash", ["nai-cig"] = "Ciguayo", ["nai-ckn-pro"] = "Proto-Chinookan", ["nai-dly"] = "Delta Yokuts", ["nai-gsy"] = "Gashowu", ["nai-guz"] = "Guazacapán", ["nai-hit"] = "Hitchiti", ["nai-ipa"] = "Ipai", ["nai-jtp"] = "Jutiapa", ["nai-jum"] = "Jumaytepeque", ["nai-kat"] = "Kathlamet", ["nai-klp-pro"] = "Proto-Kalapuyan", ["nai-knm"] = "Konomihu", ["nai-kry"] = "Kings River Yokuts", ["nai-kum"] = "Kumeyaay", ["nai-mac"] = "Macoris", ["nai-mdu-pro"] = "Proto-Maidun", ["nai-miz-pro"] = "Proto-Mixe-Zoque", ["nai-mus-pro"] = "Proto-Muskogean", ["nai-nao"] = "Naolan", ["nai-nrs"] = "New River Shasta", ["nai-nvy"] = "Northern Valley Yokuts", ["nai-okw"] = "Okwanuchu", ["nai-per"] = "Pericú", ["nai-pic"] = "Picuris", ["nai-plp-pro"] = "Proto-Plateau Penutian", ["nai-ply"] = "Palewyami", ["nai-pom-pro"] = "Proto-Pomo", ["nai-qng"] = "Quinigua", ["nai-sca-pro"] = "Proto-Siouan-Catawban", ["nai-sin"] = "Sinacantán", ["nai-sln"] = "Salvadoran Lenca", ["nai-spt"] = "Sahaptin", ["nai-svy"] = "Southern Valley Yokuts", ["nai-tap"] = "Tapachultec", ["nai-taw"] = "Tawasa", ["nai-teq"] = "Tequistlatec", ["nai-tip"] = "Tipai", ["nai-tky"] = "Tule-Kaweah Yokuts", ["nai-tot-pro"] = "Proto-Totozoquean", ["nai-tsi-pro"] = "Proto-Tsimshianic", ["nai-utn-pro"] = "Proto-Utian", ["nai-wai"] = "Waikuri", ["nai-yup"] = "Yupiltepeque", ["naj"] = "Nalu", ["nak"] = "Nakanai", ["nal"] = "Nalik", ["nam"] = "Ngan'gityemerri", ["nan"] = "Min Nan", ["nao"] = "Naaba", ["nap"] = "Neapolitan", ["naq"] = "Khoekhoe", ["nar"] = "Iguta", ["nas"] = "Nasioi", ["nat"] = "Hungworo", ["naw"] = "Nawuri", ["nax"] = "Nakwi", ["nay"] = "Ngarrindjeri", ["naz"] = "Coatepec Nahuatl", ["nb"] = "Norwegian Bokmål", ["nba"] = "Nyemba", ["nbb"] = "Ndoe", ["nbc"] = "Chang", ["nbd"] = "Ngbinda", ["nbe"] = "Konyak Naga", ["nbg"] = "Nagarchal", ["nbh"] = "Ngamo", ["nbi"] = "Mao Naga", ["nbj"] = "Ngarinman", ["nbk"] = "Nake", ["nbm"] = "Ngbaka Ma'bo", ["nbn"] = "Kuri", ["nbo"] = "Nkukoli", ["nbp"] = "Nnam", ["nbq"] = "Nggem", ["nbr"] = "Numana", ["nbs"] = "Namibian Sign Language", ["nbt"] = "Na", ["nbu"] = "Rongmei Naga", ["nbv"] = "Ngamambo", ["nbw"] = "Southern Ngbandi", ["nby"] = "Ningera", ["nca"] = "Iyo", ["ncb"] = "Central Nicobarese", ["ncc"] = "Ponam", ["ncd"] = "Nachering", ["nce"] = "Yale", ["ncf"] = "Notsi", ["ncg"] = "Nisga'a", ["nch"] = "Central Huasteca Nahuatl", ["nci"] = "Classical Nahuatl", ["ncj"] = "Northern Puebla Nahuatl", ["nck"] = "Nakara", ["ncl"] = "Michoacán Nahuatl", ["ncm"] = "Nambo", ["ncn"] = "Nauna", ["nco"] = "Sibe", ["ncr"] = "Ncane", ["ncs"] = "Nicaraguan Sign Language", ["nct"] = "Chothe Naga", ["ncu"] = "Chumburung", ["ncx"] = "Central Puebla Nahuatl", ["ncz"] = "Natchez", ["nd"] = "Northern Ndebele", ["nda"] = "Ndasa", ["ndb"] = "Kenswei Nsei", ["ndc"] = "Ndau", ["ndd"] = "Nde-Nsele-Nta", ["ndf"] = "Nadruvian", ["ndg"] = "Ndengereko", ["ndh"] = "Ndali", ["ndi"] = "Chamba Leko", ["ndj"] = "Ndamba", ["ndk"] = "Ndaka", ["ndl"] = "Ndolo", ["ndm"] = "Ndam", ["ndn"] = "Ngundi", ["ndp"] = "Ndo", ["ndq"] = "Ndombe", ["ndr"] = "Ndoola", ["nds"] = "Low German", ["nds-de"] = "German Low German", ["nds-nl"] = "Dutch Low Saxon", ["ndt"] = "Ndunga", ["ndu"] = "Dugun", ["ndv"] = "Ndut", ["ndw"] = "Ndobo", ["ndx"] = "Nduga", ["ndy"] = "Lutos", ["ndz"] = "Ndogo", ["ne"] = "Nepali", ["nea"] = "Eastern Ngad'a", ["neb"] = "Toura", ["nec"] = "Nedebang", ["ned"] = "Nde-Gbite", ["nee"] = "Kumak", ["nef"] = "Nefamese", ["neg"] = "Negidal", ["neh"] = "Nyenkha", ["nej"] = "Neko", ["nek"] = "Neku", ["nem"] = "Nemi", ["nen"] = "Nengone", ["neo"] = "Ná-Meo", ["neq"] = "North Central Mixe", ["ner"] = "Yahadian", ["nes"] = "Bhoti Kinnauri", ["net"] = "Nete", ["neu"] = "Neo", ["nev"] = "Nyaheun", ["new"] = "Newar", ["nex"] = "Neme", ["ney"] = "Neyo", ["nez"] = "Nez Perce", ["nfa"] = "Dhao", ["nfd"] = "Ahwai", ["nfl"] = "Aiwoo", ["nfr"] = "Nafaanra", ["nfu"] = "Mfumte", ["ng"] = "Ndonga", ["nga"] = "Ngbaka", ["ngb"] = "Northern Ngbandi", ["ngc"] = "Ngombe (Congo)", ["ngd"] = "Ngando (Central African Republic)", ["nge"] = "Ngemba", ["ngf-pro"] = "Proto-Trans-New Guinea", ["ngg"] = "Ngbaka Manza", ["ngh"] = "Nǀuu", ["ngi"] = "Ngizim", ["ngj"] = "Ngie", ["ngk"] = "Ngalkbun", ["ngl"] = "Lomwe", ["ngm"] = "Ngatik Men's Creole", ["ngn"] = "Ngwo", ["ngo"] = "Ngoni", ["ngp"] = "Ngulu", ["ngq"] = "Ngoreme", ["ngr"] = "Nagu", ["ngs"] = "Gvoko", ["ngt"] = "Ngeq", ["ngu"] = "Guerrero Nahuatl", ["ngv"] = "Nagumi", ["ngw"] = "Ngwaba", ["ngx"] = "Nggwahyi", ["ngy"] = "Tibea", ["ngz"] = "Ngungwel", ["nha"] = "Nhanda", ["nhb"] = "Beng", ["nhc"] = "Tabasco Nahuatl", ["nhd"] = "Chiripá", ["nhe"] = "Eastern Huasteca Nahuatl", ["nhf"] = "Nhuwala", ["nhg"] = "Tetelcingo Nahuatl", ["nhh"] = "Nahari", ["nhi"] = "Zacatlán-Ahuacatlán-Tepetzintla Nahuatl", ["nhk"] = "Cosoleacaque Nahuatl", ["nhm"] = "Morelos Nahuatl", ["nhn"] = "Central Nahuatl", ["nho"] = "Takuu", ["nhp"] = "Pajapan Nahuatl", ["nhq"] = "Huaxcaleca Nahuatl", ["nhr"] = "Naro", ["nht"] = "Ometepec Nahuatl", ["nhu"] = "Noone", ["nhv"] = "Temascaltepec Nahuatl", ["nhw"] = "Western Huasteca Nahuatl", ["nhx"] = "Mecayapan Nahuatl", ["nhy"] = "Northern Oaxaca Nahuatl", ["nhz"] = "Santa María La Alta Nahuatl", ["nia"] = "Nias", ["nib"] = "Nakame", ["nic-bco-pro"] = "Proto-Benue-Congo", ["nic-bod-pro"] = "Proto-Bantoid", ["nic-eov-pro"] = "Proto-Eastern Oti-Volta", ["nic-gns-pro"] = "Proto-Gurunsi", ["nic-grf-pro"] = "Proto-Grassfields", ["nic-gur-pro"] = "Proto-Gur", ["nic-jkn-pro"] = "Proto-Jukunoid", ["nic-lcr-pro"] = "Proto-Lower Cross River", ["nic-ogo-pro"] = "Proto-Ogoni", ["nic-ovo-pro"] = "Proto-Oti-Volta", ["nic-plt-pro"] = "Proto-Plateau", ["nic-pro"] = "Proto-Niger-Congo", ["nic-ubg-pro"] = "Proto-Ubangian", ["nic-ucr-pro"] = "Proto-Upper Cross River", ["nic-vco-pro"] = "Proto-Volta-Congo", ["nid"] = "Ngandi", ["nie"] = "Niellim", ["nif"] = "Nek", ["nig"] = "Ngalakan", ["nih"] = "Nyiha", ["nii"] = "Nii", ["nij"] = "Ngaju", ["nik"] = "Southern Nicobarese", ["nil"] = "Nila", ["nim"] = "Nilamba", ["nin"] = "Ninzo", ["nio"] = "Nganasan", ["niq"] = "Nandi", ["nir"] = "Nimboran", ["nis"] = "Nimi", ["nit"] = "Southeastern Kolami", ["niu"] = "Niuean", ["niv"] = "Nivkh", ["niw"] = "Nimo", ["nix"] = "Hema", ["niy"] = "Ngiti", ["niz"] = "Ningil", ["nja"] = "Nzanyi", ["njb"] = "Nocte Naga", ["njh"] = "Lotha Naga", ["nji"] = "Gudanji", ["njj"] = "Njen", ["njl"] = "Njalgulgule", ["njm"] = "Angami", ["njn"] = "Liangmai Naga", ["njo"] = "Ao", ["njr"] = "Njerep", ["njs"] = "Nisa", ["njt"] = "Ndyuka-Trio Pidgin", ["nju"] = "Ngadjunmaya", ["njx"] = "Kunyi", ["njy"] = "Njyem", ["njz"] = "Nyishi", ["nka"] = "Nkoya", ["nkb"] = "Khoibu Naga", ["nkc"] = "Nkongho", ["nkd"] = "Koireng", ["nke"] = "Duke", ["nkf"] = "Inpui Naga", ["nkg"] = "Nekgini", ["nkh"] = "Khezha Naga", ["nki"] = "Thangal Naga", ["nkj"] = "Nakai", ["nkk"] = "Nokuku", ["nkm"] = "Namat", ["nkn"] = "Nkangala", ["nko"] = "Nkonya", ["nkp"] = "Niuatoputapu", ["nkq"] = "Nkami", ["nkr"] = "Nukuoro", ["nks"] = "North Asmat", ["nkt"] = "Nyika", ["nku"] = "Bouna Kulango", ["nkw"] = "Nkutu", ["nkx"] = "Nkoroo", ["nkz"] = "Nkari", ["nl"] = "Dutch", ["nla"] = "Ngombale", ["nlc"] = "Nalca", ["nle"] = "East Nyala", ["nlg"] = "Gela", ["nli"] = "Grangali", ["nlj"] = "Nyali", ["nlk"] = "Ninia Yali", ["nll"] = "Nihali", ["nlm"] = "Mankiyali", ["nlo"] = "Ngul", ["nlq"] = "Lao Naga", ["nlu"] = "Nchumbulu", ["nlv"] = "Orizaba Nahuatl", ["nlw"] = "Walangama", ["nlx"] = "Nahali", ["nly"] = "Nyamal", ["nlz"] = "Nalögo", ["nma"] = "Maram Naga", ["nmb"] = "Big Nambas", ["nmc"] = "Ngam", ["nmd"] = "Ndumu", ["nme"] = "Mzieme Naga", ["nmf"] = "Tangkhul Naga", ["nmg"] = "Kwasio", ["nmh"] = "Monsang Naga", ["nmi"] = "Nyam", ["nmj"] = "Ngombe (Central African Republic)", ["nmk"] = "Namakura", ["nml"] = "Ndemli", ["nmm"] = "Manangba", ["nmn"] = "ǃXóõ", ["nmo"] = "Moyon Naga", ["nmp"] = "Nimanbur", ["nmq"] = "Nambya", ["nmr"] = "Nimbari", ["nms"] = "Letemboi", ["nmt"] = "Namonuito", ["nmu"] = "Northeast Maidu", ["nmv"] = "Ngamini", ["nmw"] = "Nimoa", ["nmy"] = "Namuyi", ["nmz"] = "Nawdm", ["nn"] = "Norwegian Nynorsk", ["nna"] = "Nyangumarta", ["nnb"] = "Nande", ["nnc"] = "Nancere", ["nnd"] = "West Ambae", ["nne"] = "Ngandyera", ["nnf"] = "Ngaing", ["nng"] = "Maring Naga", ["nnh"] = "Ngiemboon", ["nni"] = "North Nuaulu", ["nnj"] = "Nyangatom", ["nnk"] = "Nankina", ["nnl"] = "Northern Rengma Naga", ["nnm"] = "Namia", ["nnn"] = "Ngete", ["nnp"] = "Wancho", ["nnq"] = "Ngindo", ["nnr"] = "Narungga", ["nnt"] = "Nanticoke", ["nnu"] = "Dwang", ["nnv"] = "Nukunu", ["nnw"] = "Southern Nuni", ["nnx"] = "Ngong", ["nny"] = "Nyangga", ["nnz"] = "Nda'nda'", ["no"] = "Norwegian", ["noa"] = "Woun Meu", ["noc"] = "Nuk", ["nod"] = "Northern Thai", ["noe"] = "Nimadi", ["nof"] = "Nomane", ["nog"] = "Nogai", ["noh"] = "Nomu", ["noi"] = "Noiri", ["noj"] = "Nonuya", ["nok"] = "Nooksack", ["nol"] = "Nomlaki", ["nom"] = "Nocamán", ["non"] = "Old Norse", ["nop"] = "Numanggang", ["noq"] = "Ngongo", ["nos"] = "Eastern Nisu", ["not"] = "Nomatsiguenga", ["nou"] = "Ewage-Notu", ["nov"] = "Novial", ["now"] = "Nyambo", ["noy"] = "Noy", ["noz"] = "Nayi", ["npa"] = "Nar Phu", ["npb"] = "Nupbikha", ["npg"] = "Ponyo", ["nph"] = "Phom", ["npl"] = "Southeastern Puebla Nahuatl", ["npn"] = "Mondropolon", ["npo"] = "Pochuri Naga", ["nps"] = "Nipsan", ["npu"] = "Puimei Naga", ["npy"] = "Napu", ["nqg"] = "Ede Nago", ["nqk"] = "Kura Ede Nago", ["nql"] = "Ngendelengo", ["nqm"] = "Ndom", ["nqn"] = "Nen", ["nqo"] = "N'Ko", ["nqq"] = "Kyan-Karyaw Naga", ["nqy"] = "Akyaung Ari", ["nr"] = "Southern Ndebele", ["nra"] = "Ngom", ["nrb"] = "Nara", ["nrc"] = "Noric", ["nre"] = "Southern Rengma Naga", ["nrf"] = "Norman", ["nrg"] = "Narango", ["nri"] = "Chokri Naga", ["nrk"] = "Ngarla", ["nrl"] = "Ngarluma", ["nrm"] = "Narom", ["nrn"] = "Norn", ["nrp"] = "North Picene", ["nrr"] = "Norra", ["nrt"] = "Northern Kalapuya", ["nru"] = "Narua", ["nrx"] = "Ngurmbur", ["nrz"] = "Lala (New Guinea)", ["nsa"] = "Sangtam Naga", ["nsb"] = "Lower Nossob", ["nsc"] = "Nshi", ["nsd"] = "Southern Nisu", ["nse"] = "Nsenga", ["nsg"] = "Ngasa", ["nsh"] = "Ngoshie", ["nsi"] = "Nigerian Sign Language", ["nsk"] = "Naskapi", ["nsl"] = "Norwegian Sign Language", ["nsm"] = "Sema", ["nsn"] = "Nehan", ["nso"] = "Northern Sotho", ["nsp"] = "Nepalese Sign Language", ["nsq"] = "Northern Sierra Miwok", ["nsr"] = "Maritime Sign Language", ["nss"] = "Nali", ["nst"] = "Tangsa", ["nsu"] = "Sierra Negra Nahuatl", ["nsv"] = "Southwestern Nisu", ["nsw"] = "Navut", ["nsx"] = "Nsongo", ["nsy"] = "Nasal", ["nsz"] = "Nisenan", ["ntd"] = "Northern Tidong", ["nte"] = "Nathembo", ["ntg"] = "Ngantangarra", ["nti"] = "Natioro", ["ntj"] = "Ngaanyatjarra", ["ntk"] = "Ikoma", ["ntm"] = "Nateni", ["nto"] = "Ntomba", ["ntp"] = "Northern Tepehuan", ["ntr"] = "Delo", ["nts"] = "Natagaimas", ["ntu"] = "Natügu", ["ntw"] = "Nottoway", ["ntx"] = "Somra", ["nty"] = "Mantsi", ["nua"] = "Yuaga", ["nub-har"] = "Haraza", ["nub-pro"] = "Proto-Nubian", ["nuc"] = "Nukuini", ["nud"] = "Ngala", ["nue"] = "Ngundu", ["nuf"] = "Nusu", ["nug"] = "Nungali", ["nuh"] = "Ndunda", ["nui"] = "Ngumbi", ["nuj"] = "Nyole (Uganda)", ["nuk"] = "Nootka", ["nul"] = "Nusa Laut", ["num"] = "Niuafo'ou", ["nun"] = "Anong", ["nuo"] = "Nguôn", ["nup"] = "Nupe", ["nuq"] = "Nukumanu", ["nur"] = "Nuguria", ["nus"] = "Nuer", ["nut"] = "Nung", ["nuu"] = "Ngbundu", ["nuv"] = "Northern Nuni", ["nuw"] = "Nguluwan", ["nux"] = "Mehek", ["nuy"] = "Nunggubuyu", ["nuz"] = "Tlamacazapa Nahuatl", ["nv"] = "Navajo", ["nvh"] = "Nasarian", ["nvm"] = "Namiae", ["nvo"] = "Nyokon", ["nwa"] = "Nawathinehena", ["nwb"] = "Nyabwa", ["nwc"] = "Classical Newar", ["nwe"] = "Ngwe", ["nwi"] = "Southwest Tanna", ["nwm"] = "Nyamusa-Molo", ["nwo"] = "Nauo", ["nwr"] = "Nawaru", ["nwx"] = "Middle Newar", ["nwy"] = "Nottoway-Meherrin", ["nxa"] = "Nauete", ["nxd"] = "Ngando (Congo)", ["nxe"] = "Nage", ["nxg"] = "Ngadha", ["nxi"] = "Nindi", ["nxl"] = "South Nuaulu", ["nxm"] = "Numidian", ["nxn"] = "Ngawun", ["nxo"] = "Ndambomo", ["nxq"] = "Naxi", ["nxr"] = "Ninggerum", ["nxu"] = "Narau", ["nxx"] = "Nafri", ["ny"] = "Chichewa", ["nyb"] = "Nyangbo", ["nyc"] = "Nyanga-li", ["nyd"] = "Nyole (Kenya)", ["nye"] = "Nyengo", ["nyf"] = "Giryama", ["nyg"] = "Nyindu", ["nyh"] = "Nyigina", ["nyi"] = "Nyimang", ["nyj"] = "Nyanga (Congo)", ["nyk"] = "Nyaneka", ["nyl"] = "Nyeu", ["nym"] = "Nyamwezi", ["nyn"] = "Nyankole", ["nyo"] = "Nyoro", ["nyp"] = "Nyang'i", ["nys"] = "Nyunga", ["nyt"] = "Nyawaygi", ["nyu"] = "Nyungwe", ["nyv"] = "Nyulnyul", ["nyw"] = "Nyaw", ["nyx"] = "Nganyaywana", ["nyy"] = "Nyakyusa", ["nza"] = "Tigon Mbembe", ["nzb"] = "Njebi", ["nzd"] = "Nzadi", ["nzi"] = "Nzima", ["nzk"] = "Nzakara", ["nzm"] = "Zeme Naga", ["nzs"] = "New Zealand Sign Language", ["nzu"] = "Central Teke", ["nzy"] = "Nzakambay", ["nzz"] = "Nanga Dama Dogon", ["oaa"] = "Orok", ["oac"] = "Oroch", ["oav"] = "Old Avar", ["obi"] = "Obispeño", ["obk"] = "Southern Bontoc", ["obl"] = "Oblo", ["obm"] = "Moabite", ["obo"] = "Obo Manobo", ["obr"] = "Old Burmese", ["obt"] = "Old Breton", ["obu"] = "Obulom", ["oc"] = "Occitan", ["oca"] = "Ocaina", ["och"] = "Old Chinese", ["oco"] = "Old Cornish", ["ocu"] = "Tlahuica", ["oda"] = "Odut", ["odk"] = "Od", ["odt"] = "Old Dutch", ["odu"] = "Odual", ["ofo"] = "Ofo", ["ofs"] = "Old Frisian", ["ofu"] = "Efutop", ["ogb"] = "Ogbia", ["ogc"] = "Ogbah", ["oge"] = "Old Georgian", ["ogg"] = "Ogbogolo", ["ogo"] = "Khana", ["ogu"] = "Ogbronuagum", ["ohu"] = "Old Hungarian", ["oia"] = "Oirata", ["oin"] = "Inebu One", ["oj"] = "Ojibwe", ["ojb"] = "Northwestern Ojibwa", ["ojc"] = "Central Ojibwa", ["ojg"] = "Eastern Ojibwa", ["ojp"] = "Old Japanese", ["ojs"] = "Severn Ojibwa", ["ojv"] = "Ontong Java", ["ojw"] = "Western Ojibwa", ["oka"] = "Okanagan", ["okb"] = "Okobo", ["okd"] = "Okodia", ["oke"] = "Okpe (Southwestern Edo)", ["okg"] = "Kok-Paponk", ["okh"] = "Koresh-e Rostam", ["oki"] = "Okiek", ["okj"] = "Oko-Juwoi", ["okk"] = "Kwamtim One", ["okl"] = "Old Kentish Sign Language", ["okm"] = "Middle Korean", ["okn"] = "Oki-No-Erabu", ["oko"] = "Old Korean", ["okr"] = "Kirike", ["oks"] = "Oko-Eni-Osayen", ["oku"] = "Oku", ["okv"] = "Orokaiva", ["okx"] = "Okpe (Northwestern Edo)", ["okz"] = "Old Khmer", ["old"] = "Mochi", ["ole"] = "Olekha", ["olm"] = "Oloma", ["olo"] = "Livvi", ["olr"] = "Olrat", ["olt"] = "Old Lithuanian", ["olu"] = "Kuvale", ["om"] = "Oromo", ["oma"] = "Omaha-Ponca", ["omb"] = "Omba", ["omc"] = "Mochica", ["omg"] = "Omagua", ["omi"] = "Omi", ["omk"] = "Omok", ["oml"] = "Ombo", ["omn"] = "Minoan", ["omo"] = "Utarmbung", ["omp"] = "Old Manipuri", ["omq-cha-pro"] = "Proto-Chatino", ["omq-maz-pro"] = "Proto-Mazatec", ["omq-mix-pro"] = "Proto-Mixtecan", ["omq-mxt-pro"] = "Proto-Mixtec", ["omq-otp-pro"] = "Proto-Oto-Pamean", ["omq-pro"] = "Proto-Oto-Manguean", ["omq-tel"] = "Teposcolula Mixtec", ["omq-teo"] = "Teojomulco Chatino", ["omq-tri-pro"] = "Proto-Trique", ["omq-zap-pro"] = "Proto-Zapotecan", ["omq-zpc-pro"] = "Proto-Zapotec", ["omr"] = "Old Marathi", ["omt"] = "Omotik", ["omu"] = "Omurano", ["omv-aro-pro"] = "Proto-Aroid", ["omv-diz-pro"] = "Proto-Dizoid", ["omv-pro"] = "Proto-Omotic", ["omw"] = "South Tairora", ["omx"] = "Old Mon", ["ona"] = "Selk'nam", ["onb"] = "Lingao", ["one"] = "Oneida", ["ong"] = "Olo", ["oni"] = "Onin", ["onj"] = "Onjob", ["onk"] = "Kabore One", ["onn"] = "Onobasulu", ["ono"] = "Onondaga", ["onp"] = "Sartang", ["onr"] = "Northern One", ["ons"] = "Ono", ["ont"] = "Ontenu", ["onu"] = "Unua", ["onw"] = "Old Nubian", ["onx"] = "Pidgin Onin", ["ood"] = "O'odham", ["oog"] = "Ong", ["oon"] = "Önge", ["oor"] = "Oorlams", ["oos"] = "Old Ossetic", ["opa"] = "Okpamheri", ["opk"] = "Kopkaka", ["opm"] = "Oksapmin", ["opo"] = "Opao", ["opt"] = "Opata", ["opy"] = "Ofayé", ["or"] = "Oriya", ["ora"] = "Oroha", ["ore"] = "Orejón", ["org"] = "Oring", ["orh"] = "Oroqen", ["oro"] = "Orokolo", ["orr"] = "Oruma", ["ort"] = "Adivasi Oriya", ["oru"] = "Ormuri", ["orv"] = "Old East Slavic", ["orw"] = "Oro Win", ["orx"] = "Oro", ["orz"] = "Ormu", ["os"] = "Ossetian", ["os-pro"] = "Proto-Ossetic", ["osa"] = "Osage", ["osc"] = "Oscan", ["osi"] = "Osing", ["osn"] = "Old Sundanese", ["oso"] = "Ososo", ["osp"] = "Old Spanish", ["ost"] = "Osatu", ["osu"] = "Southern One", ["osx"] = "Old Saxon", ["ota"] = "Ottoman Turkish", ["otb"] = "Old Tibetan", ["otd"] = "Ot Danum", ["ote"] = "Mezquital Otomi", ["oti"] = "Oti", ["otk"] = "Old Turkic", ["otl"] = "Tilapa Otomi", ["otm"] = "Eastern Highland Otomi", ["otn"] = "Tenango Otomi", ["oto-otm-pro"] = "Proto-Otomi", ["oto-pro"] = "Proto-Otomian", ["otq"] = "Querétaro Otomi", ["otr"] = "Otoro", ["ots"] = "Estado de México Otomi", ["ott"] = "Temoaya Otomi", ["otu"] = "Otuke", ["otw"] = "Ottawa", ["otx"] = "Texcatepec Otomi", ["oty"] = "Old Tamil", ["otz"] = "Ixtenco Otomi", ["oub"] = "Glio-Oubi", ["oue"] = "Oune", ["oui"] = "Old Uyghur", ["oum"] = "Ouma", ["ovd"] = "Elfdalian", ["owi"] = "Owiniga", ["owl"] = "Old Welsh", ["oyb"] = "Oy", ["oyd"] = "Oyda", ["oym"] = "Wayampi", ["oyy"] = "Oya'oya", ["ozm"] = "Koonzime", ["pa"] = "Punjabi", ["paa-kom"] = "Kómnzo", ["paa-kwn"] = "Kuwani", ["paa-nha-pro"] = "Proto-North Halmahera", ["paa-nun"] = "Nungon", ["pab"] = "Pareci", ["pac"] = "Pacoh", ["pad"] = "Paumarí", ["pae"] = "Pagibete", ["paf"] = "Paranawát", ["pag"] = "Pangasinan", ["pah"] = "Tenharim", ["pai"] = "Pe", ["pak"] = "Parakanã", ["pal"] = "Middle Persian", ["pam"] = "Kapampangan", ["pao"] = "Northern Paiute", ["pap"] = "Papiamentu", ["paq"] = "Parya", ["par"] = "Panamint", ["pas"] = "Papasena", ["pat"] = "Papitalai", ["pau"] = "Palauan", ["pav"] = "Wari'", ["paw"] = "Pawnee", ["pax"] = "Pankararé", ["pay"] = "Pech", ["paz"] = "Pankararú", ["pbb"] = "Páez", ["pbc"] = "Patamona", ["pbe"] = "Mezontla Popoloca", ["pbf"] = "Coyotepec Popoloca", ["pbg"] = "Paraujano", ["pbh"] = "Panare", ["pbi"] = "Podoko", ["pbl"] = "Mak (Nigeria)", ["pbm"] = "Puebla Mazatec", ["pbn"] = "Kpasam", ["pbo"] = "Papel", ["pbp"] = "Badyara", ["pbr"] = "Pangwa", ["pbs"] = "Central Pame", ["pbv"] = "Pnar", ["pby"] = "Pyu", ["pca"] = "Santa Inés Ahuatempan Popoloca", ["pcb"] = "Pear", ["pcc"] = "Bouyei", ["pcd"] = "Picard", ["pce"] = "Ruching Palaung", ["pcf"] = "Paliyan", ["pcg"] = "Paniya", ["pch"] = "Pardhan", ["pci"] = "Duruwa", ["pcj"] = "Parenga", ["pck"] = "Paite", ["pcl"] = "Pardhi", ["pcm"] = "Nigerian Pidgin", ["pcn"] = "Piti", ["pcp"] = "Pacahuara", ["pcw"] = "Pyapun", ["pda"] = "Anam", ["pdc"] = "Pennsylvania German", ["pdi"] = "Pa Di", ["pdn"] = "Fedan", ["pdo"] = "Padoe", ["pdt"] = "Plautdietsch", ["pdu"] = "Kayan", ["pea"] = "Peranakan Indonesian", ["peb"] = "Eastern Pomo", ["ped"] = "Mala (New Guinea)", ["pee"] = "Taje", ["pef"] = "Northeastern Pomo", ["peg"] = "Pengo", ["peh"] = "Bonan", ["pei"] = "Chichimeca-Jonaz", ["pej"] = "Northern Pomo", ["pek"] = "Penchal", ["pel"] = "Pekal", ["pem"] = "Phende", ["peo"] = "Old Persian", ["pep"] = "Kunja", ["peq"] = "Southern Pomo", ["pev"] = "Pémono", ["pex"] = "Petats", ["pey"] = "Petjo", ["pez"] = "Eastern Penan", ["pfa"] = "Pááfang", ["pfe"] = "Peere", ["pga"] = "Juba Arabic", ["pgd"] = "Gandhari", ["pgg"] = "Pangwali", ["pgi"] = "Pagi", ["pgk"] = "Rerep", ["pgl"] = "Primitive Irish", ["pgn"] = "Paelignian", ["pgs"] = "Pangseng", ["pgu"] = "Pagu", ["pgz"] = "Papua New Guinean Sign Language", ["pha"] = "Pa-Hng", ["phd"] = "Phudagi", ["phg"] = "Phuong", ["phh"] = "Phukha", ["phi-din"] = "Dinapigue Agta", ["phi-kal-pro"] = "Proto-Kalamian", ["phi-nag"] = "Nagtipunan Agta", ["phi-pro"] = "Proto-Philippine", ["phk"] = "Phake", ["phl"] = "Phalura", ["phm"] = "Phimbi", ["phn"] = "Phoenician", ["pho"] = "Phunoi", ["phq"] = "Phana'", ["phr"] = "Pahari-Potwari", ["pht"] = "Phu Thai", ["phu"] = "Phuan", ["phv"] = "Pahlavani", ["phw"] = "Phangduwali", ["pi"] = "Pali", ["pia"] = "Pima Bajo", ["pib"] = "Yine", ["pic"] = "Pinji", ["pid"] = "Piaroa", ["pie"] = "Piro", ["pif"] = "Pingelapese", ["pig"] = "Pisabo", ["pih"] = "Pitcairn-Norfolk", ["pii"] = "Pini", ["pij"] = "Pijao", ["pil"] = "Yom", ["pim"] = "Powhatan", ["pin"] = "Piame", ["pio"] = "Piapoco", ["pip"] = "Pero", ["pir"] = "Piratapuyo", ["pis"] = "Pijin", ["pit"] = "Pitta-Pitta", ["piu"] = "Pintupi-Luritja", ["piv"] = "Pileni", ["piw"] = "Pimbwe", ["pix"] = "Piu", ["piy"] = "Piya-Kwonci", ["piz"] = "Pije", ["pjt"] = "Pitjantjatjara", ["pka"] = "Ardhamagadhi Prakrit", ["pkb"] = "Kipfokomo", ["pkc"] = "Baekje", ["pkg"] = "Pak-Tong", ["pkh"] = "Pankhu", ["pkn"] = "Pakanha", ["pko"] = "Pökoot", ["pkp"] = "Pukapukan", ["pkr"] = "Attapady Kurumba", ["pks"] = "Pakistan Sign Language", ["pkt"] = "Maleng", ["pku"] = "Paku", ["pl"] = "Polish", ["pla"] = "Miani", ["plb"] = "Polonombauk", ["plc"] = "Central Palawano", ["ple"] = "Palu'e", ["plg"] = "Pilagá", ["plh"] = "Paulohi", ["plj"] = "Polci", ["plk"] = "Kohistani Shina", ["pll"] = "Shwe Palaung", ["pln"] = "Palenquero", ["plo"] = "Oluta Popoluca", ["plq"] = "Palaic", ["plr"] = "Palaka Senoufo", ["pls"] = "San Marcos Tlalcoyalco Popoloca", ["plu"] = "Palikur", ["plv"] = "Southwest Palawano", ["plw"] = "Brooke's Point Palawano", ["ply"] = "Bolyu", ["plz"] = "Paluan", ["pma"] = "Paama", ["pmb"] = "Pambia", ["pmd"] = "Pallanganmiddang", ["pme"] = "Pwaamei", ["pmf"] = "Pamona", ["pmh"] = "Maharastri Prakrit", ["pmi"] = "Northern Pumi", ["pmj"] = "Southern Pumi", ["pmk"] = "Pamlico", ["pml"] = "Sabir", ["pmm"] = "Pol", ["pmn"] = "Pam", ["pmo"] = "Pom", ["pmq"] = "Northern Pame", ["pmr"] = "Paynamar", ["pms"] = "Piedmontese", ["pmt"] = "Tuamotuan", ["pmu"] = "Mirpur Panjabi", ["pmw"] = "Plains Miwok", ["pmx"] = "Poumei Naga", ["pmy"] = "Papuan Malay", ["pmz"] = "Southern Pame", ["pna"] = "Punan Bah-Biau", ["pnb"] = "Western Panjabi", ["pnc"] = "Pannei", ["pnd"] = "Mpinda", ["pne"] = "Western Penan", ["png"] = "Pongu", ["pnh"] = "Penrhyn", ["pni"] = "Aoheng", ["pnj"] = "Pinjarup", ["pnk"] = "Paunaca", ["pnl"] = "Paleni", ["pnm"] = "Punan Batu", ["pnn"] = "Pinai-Hagahai", ["pno"] = "Panobo", ["pnp"] = "Pancana", ["pnq"] = "Pana (West Africa)", ["pnr"] = "Panim", ["pns"] = "Ponosakan", ["pnt"] = "Pontic Greek", ["pnu"] = "Jiongnai Bunu", ["pnv"] = "Pinigura", ["pnw"] = "Panyjima", ["pnx"] = "Phong-Kniang", ["pny"] = "Pinyin", ["pnz"] = "Pana (Central Africa)", ["poc"] = "Poqomam", ["poe"] = "San Juan Atzingo Popoloca", ["pof"] = "Poke", ["pog"] = "Potiguára", ["poh"] = "Poqomchi'", ["poi"] = "Highland Popoluca", ["pok"] = "Pokangá", ["pom"] = "Southeastern Pomo", ["pon"] = "Pohnpeian", ["poo"] = "Central Pomo", ["pop"] = "Pwapwa", ["poq"] = "Texistepec Popoluca", ["pos"] = "Sayula Popoluca", ["pot"] = "Potawatomi", ["pov"] = "Guinea-Bissau Creole", ["pow"] = "San Felipe Otlaltepec Popoloca", ["pox"] = "Polabian", ["poy"] = "Pogolo", ["poz-abi"] = "Abai", ["poz-bal"] = "Baliledo", ["poz-btk-pro"] = "Proto-Bungku-Tolaki", ["poz-cet-pro"] = "Proto-Central-Eastern Malayo-Polynesian", ["poz-hce-pro"] = "Proto-Halmahera-Cenderawasih", ["poz-lgx-pro"] = "Proto-Lampungic", ["poz-mcm-pro"] = "Proto-Malayo-Chamic", ["poz-mly-pro"] = "Proto-Malayic", ["poz-msa-pro"] = "Proto-Malayo-Sumbawan", ["poz-oce-pro"] = "Proto-Oceanic", ["poz-pep-pro"] = "Proto-Eastern Polynesian", ["poz-pnp-pro"] = "Proto-Nuclear Polynesian", ["poz-pol-pro"] = "Proto-Polynesian", ["poz-pro"] = "Proto-Malayo-Polynesian", ["poz-ssw-pro"] = "Proto-South Sulawesi", ["poz-sus-pro"] = "Proto-Sunda-Sulawesi", ["poz-swa-pro"] = "Proto-North Sarawak", ["ppa"] = "Pao", ["ppe"] = "Papi", ["ppi"] = "Paipai", ["ppk"] = "Uma", ["ppl"] = "Pipil", ["ppm"] = "Papuma", ["ppn"] = "Papapana", ["ppo"] = "Folopa", ["ppq"] = "Pei", ["pps"] = "San Luís Temalacayuca Popoloca", ["ppt"] = "Pa", ["ppu"] = "Papora", ["pqa"] = "Pa'a", ["pqe-pro"] = "Proto-Eastern Malayo-Polynesian", ["pqm"] = "Malecite-Passamaquoddy", ["pra-niy"] = "Niya Prakrit", ["prc"] = "Parachi", ["pre"] = "Principense", ["prf"] = "Paranan", ["prg"] = "Old Prussian", ["prh"] = "Porohanon", ["pri"] = "Paicî", ["prk"] = "Parauk", ["prl"] = "Peruvian Sign Language", ["prm"] = "Kibiri", ["prn"] = "Prasuni", ["pro"] = "Old Occitan", ["prq"] = "Ashéninka Perené", ["prr"] = "Puri", ["prt"] = "Phai", ["pru"] = "Puragi", ["prw"] = "Parawen", ["prx"] = "Purik", ["prz"] = "Providencia Sign Language", ["ps"] = "Pashto", ["psa"] = "Asue Awyu", ["psc"] = "Persian Sign Language", ["psd"] = "Plains Indian Sign Language", ["pse"] = "Central Malay", ["psg"] = "Penang Sign Language", ["psh"] = "Southwest Pashayi", ["psi"] = "Southeast Pashayi", ["psl"] = "Puerto Rican Sign Language", ["psm"] = "Pauserna", ["psn"] = "Panasuan", ["pso"] = "Polish Sign Language", ["psp"] = "Philippine Sign Language", ["psq"] = "Pasi", ["psr"] = "Portuguese Sign Language", ["pss"] = "Kaulong", ["psu"] = "Sauraseni Prakrit", ["psw"] = "Port Sandwich", ["psy"] = "Piscataway", ["pt"] = "Portuguese", ["pta"] = "Pai Tavytera", ["pth"] = "Pataxó Hã-Ha-Hãe", ["pti"] = "Pintiini", ["ptn"] = "Patani", ["pto"] = "Zo'é", ["ptp"] = "Patep", ["ptq"] = "Pattapu", ["ptr"] = "Piamatsina", ["ptt"] = "Enrekang", ["ptu"] = "Bambam", ["ptv"] = "Port Vato", ["ptw"] = "Pentlatch", ["pty"] = "Pathiya", ["pua"] = "Purepecha", ["pub"] = "Purum", ["puc"] = "Punan Merap", ["pud"] = "Punan Aput", ["pue"] = "Puelche", ["puf"] = "Punan Merah", ["pug"] = "Phuie", ["pui"] = "Puinave", ["puj"] = "Punan Tubu", ["pum"] = "Puma", ["puo"] = "Puoc", ["pup"] = "Pulabu", ["puq"] = "Puquina", ["pur"] = "Puruborá", ["put"] = "Putoh", ["puu"] = "Punu", ["puw"] = "Puluwat", ["pux"] = "Puare", ["puy"] = "Purisimeño", ["pwa"] = "Pawaia", ["pwb"] = "Panawa", ["pwg"] = "Gapapaiwa", ["pwi"] = "Patwin", ["pwm"] = "Molbog", ["pwn"] = "Paiwan", ["pwo"] = "Western Pwo", ["pwr"] = "Powari", ["pww"] = "Northern Pwo", ["pxm"] = "Quetzaltepec Mixe", ["pye"] = "Pye Krumen", ["pym"] = "Fyam", ["pyn"] = "Poyanáwa", ["pys"] = "Paraguayan Sign Language", ["pyu"] = "Puyuma", ["pyx"] = "Tircul", ["pyy"] = "Pyen", ["pzh"] = "Pazeh", ["pzn"] = "Para Naga", ["qfa-adm-pro"] = "Proto-Great Andamanese", ["qfa-bet-pro"] = "Proto-Be-Tai", ["qfa-cka-pro"] = "Proto-Chukotko-Kamchatkan", ["qfa-hur-pro"] = "Proto-Hurro-Urartian", ["qfa-kad-pro"] = "Proto-Kadu", ["qfa-kms-pro"] = "Proto-Kam-Sui", ["qfa-kor-pro"] = "Proto-Koreanic", ["qfa-kra-pro"] = "Proto-Kra", ["qfa-lic-pro"] = "Proto-Hlai", ["qfa-onb-pro"] = "Proto-Be", ["qfa-ong-pro"] = "Proto-Ongan", ["qfa-tak-pro"] = "Proto-Kra-Dai", ["qfa-xgx-tuh"] = "Tuyuhun", ["qfa-xgx-tuo"] = "Tuoba", ["qfa-xgx-wuh"] = "Wuhuan", ["qfa-xgx-xbi"] = "Xianbei", ["qfa-yen-pro"] = "Proto-Yeniseian", ["qfa-yuk-pro"] = "Proto-Yukaghir", ["qu"] = "Quechua", ["qua"] = "Quapaw", ["quc"] = "K'iche'", ["qui"] = "Quileute", ["qum"] = "Sipakapense", ["qun"] = "Quinault", ["quq"] = "Quinqui", ["quv"] = "Sacapulteco", ["qvy"] = "Queyu", ["qwc"] = "Classical Quechua", ["qwe-kch"] = "Kichwa", ["qwm"] = "Kipchak", ["qwt"] = "Kwalhioqua-Tlatskanai", ["qxs"] = "Southern Qiang", ["qya"] = "Quenya", ["qyp"] = "Quiripi", ["raa"] = "Dungmali", ["rab"] = "Chamling", ["rac"] = "Rasawa", ["rad"] = "Rade", ["raf"] = "Western Meohang", ["rag"] = "Logooli", ["rah"] = "Rabha", ["rai"] = "Ramoaaina", ["raj"] = "Rajasthani", ["rak"] = "Tulu-Bohuai", ["ral"] = "Ralte", ["ram"] = "Canela", ["ran"] = "Riantana", ["rao"] = "Rao", ["rap"] = "Rapa Nui", ["raq"] = "Saam", ["rar"] = "Rarotongan", ["ras"] = "Tegali", ["rat"] = "Razajerdi", ["rau"] = "Raute", ["rav"] = "Sampang", ["raw"] = "Rawang", ["rax"] = "Rang", ["ray"] = "Rapa", ["raz"] = "Rahambuu", ["rbb"] = "Rumai Palaung", ["rbk"] = "Northern Bontoc", ["rbl"] = "Miraya Bikol", ["rcf"] = "Réunion Creole French", ["rdb"] = "Rudbari", ["rea"] = "Rerau", ["reb"] = "Rembong", ["ree"] = "Rejang Kayan", ["reg"] = "Kara (Tanzania)", ["rei"] = "Reli", ["rej"] = "Rejang", ["rel"] = "Rendille", ["rem"] = "Remo", ["ren"] = "Rengao", ["rer"] = "Rer Bare", ["res"] = "Reshe", ["ret"] = "Retta", ["rey"] = "Reyesano", ["rga"] = "Roria", ["rge"] = "Romani Greek", ["rgk"] = "Rangkas", ["rgn"] = "Romagnol", ["rgr"] = "Resígaro", ["rgs"] = "Southern Roglai", ["rgu"] = "Ringgou", ["rhg"] = "Rohingya", ["rhp"] = "Yahang", ["ria"] = "Reang", ["rif"] = "Tarifit", ["ril"] = "Riang", ["rim"] = "Nyaturu", ["rin"] = "Nungu", ["rir"] = "Ribun", ["rit"] = "Ritarungo", ["riu"] = "Riung", ["rjg"] = "Rajong", ["rji"] = "Raji", ["rjs"] = "Rajbanshi", ["rka"] = "Kraol", ["rkb"] = "Rikbaktsa", ["rkh"] = "Rakahanga-Manihiki", ["rki"] = "Rakhine", ["rkm"] = "Marka", ["rkt"] = "Kamta", ["rkw"] = "Arakwal", ["rm"] = "Romansch", ["rma"] = "Rama", ["rmb"] = "Rembarunga", ["rmc"] = "Carpathian Romani", ["rmd"] = "Traveller Danish", ["rme"] = "Angloromani", ["rmf"] = "Kalo Finnish Romani", ["rmg"] = "Traveller Norwegian", ["rmh"] = "Murkim", ["rmi"] = "Lomavren", ["rmk"] = "Romkun", ["rml"] = "Baltic Romani", ["rmm"] = "Roma", ["rmn"] = "Balkan Romani", ["rmo"] = "Sinte Romani", ["rmp"] = "Rempi", ["rmq"] = "Caló", ["rms"] = "Romanian Sign Language", ["rmt"] = "Domari", ["rmu"] = "Tavringer Romani", ["rmv"] = "Romanova", ["rmw"] = "Welsh Romani", ["rmx"] = "Romam", ["rmy"] = "Vlax Romani", ["rmz"] = "Marma", ["rnd"] = "Ruwund", ["rng"] = "Ronga", ["rnl"] = "Ranglong", ["rnn"] = "Roon", ["rnp"] = "Rongpo", ["rnw"] = "Rungwa", ["ro"] = "Romanian", ["roa-ang"] = "Angevin", ["roa-bbn"] = "Bourbonnais-Berrichon", ["roa-brg"] = "Bourguignon", ["roa-cha"] = "Champenois", ["roa-fcm"] = "Franc-Comtois", ["roa-gal"] = "Gallo", ["roa-leo"] = "Leonese", ["roa-lor"] = "Lorrain", ["roa-oan"] = "Navarro-Aragonese", ["roa-oca"] = "Old Catalan", ["roa-ole"] = "Old Leonese", ["roa-opt"] = "Old Galician-Portuguese", ["roa-orl"] = "Orléanais", ["roa-poi"] = "Poitevin-Saintongeais", ["roa-tar"] = "Tarantino", ["roa-tou"] = "Tourangeau", ["rob"] = "Tae'", ["roc"] = "Cacgia Roglai", ["rod"] = "Rogo", ["roe"] = "Ronji", ["rof"] = "Rombo", ["rog"] = "Northern Roglai", ["rol"] = "Romblomanon", ["rom"] = "Romani", ["roo"] = "Rotokas", ["rop"] = "Kriol", ["ror"] = "Rongga", ["rou"] = "Runga", ["row"] = "Dela-Oenale", ["rpn"] = "Repanbitip", ["rpt"] = "Rapting", ["rri"] = "Ririo", ["rro"] = "Roro", ["rrt"] = "Arritinngithigh", ["rsb"] = "Romano-Serbian", ["rsl"] = "Russian Sign Language", ["rsm"] = "Miriwoong Sign Language", ["rtc"] = "Rungtu", ["rth"] = "Ratahan", ["rtm"] = "Rotuman", ["rtw"] = "Rathawi", ["ru"] = "Russian", ["rub"] = "Gungu", ["ruc"] = "Ruuli", ["rue"] = "Rusyn", ["ruf"] = "Luguru", ["rug"] = "Roviana", ["ruh"] = "Ruga", ["rui"] = "Rufiji", ["ruk"] = "Che", ["ruo"] = "Istro-Romanian", ["rup"] = "Aromanian", ["ruq"] = "Megleno-Romanian", ["rut"] = "Rutul", ["ruu"] = "Lanas Lobu", ["ruy"] = "Mala (Nigeria)", ["ruz"] = "Ruma", ["rw"] = "Rwanda-Rundi", ["rwa"] = "Rawo", ["rwk"] = "Rwa", ["rwm"] = "Amba", ["rwo"] = "Rawa", ["rxd"] = "Ngardi", ["rxw"] = "Karuwali", ["ryn"] = "Northern Amami-Oshima", ["rys"] = "Yaeyama", ["ryu"] = "Okinawan", ["rzh"] = "Razihi", ["sa"] = "संस्कृत", ["saa"] = "Saba", ["sab"] = "Buglere", ["sac"] = "Fox", ["sad"] = "Sandawe", ["sae"] = "Sabanê", ["saf"] = "Safaliba", ["sah"] = "Yakut", ["sai-ajg"] = "Ajagua", ["sai-all"] = "Allentiac", ["sai-and"] = "Andoquero", ["sai-ayo"] = "Ayomán", ["sai-bae"] = "Baenan", ["sai-bag"] = "Bagua", ["sai-bet"] = "Betoi", ["sai-bor-pro"] = "Proto-Boran", ["sai-cac"] = "Cacán", ["sai-caq"] = "Caranqui", ["sai-car-pro"] = "Proto-Cariban", ["sai-cat"] = "Catacao", ["sai-cer-pro"] = "Proto-Cerrado", ["sai-chi"] = "Chirino", ["sai-chn"] = "Chaná", ["sai-chp"] = "Chapacura", ["sai-chr"] = "Charrua", ["sai-chu"] = "Churuya", ["sai-cje-pro"] = "Proto-Central Jê", ["sai-cmg"] = "Comechingon", ["sai-cno"] = "Chono", ["sai-cnr"] = "Cañari", ["sai-coe"] = "Coeruna", ["sai-col"] = "Colán", ["sai-cop"] = "Copallén", ["sai-crd"] = "Coroado Puri", ["sai-ctq"] = "Catuquinaru", ["sai-cul"] = "Culli", ["sai-cva"] = "Cueva", ["sai-esm"] = "Esmeralda", ["sai-ewa"] = "Ewarhuyana", ["sai-gam"] = "Gamela", ["sai-gay"] = "Gayón", ["sai-gmo"] = "Guamo", ["sai-gue"] = "Güenoa", ["sai-hau"] = "Haush", ["sai-hoc-pro"] = "Proto-Huitoto-Ocaina", ["sai-jee-pro"] = "Proto-Jê", ["sai-jko"] = "Jeikó", ["sai-jrj"] = "Jirajara", ["sai-kat"] = "Katembri", ["sai-mal"] = "Malalí", ["sai-mar"] = "Maratino", ["sai-mat"] = "Matanawi", ["sai-mcn"] = "Mocana", ["sai-men"] = "Menien", ["sai-mil"] = "Millcayac", ["sai-mlb"] = "Malibu", ["sai-msk"] = "Masakará", ["sai-muc"] = "Mucuchí", ["sai-mue"] = "Muellama", ["sai-muz"] = "Muzo", ["sai-mys"] = "Maynas", ["sai-nat"] = "Natú", ["sai-nje-pro"] = "Proto-Northern Jê", ["sai-opo"] = "Opón", ["sai-oto"] = "Otomaco", ["sai-pal"] = "Palta", ["sai-pam"] = "Pamigua", ["sai-par"] = "Paratió", ["sai-pnz"] = "Panzaleo", ["sai-prh"] = "Puruhá", ["sai-ptg"] = "Patagón", ["sai-pur"] = "Purukotó", ["sai-pyg"] = "Payaguá", ["sai-pyk"] = "Pykobjê", ["sai-qmb"] = "Quimbaya", ["sai-qtm"] = "Quitemo", ["sai-rab"] = "Rabona", ["sai-ram"] = "Ramanos", ["sai-sac"] = "Sácata", ["sai-san"] = "Sanaviron", ["sai-sap"] = "Sapará", ["sai-sec"] = "Sechura", ["sai-sin"] = "Sinúfana", ["sai-sje-pro"] = "Proto-Southern Jê", ["sai-tab"] = "Tabancale", ["sai-tal"] = "Tallán", ["sai-tap"] = "Tapayuna", ["sai-tar-pro"] = "Proto-Taranoan", ["sai-teu"] = "Teushen", ["sai-tim"] = "Timote", ["sai-tpr"] = "Taparita", ["sai-trr"] = "Tarairiú", ["sai-wai"] = "Waitaká", ["sai-way"] = "Wayumará", ["sai-wit-pro"] = "Proto-Witotoan", ["sai-wnm"] = "Wanham", ["sai-xoc"] = "Xocó", ["sai-yao"] = "Yao (South America)", ["sai-yar"] = "Yarumá", ["sai-yri"] = "Yuri", ["sai-yup"] = "Yupua", ["sai-yur"] = "Yurumanguí", ["saj"] = "Sahu", ["sak"] = "Sake", ["sal-pro"] = "Proto-Salish", ["sam"] = "Samaritan Aramaic", ["sao"] = "Sause", ["saq"] = "Samburu", ["sar"] = "Saraveca", ["sas"] = "Sasak", ["sat"] = "Santali", ["sau"] = "Saleman", ["sav"] = "Saafi-Saafi", ["saw"] = "Sawi", ["sax"] = "Sa", ["say"] = "Saya", ["saz"] = "Saurashtra", ["sba"] = "Ngambay", ["sbb"] = "Simbo", ["sbc"] = "Gele'", ["sbd"] = "Southern Samo", ["sbe"] = "Saliba (New Guinea)", ["sbf"] = "Shabo", ["sbg"] = "Seget", ["sbh"] = "Sori-Harengan", ["sbi"] = "Seti", ["sbj"] = "Surbakhal", ["sbk"] = "Safwa", ["sbl"] = "Botolan Sambal", ["sbm"] = "Sagala", ["sbn"] = "Sindhi Bhil", ["sbo"] = "Sabüm", ["sbp"] = "Sangu (Tanzania)", ["sbq"] = "Sileibi", ["sbr"] = "Sembakung Murut", ["sbs"] = "Subiya", ["sbt"] = "Kimki", ["sbu"] = "Stod Bhoti", ["sbv"] = "Sabine", ["sbw"] = "Simba", ["sbx"] = "Seberuang", ["sby"] = "Soli", ["sbz"] = "Sara Kaba", ["sc"] = "Sardinian", ["scb"] = "Chut", ["sce"] = "Dongxiang", ["scf"] = "San Miguel Creole French", ["scg"] = "Sanggau", ["sch"] = "Sakachep", ["sci"] = "Sri Lankan Creole Malay", ["sck"] = "Sadri", ["scl"] = "Shina", ["scn"] = "Sicilian", ["sco"] = "Scots", ["scp"] = "Yolmo", ["scq"] = "Sa'och", ["scs"] = "North Slavey", ["scu"] = "Shumcho", ["scv"] = "Sheni", ["scw"] = "Sha", ["scx"] = "Sicel", ["sd"] = "Sindhi", ["sda"] = "Toraja-Sa'dan", ["sdb"] = "Shabak", ["sdc"] = "Sassarese", ["sde"] = "Surubu", ["sdf"] = "Sarli", ["sdg"] = "Savi", ["sdh"] = "Southern Kurdish", ["sdj"] = "Suundi", ["sdk"] = "Sos Kundi", ["sdl"] = "Saudi Arabian Sign Language", ["sdm"] = "Semandang", ["sdn"] = "Gallurese", ["sdo"] = "Bukar-Sadung Bidayuh", ["sdp"] = "Sherdukpen", ["sdr"] = "Oraon Sadri", ["sds"] = "Tunisian Berber", ["sdu"] = "Sarudu", ["sdv-daj-pro"] = "Proto-Daju", ["sdv-eje-pro"] = "Proto-Eastern Jebel", ["sdv-nil-pro"] = "Proto-Nilotic", ["sdv-nyi-pro"] = "Proto-Nyima", ["sdv-tmn-pro"] = "Proto-Taman", ["sdx"] = "Sibu Melanau", ["se"] = "Northern Sami", ["sea"] = "Semai", ["sec"] = "Sechelt", ["sed"] = "Sedang", ["see"] = "Seneca", ["sef"] = "Cebaara Senoufo", ["seg"] = "Segeju", ["seh"] = "Sena", ["sei"] = "Seri", ["sej"] = "Sene", ["sek"] = "Sekani", ["sel-nor"] = "Northern Selkup", ["sel-pro"] = "Proto-Selkup", ["sel-sou"] = "Southern Selkup", ["sem-amm"] = "Ammonite", ["sem-amo"] = "Amorite", ["sem-cha"] = "Chaha", ["sem-dad"] = "Dadanitic", ["sem-dum"] = "Dumaitic", ["sem-has"] = "Hasaitic", ["sem-him"] = "Himyaritic", ["sem-his"] = "Hismaic", ["sem-mhr"] = "Muher", ["sem-pro"] = "Proto-Semitic", ["sem-saf"] = "Safaitic", ["sem-srb"] = "Old South Arabian", ["sem-tay"] = "Taymanitic", ["sem-tha"] = "Thamudic", ["sem-wes-pro"] = "Proto-West Semitic", ["sen"] = "Nanerigé Sénoufo", ["seo"] = "Suarmin", ["sep"] = "Sìcìté Sénoufo", ["seq"] = "Senara Sénoufo", ["ser"] = "Serrano", ["ses"] = "Koyraboro Senni", ["set"] = "Sentani", ["seu"] = "Serui-Laut", ["sev"] = "Nyarafolo Senoufo", ["sew"] = "Sewa Bay", ["sey"] = "Secoya", ["sez"] = "Senthang Chin", ["sfb"] = "French Belgian Sign Language", ["sfm"] = "Small Flowery Miao", ["sfs"] = "South African Sign Language", ["sfw"] = "Sehwi", ["sg"] = "Sango", ["sga"] = "Old Irish", ["sgb"] = "Mag-Anchi Ayta", ["sgc"] = "Kipsigis", ["sgd"] = "Surigaonon", ["sge"] = "Segai", ["sgg"] = "Swiss-German Sign Language", ["sgh"] = "Shughni", ["sgi"] = "Suga", ["sgk"] = "Sangkong", ["sgm"] = "Singa", ["sgp"] = "Singpho", ["sgr"] = "Sangisari", ["sgs"] = "Samogitian", ["sgt"] = "Brokpake", ["sgu"] = "Salas", ["sgw"] = "Sebat Bet Gurage", ["sgx"] = "Sierra Leone Sign Language", ["sgy"] = "Sanglechi", ["sgz"] = "Sursurunga", ["sh"] = "Serbo-Croatian", ["sha"] = "Shall-Zwall", ["shb"] = "Ninam", ["shc"] = "Sonde", ["shd"] = "Kundal Shahi", ["she"] = "Sheko", ["shg"] = "Shua", ["shh"] = "Shoshone", ["shi"] = "Tashelhit", ["shj"] = "Shatt", ["shk"] = "Shilluk", ["shl"] = "Shendu", ["shm"] = "Shahrudi", ["shn"] = "Shan", ["sho"] = "Shanga", ["shp"] = "Shipibo-Conibo", ["shq"] = "Sala", ["shr"] = "Shi", ["shs"] = "Shuswap", ["sht"] = "Shasta", ["shu"] = "Chadian Arabic", ["shv"] = "Shehri", ["shw"] = "Shwai", ["shx"] = "She", ["shy"] = "Tachawit", ["shz"] = "Syenara Senoufo", ["si"] = "Sinhalese", ["sia"] = "Akkala Sami", ["sib"] = "Sebop", ["sid"] = "Sidamo", ["sie"] = "Simaa", ["sif"] = "Siamou", ["sig"] = "Paasaal", ["sih"] = "Zire", ["sii"] = "Shom Peng", ["sij"] = "Numbami", ["sik"] = "Sikiana", ["sil"] = "Tumulung Sisaala", ["sim"] = "Seim", ["sio-pro"] = "Proto-Siouan", ["sip"] = "Sikkimese", ["siq"] = "Sonia", ["sir"] = "Siri", ["sis"] = "Siuslaw", ["sit-bok"] = "Bokar", ["sit-cha"] = "Chairel", ["sit-gkh"] = "Gokhy", ["sit-hrs-pro"] = "Proto-Hrusish", ["sit-jap"] = "Japhug", ["sit-kha-pro"] = "Proto-Kham", ["sit-liz"] = "Lizu", ["sit-luu-pro"] = "Proto-Luish", ["sit-mor"] = "Moran", ["sit-prn"] = "Puiron", ["sit-pro"] = "Proto-Sino-Tibetan", ["sit-sit"] = "Situ", ["sit-tan-pro"] = "Proto-Tani", ["sit-tgm"] = "Tangam", ["sit-tos"] = "Tosu", ["sit-tsh"] = "Tshobdun", ["sit-zbu"] = "Zbu", ["siu"] = "Sinagen", ["siv"] = "Sumariup", ["siw"] = "Siwai", ["six"] = "Sumau", ["siy"] = "Sivandi", ["siz"] = "Siwi", ["sja"] = "Epena", ["sjb"] = "Sajau Basap", ["sjd"] = "Kildin Sami", ["sje"] = "Pite Sami", ["sjg"] = "Assangori", ["sjk"] = "Kemi Sami", ["sjl"] = "Miji", ["sjm"] = "Mapun", ["sjn"] = "Sindarin", ["sjo"] = "Xibe", ["sjp"] = "Surjapuri", ["sjr"] = "Siar-Lak", ["sjs"] = "Senhaja De Srair", ["sjt"] = "Ter Sami", ["sju"] = "Ume Sami", ["sjw"] = "Shawnee", ["sk"] = "Slovak", ["ska"] = "Skagit", ["skb"] = "Saek", ["skc"] = "Ma Manda", ["skd"] = "Southern Sierra Miwok", ["ske"] = "Ske", ["skf"] = "Sakirabiá", ["skh"] = "Sikule", ["ski"] = "Sika", ["skj"] = "Seke", ["skk"] = "Sok", ["skm"] = "Sakam", ["skn"] = "Kolibugan Subanon", ["sko"] = "Seko Tengah", ["skp"] = "Sekapan", ["skq"] = "Sininkere", ["skr"] = "Saraiki", ["sks"] = "Maia", ["skt"] = "Sakata", ["sku"] = "Sakao", ["skv"] = "Skou", ["skw"] = "Skepi Creole Dutch", ["skx"] = "Seko Padang", ["sky"] = "Sikaiana", ["skz"] = "Sekar", ["sl"] = "Slovene", ["sla-pro"] = "Proto-Slavic", ["slc"] = "Saliba (Colombia)", ["sld"] = "Sissala", ["sle"] = "Sholaga", ["slf"] = "Swiss-Italian Sign Language", ["slg"] = "Selungai Murut", ["slh"] = "Southern Puget Sound Salish", ["slj"] = "Salumá", ["sll"] = "Salt-Yui", ["slm"] = "Pangutaran Sama", ["sln"] = "Salinan", ["slp"] = "Lamaholot", ["slq"] = "Salchuq", ["slr"] = "Salar", ["sls"] = "Singapore Sign Language", ["slt"] = "Sila", ["slu"] = "Selaru", ["slw"] = "Sialum", ["slx"] = "Salampasu", ["sly"] = "Selayar", ["slz"] = "Ma'ya", ["sm"] = "Samoan", ["sma"] = "Southern Sami", ["smb"] = "Simbari", ["smc"] = "Som", ["smd"] = "Sama", ["smf"] = "Auwe", ["smg"] = "Simbali", ["smh"] = "Samei", ["smi-pro"] = "Proto-Samic", ["smj"] = "Lule Sami", ["smk"] = "Bolinao", ["sml"] = "Central Sama", ["smm"] = "Musasa", ["smn"] = "Inari Sami", ["smp"] = "Samaritan Hebrew", ["smq"] = "Samo", ["smr"] = "Simeulue", ["sms"] = "Skolt Sami", ["smt"] = "Simte", ["smu"] = "Somray", ["smv"] = "Samvedi", ["smw"] = "Sumbawa", ["smx"] = "Samba", ["smy"] = "Semnani", ["smz"] = "Simeku", ["sn"] = "Shona", ["snb"] = "Sebuyau", ["snc"] = "Sinaugoro", ["sne"] = "Bau Bidayuh", ["snf"] = "Noon", ["sng"] = "Sanga (Congo)", ["sni"] = "Sensi", ["snj"] = "Riverain Sango", ["snk"] = "Soninke", ["snl"] = "Sangil", ["snm"] = "Southern Ma'di", ["snn"] = "Siona", ["sno"] = "Snohomish", ["snp"] = "Siane", ["snq"] = "Sangu (Gabon)", ["snr"] = "Sihan", ["sns"] = "Nahavaq", ["snu"] = "Senggi", ["snv"] = "Sa'ban", ["snw"] = "Selee", ["snx"] = "Sam", ["sny"] = "Saniyo-Hiyewe", ["snz"] = "Kou", ["so"] = "Somali", ["soa"] = "Thai Song", ["sob"] = "Sobei", ["soc"] = "Soko", ["sod"] = "Songoora", ["soe"] = "Songomeno", ["sog"] = "Sogdian", ["soh"] = "Aka (Sudan)", ["soi"] = "Sonha", ["sok"] = "Sokoro", ["sol"] = "Solos", ["son-pro"] = "Proto-Songhay", ["soo"] = "Nsong", ["sop"] = "Songe", ["soq"] = "Kanasi", ["sor"] = "Somrai", ["sos"] = "Seenku", ["sou"] = "Southern Thai", ["sov"] = "Sonsorolese", ["sow"] = "Sowanda", ["sox"] = "Swo", ["soy"] = "Miyobe", ["soz"] = "Temi", ["spb"] = "Sepa (Indonesia)", ["spc"] = "Sapé", ["spd"] = "Saep", ["spe"] = "Sepa (New Guinea)", ["spg"] = "Sian", ["spi"] = "Saponi", ["spk"] = "Sengo", ["spl"] = "Selepet", ["spm"] = "Sepen", ["spn"] = "Sanapaná", ["spo"] = "Spokane", ["spp"] = "Supyire", ["spr"] = "Saparua", ["sps"] = "Saposa", ["spt"] = "Spiti Bhoti", ["spu"] = "Sapuan", ["spv"] = "Sambalpuri", ["spx"] = "South Picene", ["spy"] = "Sabaot", ["sq"] = "Albanian", ["sqa"] = "Shama-Sambuga", ["sqh"] = "Shau", ["sqj-pro"] = "Proto-Albanian", ["sqk"] = "Albanian Sign Language", ["sqm"] = "Suma", ["sqn"] = "Susquehannock", ["sqo"] = "Sorkhei", ["sqq"] = "Sou", ["sqr"] = "Siculo-Arabic", ["sqs"] = "Sri Lankan Sign Language", ["sqt"] = "Soqotri", ["squ"] = "Squamish", ["sra"] = "Saruga", ["srb"] = "Sora", ["sre"] = "Sara", ["srf"] = "Nafi", ["srg"] = "Sulod", ["srh"] = "Sarikoli", ["sri"] = "Siriano", ["srk"] = "Serudung Murut", ["srl"] = "Isirawa", ["srm"] = "Saramaccan", ["srn"] = "Sranan Tongo", ["srq"] = "Sirionó", ["srr"] = "Serer", ["srs"] = "Sarcee", ["srt"] = "Sauri", ["sru"] = "Suruí", ["srv"] = "Waray Sorsogon", ["srw"] = "Serua", ["srx"] = "Sirmauri", ["sry"] = "Sera", ["srz"] = "Shahmirzadi", ["ss"] = "Swazi", ["ssa-klk-pro"] = "Proto-Kuliak", ["ssa-kom-pro"] = "Proto-Koman", ["ssa-pro"] = "Proto-Nilo-Saharan", ["ssb"] = "Southern Sama", ["ssc"] = "Suba-Simbiti", ["ssd"] = "Siroi", ["sse"] = "Balangingi", ["ssf"] = "Thao", ["ssg"] = "Seimat", ["ssh"] = "Shihhi Arabic", ["ssi"] = "Sansi", ["ssj"] = "Sausi", ["ssk"] = "Sunam", ["ssl"] = "Western Sisaala", ["ssm"] = "Semnam", ["sso"] = "Sissano", ["ssp"] = "Spanish Sign Language", ["ssq"] = "So'a", ["ssr"] = "Swiss-French Sign Language", ["sss"] = "Sô", ["sst"] = "Sinasina", ["ssu"] = "Susuami", ["ssv"] = "Shark Bay", ["ssx"] = "Samberigi", ["ssy"] = "Saho", ["ssz"] = "Sengseng", ["st"] = "Sotho", ["stb"] = "Northern Subanen", ["std"] = "Sentinelese", ["ste"] = "Liana-Seti", ["stf"] = "Seta", ["stg"] = "Trieng", ["sth"] = "Shelta", ["sti"] = "Bulo Stieng", ["stj"] = "Matya Samo", ["stk"] = "Arammba", ["stm"] = "Setaman", ["stn"] = "Owa", ["sto"] = "Stoney", ["stp"] = "Southeastern Tepehuan", ["stq"] = "Saterland Frisian", ["str"] = "Saanich", ["sts"] = "Shumashti", ["stt"] = "Budeh Stieng", ["stu"] = "Samtao", ["stv"] = "Silt'e", ["stw"] = "Satawalese", ["sty"] = "Siberian Tatar", ["su"] = "Sundanese", ["sua"] = "Sulka", ["sub"] = "Suku", ["suc"] = "Western Subanon", ["sue"] = "Suena", ["sug"] = "Suganga", ["sui"] = "Suki", ["suk"] = "Sukuma", ["suq"] = "Suri", ["sur"] = "Mwaghavul", ["sus"] = "Susu", ["sut"] = "Subtiaba", ["suv"] = "Sulung", ["suw"] = "Sumbwa", ["sux"] = "Sumerian", ["suy"] = "Suyá", ["suz"] = "Sunwar", ["sv"] = "Swedish", ["sva"] = "Svan", ["svb"] = "Ulau-Suain", ["svc"] = "Vincentian Creole English", ["sve"] = "Serili", ["svk"] = "Slovakian Sign Language", ["svm"] = "Slavomolisano", ["svs"] = "Savosavo", ["svx"] = "Skalvian", ["sw"] = "Swahili", ["swb"] = "Maore Comorian", ["swf"] = "Sere", ["swg"] = "Swabian", ["swi"] = "Sui", ["swj"] = "Sira", ["swl"] = "Swedish Sign Language", ["swm"] = "Samosa", ["swn"] = "Sokna", ["swo"] = "Shanenawa", ["swp"] = "Suau", ["swq"] = "Sharwa", ["swr"] = "Saweru", ["sws"] = "Seluwasan", ["swt"] = "Sawila", ["swu"] = "Suwawa", ["sww"] = "Sowa", ["swx"] = "Suruahá", ["swy"] = "Sarua", ["sxb"] = "Suba", ["sxc"] = "Sicanian", ["sxe"] = "Sighu", ["sxg"] = "Shixing", ["sxk"] = "Southern Kalapuya", ["sxl"] = "Selonian", ["sxm"] = "Samre", ["sxn"] = "Sangir", ["sxo"] = "Sorothaptic", ["sxr"] = "Saaroa", ["sxs"] = "Sasaru", ["sxw"] = "Saxwe Gbe", ["sya"] = "Siang", ["syb"] = "Central Subanen", ["syc"] = "Classical Syriac", ["syd-fne"] = "Forest Nenets", ["syd-pro"] = "Proto-Samoyedic", ["syi"] = "Seki", ["syk"] = "Sukur", ["syl"] = "Sylheti", ["sym"] = "Maya Samo", ["syn"] = "Senaya", ["syo"] = "Suoy", ["sys"] = "Sinyar", ["syw"] = "Kagate", ["syx"] = "Osamayi", ["syy"] = "Al-Sayyid Bedouin Sign Language", ["sza"] = "Semelai", ["szb"] = "Ngalum", ["szc"] = "Semaq Beri", ["szd"] = "Seru", ["sze"] = "Seze", ["szg"] = "Sengele", ["szl"] = "Silesian", ["szn"] = "Sula", ["szp"] = "Suabo", ["szv"] = "Isubu", ["szw"] = "Sawai", ["szy"] = "Sakizaya", ["ta"] = "Tamil", ["taa"] = "Lower Tanana", ["tab"] = "Tabasaran", ["tac"] = "Lowland Tarahumara", ["tad"] = "Tause", ["tae"] = "Tariana", ["taf"] = "Tapirapé", ["tag"] = "Tagoi", ["tai-pro"] = "Proto-Tai", ["tai-swe-pro"] = "Proto-Southwestern Tai", ["taj"] = "Eastern Tamang", ["tak"] = "Tala", ["tal"] = "Tal", ["tan"] = "Tangale", ["tao"] = "Yami", ["tap"] = "Taabwa", ["tar"] = "Central Tarahumara", ["tas"] = "Tây Bồi", ["tau"] = "Upper Tanana", ["tav"] = "Tatuyo", ["taw"] = "Tai", ["tax"] = "Tamki", ["tay"] = "Atayal", ["taz"] = "Tocho", ["tba"] = "Aikanã", ["tbb"] = "Tapeba", ["tbc"] = "Takia", ["tbd"] = "Kaki Ae", ["tbe"] = "Tanimbili", ["tbf"] = "Mandara", ["tbg"] = "North Tairora", ["tbh"] = "Thurawal", ["tbi"] = "Gaam", ["tbj"] = "Tiang", ["tbk"] = "Calamian Tagbanwa", ["tbl"] = "Tboli", ["tbm"] = "Tagbu", ["tbn"] = "Barro Negro Tunebo", ["tbo"] = "Tawala", ["tbp"] = "Taworta", ["tbq-bdg-pro"] = "Proto-Bodo-Garo", ["tbq-kuk-pro"] = "Proto-Kuki-Chin", ["tbq-lal-pro"] = "Proto-Lalo", ["tbq-laz"] = "Laze", ["tbq-lob-pro"] = "Proto-Lolo-Burmese", ["tbq-lol-pro"] = "Proto-Loloish", ["tbq-ngo"] = "Ngochang", ["tbq-plg"] = "Pai-lang", ["tbr"] = "Tumtum", ["tbs"] = "Tanguat", ["tbt"] = "Kitembo", ["tbu"] = "Tubar", ["tbv"] = "Tobo", ["tbw"] = "Tagbanwa", ["tbx"] = "Kapin", ["tby"] = "Tabaru", ["tbz"] = "Ditammari", ["tca"] = "Ticuna", ["tcb"] = "Tanacross", ["tcc"] = "Datooga", ["tcd"] = "Tafi", ["tce"] = "Southern Tutchone", ["tcf"] = "Malinaltepec Tlapanec", ["tcg"] = "Tamagario", ["tch"] = "Turks and Caicos Creole English", ["tci"] = "Wára", ["tck"] = "Tchitchege", ["tcl"] = "Taman (Myanmar)", ["tcm"] = "Tanahmerah", ["tco"] = "Taungyo", ["tcp"] = "Tawr Chin", ["tcq"] = "Kaiy", ["tcs"] = "Torres Strait Creole", ["tct"] = "T'en", ["tcu"] = "Southeastern Tarahumara", ["tcw"] = "Tecpatlán Totonac", ["tcx"] = "Toda", ["tcy"] = "Tulu", ["tcz"] = "Thado Chin", ["tda"] = "Tagdal", ["tdb"] = "Panchpargania", ["tdc"] = "Emberá-Tadó", ["tdd"] = "Tai Nüa", ["tde"] = "Tiranige Diga Dogon", ["tdf"] = "Talieng", ["tdg"] = "Western Tamang", ["tdh"] = "Thulung", ["tdi"] = "Tomadino", ["tdj"] = "Tajio", ["tdk"] = "Tambas", ["tdl"] = "Sur", ["tdm"] = "Taruma", ["tdn"] = "Tondano", ["tdo"] = "Teme", ["tdq"] = "Tita", ["tdr"] = "Todrah", ["tds"] = "Doutai", ["tdt"] = "Tetun Dili", ["tdu"] = "Tempasuk Dusun", ["tdv"] = "Toro", ["tdy"] = "Tadyawan", ["te"] = "Telugu", ["tea"] = "Temiar", ["teb"] = "Tetete", ["tec"] = "Terik", ["ted"] = "Tepo Krumen", ["tee"] = "Huehuetla Tepehua", ["tef"] = "Teressa", ["teg"] = "Teke-Tege", ["teh"] = "Tehuelche", ["tei"] = "Torricelli", ["tek"] = "Ibali Teke", ["tem"] = "Temne", ["ten"] = "Tama (Colombia)", ["teo"] = "Ateso", ["tep"] = "Tepecano", ["teq"] = "Temein", ["ter"] = "Tereno", ["tes"] = "Tengger", ["tet"] = "Tetum", ["teu"] = "Soo", ["tev"] = "Teor", ["tew"] = "Tewa", ["tex"] = "Tennet", ["tey"] = "Tulishi", ["tez"] = "Tetserret", ["tfi"] = "Tofin Gbe", ["tfn"] = "Dena'ina", ["tfo"] = "Tefaro", ["tfr"] = "Teribe", ["tft"] = "Ternate", ["tg"] = "Tajik", ["tga"] = "Sagalla", ["tgb"] = "Tobilung", ["tgc"] = "Tigak", ["tgd"] = "Ciwogai", ["tge"] = "Eastern Gorkha Tamang", ["tgf"] = "Chali", ["tgh"] = "Tobagonian Creole English", ["tgi"] = "Lawunuia", ["tgn"] = "Tandaganon", ["tgo"] = "Sudest", ["tgp"] = "Tangoa", ["tgq"] = "Tring", ["tgr"] = "Tareng", ["tgs"] = "Nume", ["tgt"] = "Central Tagbanwa", ["tgu"] = "Tanggu", ["tgv"] = "Tingui-Boto", ["tgw"] = "Tagwana Senoufo", ["tgx"] = "Tagish", ["tgy"] = "Togoyo", ["th"] = "Thai", ["thc"] = "Tai Hang Tong", ["thd"] = "Kuuk Thaayorre", ["the"] = "Chitwania Tharu", ["thf"] = "Thangmi", ["thh"] = "Northern Tarahumara", ["thi"] = "Tai Long", ["thk"] = "Tharaka", ["thl"] = "Dangaura Tharu", ["thm"] = "Thavung", ["thn"] = "Thachanadan", ["thp"] = "Thompson", ["thq"] = "Kochila Tharu", ["thr"] = "Rana Tharu", ["ths"] = "Thakali", ["tht"] = "Tahltan", ["thu"] = "Thuri", ["thy"] = "Tha", ["ti"] = "Tigrinya", ["tic"] = "Tira", ["tif"] = "Tifal", ["tig"] = "Tigre", ["tih"] = "Timugon Murut", ["tii"] = "Tiene", ["tij"] = "Tilung", ["tik"] = "Tikar", ["til"] = "Tillamook", ["tim"] = "Timbe", ["tin"] = "Tindi", ["tio"] = "Teop", ["tip"] = "Trimuris", ["tiq"] = "Tiéfo", ["tis"] = "Masadiit Itneg", ["tit"] = "Tinigua", ["tiu"] = "Adasen", ["tiv"] = "Tiv", ["tiw"] = "Tiwi", ["tix"] = "Southern Tiwa", ["tiy"] = "Tiruray", ["tiz"] = "Tai Hongjin", ["tja"] = "Tajuasohn", ["tjg"] = "Tunjung", ["tji"] = "Northern Tujia", ["tjl"] = "Tai Laing", ["tjm"] = "Timucua", ["tjn"] = "Tonjon", ["tjs"] = "Southern Tujia", ["tju"] = "Tjurruru", ["tjw"] = "Chaap Wuurong", ["tk"] = "Turkmen", ["tka"] = "Truká", ["tkb"] = "Buksa", ["tkd"] = "Tukudede", ["tke"] = "Takwane", ["tkf"] = "Tukumanféd", ["tkl"] = "Tokelauan", ["tkm"] = "Takelma", ["tkn"] = "Toku-No-Shima", ["tkp"] = "Tikopia", ["tkq"] = "Tee", ["tkr"] = "Tsakhur", ["tks"] = "Ramandi", ["tkt"] = "Kathoriya Tharu", ["tku"] = "Upper Necaxa Totonac", ["tkv"] = "Mur Pano", ["tkw"] = "Teanu", ["tkx"] = "Tangko", ["tkz"] = "Takua", ["tl"] = "Tagalog", ["tla"] = "Southwestern Tepehuan", ["tlb"] = "Tobelo", ["tlc"] = "Misantla Totonac", ["tld"] = "Talaud", ["tlf"] = "Telefol", ["tlg"] = "Tofanma", ["tlh"] = "Klingon", ["tli"] = "Tlingit", ["tlj"] = "Talinga-Bwisi", ["tlk"] = "Taloki", ["tll"] = "Tetela", ["tlm"] = "Tolomako", ["tln"] = "Talondo'", ["tlo"] = "Talodi", ["tlp"] = "Filomena Mata-Coahuitlán Totonac", ["tlq"] = "Tai Loi", ["tlr"] = "Talise", ["tls"] = "Tambotalo", ["tlt"] = "Teluti", ["tlu"] = "Tulehu", ["tlv"] = "Taliabu", ["tlx"] = "Khehek", ["tly"] = "Talysh", ["tma"] = "Tama (Chad)", ["tmb"] = "Avava", ["tmc"] = "Tumak", ["tmd"] = "Haruai", ["tme"] = "Tremembé", ["tmf"] = "Toba-Maskoy", ["tmg"] = "Ternateño", ["tmh"] = "Tuareg", ["tmi"] = "Tutuba", ["tmj"] = "Samarokena", ["tmk"] = "Northwestern Tamang", ["tml"] = "Tamnim Citak", ["tmm"] = "Tai Thanh", ["tmn"] = "Taman (Indonesia)", ["tmo"] = "Temoq", ["tmq"] = "Tumleo", ["tms"] = "Tima", ["tmt"] = "Tasmate", ["tmu"] = "Iau", ["tmv"] = "Motembo", ["tmy"] = "Tami", ["tmz"] = "Tamanaku", ["tn"] = "Tswana", ["tna"] = "Tacana", ["tnb"] = "Western Tunebo", ["tnc"] = "Tanimuca-Retuarã", ["tnd"] = "Angosturas Tunebo", ["tne"] = "Tinoc Kallahan", ["tng"] = "Tobanga", ["tnh"] = "Maiani", ["tni"] = "Tandia", ["tnk"] = "Kwamera", ["tnl"] = "Lenakel", ["tnm"] = "Tabla", ["tnn"] = "North Tanna", ["tno"] = "Toromono", ["tnp"] = "Whitesands", ["tnq"] = "Taíno", ["tnr"] = "Bedik", ["tns"] = "Tenis", ["tnt"] = "Tontemboan", ["tnu"] = "Tay Khang", ["tnv"] = "Tangchangya", ["tnw"] = "Tonsawang", ["tnx"] = "Tanema", ["tny"] = "Tongwe", ["tnz"] = "Ten'edn", ["to"] = "Tongan", ["tob"] = "Toba", ["toc"] = "Coyutla Totonac", ["tod"] = "Toma", ["tof"] = "Gizrra", ["tog"] = "Tonga (Malawi)", ["toh"] = "Tonga (Mozambique)", ["toi"] = "Tonga (Zambia)", ["toj"] = "Tojolabal", ["tok"] = "Toki Pona", ["tol"] = "Tolowa", ["tom"] = "Tombulu", ["too"] = "Xicotepec de Juárez Totonac", ["top"] = "Papantla Totonac", ["toq"] = "Toposa", ["tor"] = "Togbo-Vara Banda", ["tos"] = "Highland Totonac", ["tou"] = "Tho", ["tov"] = "Upper Taromi", ["tow"] = "Jemez", ["tox"] = "Tobian", ["toy"] = "Topoiyo", ["toz"] = "To", ["tpa"] = "Taupota", ["tpc"] = "Azoyú Me'phaa", ["tpe"] = "Tippera", ["tpf"] = "Tarpia", ["tpg"] = "Kula", ["tpi"] = "Tok Pisin", ["tpj"] = "Tapieté", ["tpk"] = "Tupinikin", ["tpl"] = "Tlacoapa Me'phaa", ["tpm"] = "Tampulma", ["tpn"] = "Tupinambá", ["tpo"] = "Tai Pao", ["tpp"] = "Pisaflores Tepehua", ["tpq"] = "Tukpa", ["tpr"] = "Tuparí", ["tpt"] = "Tlachichilco Tepehua", ["tpu"] = "Tampuan", ["tpv"] = "Tanapag", ["tpw"] = "Old Tupi", ["tpx"] = "Acatepec Me'phaa", ["tpy"] = "Trumai", ["tpz"] = "Tinputz", ["tqb"] = "Tembé", ["tql"] = "Lehali", ["tqm"] = "Turumsa", ["tqn"] = "Tenino", ["tqo"] = "Toaripi", ["tqp"] = "Tomoip", ["tqq"] = "Tunni", ["tqr"] = "Torona", ["tqt"] = "Western Totonac", ["tqu"] = "Touo", ["tqw"] = "Tonkawa", ["tr"] = "Turkish", ["tra"] = "Tirahi", ["trb"] = "Terebu", ["trc"] = "Copala Triqui", ["trd"] = "Turi", ["tre"] = "East Tarangan", ["trf"] = "Trinidadian Creole English", ["trg"] = "Lishán Didán", ["trh"] = "Turaka", ["tri"] = "Trió", ["trj"] = "Toram", ["trk-dkh"] = "Dukhan", ["trk-oat"] = "Old Anatolian Turkish", ["trk-pro"] = "Proto-Turkic", ["trl"] = "Traveller Scottish", ["trm"] = "Tregami", ["trn"] = "Trinitario", ["tro"] = "Tarao", ["trp"] = "Kokborok", ["trq"] = "San Martín Itunyoso Triqui", ["trr"] = "Taushiro", ["trs"] = "Chicahuaxtla Triqui", ["trt"] = "Tunggare", ["tru"] = "Turoyo", ["trv"] = "Taroko", ["trw"] = "Torwali", ["trx"] = "Tringgus", ["try"] = "Turung", ["trz"] = "Torá", ["ts"] = "Tsonga", ["tsa"] = "Tsaangi", ["tsb"] = "Tsamai", ["tsc"] = "Tswa", ["tsd"] = "Tsakonian", ["tse"] = "Tunisian Sign Language", ["tsf"] = "Southwestern Tamang", ["tsg"] = "Tausug", ["tsh"] = "Tsuvan", ["tsi"] = "Tsimshian", ["tsj"] = "Tshangla", ["tsl"] = "Ts'ün-Lao", ["tsm"] = "Turkish Sign Language", ["tsp"] = "Northern Toussian", ["tsq"] = "Thai Sign Language", ["tsr"] = "Akei", ["tss"] = "Taiwan Sign Language", ["tsu"] = "Tsou", ["tsv"] = "Tsogo", ["tsw"] = "Tsishingini", ["tsx"] = "Mubami", ["tsy"] = "Tebul Sign Language", ["tt"] = "Tatar", ["tta"] = "Tutelo", ["ttb"] = "Gaa", ["ttc"] = "Tektiteko", ["ttd"] = "Tauade", ["tte"] = "Bwanabwana", ["ttf"] = "Tuotomb", ["ttg"] = "Tutong", ["tth"] = "Upper Ta'oih", ["tti"] = "Tobati", ["ttj"] = "Tooro", ["ttk"] = "Totoro", ["ttl"] = "Totela", ["ttm"] = "Northern Tutchone", ["ttn"] = "Towei", ["tto"] = "Lower Ta'oih", ["ttp"] = "Tombelala", ["ttr"] = "Tera", ["tts"] = "Isan", ["ttt"] = "Tat", ["ttu"] = "Torau", ["ttv"] = "Titan", ["ttw"] = "Long Wat", ["tty"] = "Sikaritai", ["ttz"] = "Tsum", ["tua"] = "Wiarumus", ["tub"] = "Tübatulabal", ["tuc"] = "Mutu", ["tud"] = "Tuxá", ["tue"] = "Tuyuca", ["tuf"] = "Central Tunebo", ["tug"] = "Tunia", ["tuh"] = "Taulil", ["tui"] = "Tupuri", ["tuj"] = "Tugutil", ["tul"] = "Tula", ["tum"] = "Tumbuka", ["tun"] = "Tunica", ["tuo"] = "Tucano", ["tup-gua-pro"] = "Proto-Tupi-Guarani", ["tup-kab"] = "Kabishiana", ["tup-pro"] = "Proto-Tupian", ["tuq"] = "Tedaga", ["tus"] = "Tuscarora", ["tuu"] = "Tututni", ["tuv"] = "Turkana", ["tuw-kkl"] = "Kyakala", ["tuw-pro"] = "Proto-Tungusic", ["tuw-sol"] = "Solon", ["tux"] = "Tuxináwa", ["tuy"] = "Tugen", ["tuz"] = "Turka", ["tva"] = "Vaghua", ["tvd"] = "Tsuvadi", ["tve"] = "Te'un", ["tvk"] = "Southeast Ambrym", ["tvl"] = "Tuvaluan", ["tvm"] = "Tela-Masbuar", ["tvn"] = "Tavoyan", ["tvo"] = "Tidore", ["tvs"] = "Taveta", ["tvt"] = "Tutsa Naga", ["tvu"] = "Tunen", ["tvw"] = "Sedoa", ["tvx"] = "Taivoan", ["tvy"] = "Timor Pidgin", ["twa"] = "Twana", ["twb"] = "Western Tawbuid", ["twc"] = "Teshenawa", ["twe"] = "Teiwa", ["twf"] = "Taos", ["twg"] = "Tereweng", ["twh"] = "Tai Dón", ["twm"] = "Tawang Monpa", ["twn"] = "Twendi", ["two"] = "Tswapong", ["twp"] = "Ere", ["twq"] = "Tasawaq", ["twr"] = "Southwestern Tarahumara", ["twt"] = "Turiwára", ["twu"] = "Termanu", ["tww"] = "Tuwari", ["twy"] = "Tawoyan", ["txa"] = "Tombonuo", ["txb"] = "Tocharian B", ["txc"] = "Tsetsaut", ["txe"] = "Totoli", ["txg"] = "Tangut", ["txh"] = "Thracian", ["txi"] = "Ikpeng", ["txj"] = "Tarjumo", ["txm"] = "Tomini", ["txn"] = "West Tarangan", ["txo"] = "Toto", ["txq"] = "Tii", ["txr"] = "Tartessian", ["txs"] = "Tonsea", ["txt"] = "Citak", ["txu"] = "Kayapó", ["txx"] = "Tatana", ["ty"] = "Tahitian", ["tya"] = "Tauya", ["tye"] = "Kyenga", ["tyh"] = "O'du", ["tyi"] = "Teke-Tsaayi", ["tyj"] = "Tai Do", ["tyl"] = "Thu Lao", ["tyn"] = "Kombai", ["typ"] = "Kuku-Thaypan", ["tyr"] = "Tai Daeng", ["tys"] = "Sapa", ["tyt"] = "Tày Tac", ["tyu"] = "Kua", ["tyv"] = "Tuvan", ["tyx"] = "Teke-Tyee", ["tyz"] = "Tày", ["tza"] = "Tanzanian Sign Language", ["tzh"] = "Tzeltal", ["tzj"] = "Tz'utujil", ["tzl"] = "Talossan", ["tzm"] = "Central Atlas Tamazight", ["tzn"] = "Tugun", ["tzo"] = "Tzotzil", ["tzx"] = "Tabriak", ["uam"] = "Uamué", ["uan"] = "Kuan", ["uar"] = "Tairuma", ["uba"] = "Ubang", ["ubi"] = "Ubi", ["ubl"] = "Buhi'non Bikol", ["ubr"] = "Ubir", ["ubu"] = "Umbu-Ungu", ["uby"] = "Ubykh", ["uda"] = "Uda", ["ude"] = "Udihe", ["udg"] = "Muduga", ["udi"] = "Udi", ["udj"] = "Ujir", ["udl"] = "Uldeme", ["udm"] = "Udmurt", ["udu"] = "Uduk", ["ues"] = "Kioko", ["ufi"] = "Ufim", ["ug"] = "Uyghur", ["uga"] = "Ugaritic", ["ugb"] = "Kuku-Ugbanh", ["uge"] = "Ughele", ["ugn"] = "Ugandan Sign Language", ["ugo"] = "Gong", ["ugy"] = "Uruguayan Sign Language", ["uha"] = "Uhami", ["uhn"] = "Damal", ["uis"] = "Uisai", ["uiv"] = "Iyive", ["uji"] = "Tanjijili", ["uk"] = "Ukrainian", ["uka"] = "Kaburi", ["ukg"] = "Ukuriguma", ["ukh"] = "Ukhwejo", ["ukk"] = "Muak Sa-aak", ["ukl"] = "Ukrainian Sign Language", ["ukp"] = "Ukpe-Bayobiri", ["ukq"] = "Ukwa", ["uks"] = "Kaapor Sign Language", ["uku"] = "Ukue", ["ukw"] = "Ukwuani-Aboh-Ndoni", ["uky"] = "Kuuk Yak", ["ula"] = "Fungwa", ["ulb"] = "Olukumi", ["ulc"] = "Ulch", ["ule"] = "Lule", ["ulf"] = "Afra", ["uli"] = "Ulithian", ["ulk"] = "Meriam", ["ull"] = "Ullatan", ["ulm"] = "Ulumanda'", ["uln"] = "Unserdeutsch", ["ulu"] = "Uma' Lung", ["ulw"] = "Ulwa", ["uma"] = "Umatilla", ["umb"] = "Umbundu", ["umc"] = "Marrucinian", ["umd"] = "Umbindhamu", ["umg"] = "Umbuygamu", ["umi"] = "Ukit", ["umm"] = "Umon", ["umn"] = "Makyan Naga", ["umo"] = "Umotína", ["ump"] = "Umpila", ["umr"] = "Umbugarla", ["ums"] = "Pendau", ["umu"] = "Munsee", ["una"] = "North Watut", ["und"] = "Undetermined", ["und-isa"] = "Isaurian", ["und-kas"] = "Kassite", ["und-mil"] = "Milang", ["und-mmd"] = "Mimi of Decorse", ["und-mmn"] = "Mimi of Nachtigal", ["und-phi"] = "Philistine", ["und-wji"] = "Western Jicaque", ["une"] = "Uneme", ["ung"] = "Ngarinyin", ["unk"] = "Enawené-Nawé", ["unm"] = "Unami", ["unn"] = "Kurnai", ["unr"] = "Mundari", ["unu"] = "Unubahe", ["unx"] = "Munda", ["unz"] = "Unde Kaili", ["uok"] = "Uokha", ["uon"] = "Kulon", ["upi"] = "Umeda", ["upv"] = "Uripiv-Wala-Rano-Atchin", ["ur"] = "Urdu", ["ura"] = "Urarina", ["urb"] = "Urubú-Kaapor", ["urc"] = "Urningangg", ["ure"] = "Uru", ["urf"] = "Uradhi", ["urg"] = "Urigina", ["urh"] = "Urhobo", ["uri"] = "Urim", ["urj-fin-pro"] = "Proto-Finnic", ["urj-koo"] = "Old Komi", ["urj-kuk"] = "Kukkuzi", ["urj-kya"] = "Komi-Yazva", ["urj-mdv-pro"] = "Proto-Mordvinic", ["urj-prm-pro"] = "Proto-Permic", ["urj-pro"] = "Proto-Uralic", ["urj-ugr-pro"] = "Proto-Ugric", ["urk"] = "Urak Lawoi'", ["url"] = "Urali", ["urm"] = "Urapmin", ["urn"] = "Uruangnirin", ["uro"] = "Ura (New Guinea)", ["urp"] = "Uru-Pa-In", ["urr"] = "Lehalurup", ["urt"] = "Urat", ["uru"] = "Urumi", ["urv"] = "Uruava", ["urw"] = "Sop", ["urx"] = "Urimo", ["ury"] = "Orya", ["urz"] = "Uru-Eu-Wau-Wau", ["usa"] = "Usarufa", ["ush"] = "Ushojo", ["usi"] = "Usui", ["usk"] = "Usaghade", ["usp"] = "Uspanteco", ["uss"] = "Saare", ["usu"] = "Uya", ["uta"] = "Otank", ["ute"] = "Ute", ["uth"] = "Hun", ["utp"] = "Aba", ["utr"] = "Etulo", ["utu"] = "Utu", ["uum"] = "Urum", ["uun"] = "Kulon-Pazeh", ["uur"] = "Ura (Vanuatu)", ["uuu"] = "U", ["uve"] = "West Uvean", ["uvh"] = "Uri", ["uvl"] = "Lote", ["uwa"] = "Kuku-Uwanh", ["uya"] = "Doko-Uyanga", ["uz"] = "Uzbek", ["vaa"] = "Vaagri Booli", ["vae"] = "Vale", ["vag"] = "Vagla", ["vah"] = "Varhadi", ["vai"] = "Vai", ["vaj"] = "Sekele", ["val"] = "Vehes", ["vam"] = "Vanimo", ["van"] = "Valman", ["vao"] = "Vao", ["vap"] = "Vaiphei", ["var"] = "Huarijio", ["vas"] = "Vasavi", ["vau"] = "Vanuma", ["vav"] = "Varli", ["vay"] = "Vayu", ["vbb"] = "Southeast Babar", ["vbk"] = "Southwestern Bontoc", ["ve"] = "Venda", ["vec"] = "Venetian", ["ved"] = "Veddah", ["vem"] = "Vemgo-Mabas", ["veo"] = "Ventureño", ["vep"] = "Veps", ["ver"] = "Mom Jango", ["vgr"] = "Vaghri", ["vgt"] = "Flemish Sign Language", ["vi"] = "Vietnamese", ["vic"] = "Virgin Islands Creole", ["vid"] = "Vidunda", ["vif"] = "Vili", ["vig"] = "Viemo", ["vil"] = "Vilela", ["vis"] = "Vishavan", ["vit"] = "Viti", ["viv"] = "Iduna", ["vka"] = "Kariyarra", ["vki"] = "Ija-Zuba", ["vkj"] = "Kujarge", ["vkk"] = "Kaur", ["vkl"] = "Kulisusu", ["vkm"] = "Kamakan", ["vko"] = "Kodeoha", ["vkp"] = "Korlai Creole Portuguese", ["vkt"] = "Tenggarong Kutai Malay", ["vku"] = "Kurrama", ["vlp"] = "Valpei", ["vls"] = "West Flemish", ["vma"] = "Martuthunira", ["vmb"] = "Mbabaram", ["vmc"] = "Juxtlahuaca Mixtec", ["vmd"] = "Mudu Koraga", ["vme"] = "East Masela", ["vmf"] = "East Franconian", ["vmg"] = "Minigir", ["vmh"] = "Maraghei", ["vmi"] = "Miwa", ["vmj"] = "Ixtayutla Mixtec", ["vmk"] = "Makhuwa-Shirima", ["vml"] = "Malgana", ["vmm"] = "Mitlatongo Mixtec", ["vmp"] = "Soyaltepec Mazatec", ["vmq"] = "Soyaltepec Mixtec", ["vmr"] = "Marenje", ["vmu"] = "Muluridyi", ["vmv"] = "Valley Maidu", ["vmw"] = "Makhuwa", ["vmx"] = "Tamazola Mixtec", ["vmy"] = "Ayautla Mazatec", ["vmz"] = "Mazatlán Mazatec", ["vnk"] = "Lovono", ["vnm"] = "Neve'ei", ["vnp"] = "Vunapu", ["vo"] = "Volapük", ["vor"] = "Voro", ["vot"] = "Votic", ["vra"] = "Vera'a", ["vro"] = "Võro", ["vrs"] = "Varisi", ["vrt"] = "Banam Bay", ["vsi"] = "Moldova Sign Language", ["vsl"] = "Venezuelan Sign Language", ["vsv"] = "Valencian Sign Language", ["vto"] = "Vitou", ["vum"] = "Vumbu", ["vun"] = "Vunjo", ["vut"] = "Vute", ["vwa"] = "Awa (China)", ["wa"] = "Walloon", ["waa"] = "Walla Walla", ["wab"] = "Wab", ["wac"] = "Wasco-Wishram", ["wad"] = "Wandamen", ["waf"] = "Wakoná", ["wag"] = "Wa'ema", ["wah"] = "Watubela", ["waj"] = "Waffa", ["wal"] = "Wolaytta", ["wam"] = "Massachusett", ["wan"] = "Wan", ["wao"] = "Wappo", ["wap"] = "Wapishana", ["waq"] = "Wageman", ["war"] = "Waray-Waray", ["was"] = "Washo", ["wat"] = "Kaninuwa", ["wau"] = "Wauja", ["wav"] = "Waka", ["waw"] = "Waiwai", ["wax"] = "Watam", ["way"] = "Wayana", ["waz"] = "Wampur", ["wba"] = "Warao", ["wbb"] = "Wabo", ["wbe"] = "Waritai", ["wbf"] = "Wara", ["wbh"] = "Wanda", ["wbi"] = "Wanji", ["wbj"] = "Alagwa", ["wbk"] = "Waigali", ["wbl"] = "Wakhi", ["wbm"] = "Wa", ["wbp"] = "Warlpiri", ["wbq"] = "Waddar", ["wbr"] = "Wagdi", ["wbt"] = "Wanman", ["wbv"] = "Wajarri", ["wbw"] = "Woi", ["wca"] = "Yanomámi", ["wci"] = "Waci Gbe", ["wdd"] = "Wandji", ["wdg"] = "Wadaginam", ["wdj"] = "Wadjiginy", ["wdt"] = "Wendat", ["wdu"] = "Wadjigu", ["wdy"] = "Wadjabangayi", ["wea"] = "Wewaw", ["wec"] = "Wè Western", ["wed"] = "Wedau", ["weh"] = "Weh", ["wei"] = "Kiunum", ["wem"] = "Weme Gbe", ["weo"] = "Wemale", ["wer"] = "Weri", ["wes"] = "Cameroon Pidgin", ["wet"] = "Perai", ["weu"] = "Welaung", ["wew"] = "Weyewa", ["wfg"] = "Yafi", ["wga"] = "Wagaya", ["wgb"] = "Wagawaga", ["wgg"] = "Wangganguru", ["wgi"] = "Wahgi", ["wgo"] = "Waigeo", ["wgu"] = "Wirangu", ["wgy"] = "Warrgamay", ["wha"] = "Manusela", ["whg"] = "North Wahgi", ["whk"] = "Wahau Kenyah", ["whu"] = "Wahau Kayan", ["wib"] = "Southern Toussian", ["wic"] = "Wichita", ["wie"] = "Wik-Epa", ["wif"] = "Wik-Keyangan", ["wig"] = "Wik-Ngathana", ["wih"] = "Wik-Me'anha", ["wii"] = "Minidien", ["wij"] = "Wik-Iiyanh", ["wik"] = "Wikalkan", ["wil"] = "Wilawila", ["wim"] = "Wik-Mungkan", ["win"] = "Winnebago", ["wir"] = "Wiraféd", ["wiu"] = "Wiru", ["wiv"] = "Muduapa", ["wiy"] = "Wiyot", ["wja"] = "Waja", ["wji"] = "Warji", ["wka"] = "Kw'adza", ["wkb"] = "Kumbaran", ["wkd"] = "Mo", ["wkl"] = "Kalanadi", ["wku"] = "Kunduvadi", ["wkw"] = "Wakawaka", ["wky"] = "Wangkayutyuru", ["wla"] = "Walio", ["wlc"] = "Mwali Comorian", ["wle"] = "Wolane", ["wlg"] = "Kunbarlang", ["wli"] = "Waioli", ["wlk"] = "Wailaki", ["wll"] = "Wali (Sudan)", ["wlm"] = "Middle Welsh", ["wlo"] = "Wolio", ["wlr"] = "Wailapa", ["wls"] = "Wallisian", ["wlu"] = "Wuliwuli", ["wlv"] = "Wichí Lhamtés Vejoz", ["wlw"] = "Walak", ["wlx"] = "Wali (Ghana)", ["wly"] = "Waling", ["wmb"] = "Wambaya", ["wmc"] = "Wamas", ["wmd"] = "Mamaindé", ["wme"] = "Wambule", ["wmh"] = "Waima'a", ["wmi"] = "Wamin", ["wmm"] = "Maiwa (Indonesia)", ["wmn"] = "Waamwang", ["wmo"] = "Wam", ["wms"] = "Wambon", ["wmt"] = "Walmajarri", ["wmw"] = "Mwani", ["wmx"] = "Womo", ["wnb"] = "Wanambre", ["wnc"] = "Wantoat", ["wnd"] = "Wandarang", ["wne"] = "Waneci", ["wng"] = "Wanggom", ["wni"] = "Ndzwani Comorian", ["wnk"] = "Wanukaka", ["wnm"] = "Wanggamala", ["wno"] = "Wano", ["wnp"] = "Wanap", ["wnu"] = "Usan", ["wnw"] = "Wintu", ["wny"] = "Wanyi", ["wo"] = "Wolof", ["woa"] = "Tyaraity", ["wob"] = "Wè Northern", ["woc"] = "Wogeo", ["wod"] = "Wolani", ["woe"] = "Woleaian", ["wog"] = "Wogamusin", ["woi"] = "Kamang", ["wok"] = "Longto", ["wom"] = "Perema", ["won"] = "Wongo", ["woo"] = "Manombai", ["wor"] = "Woria", ["wos"] = "Hanga Hundi", ["wow"] = "Wawonii", ["wpc"] = "Wirö", ["wra"] = "Warapu", ["wrb"] = "Warluwara", ["wrg"] = "Warungu", ["wrh"] = "Wiradhuri", ["wri"] = "Wariyangga", ["wrk"] = "Garawa", ["wrl"] = "Warlmanpa", ["wrm"] = "Warumungu", ["wrn"] = "Warnang", ["wro"] = "Worora", ["wrp"] = "Waropen", ["wrr"] = "Wardaman", ["wrs"] = "Waris", ["wru"] = "Waru", ["wrv"] = "Waruna", ["wrw"] = "Gugu Warra", ["wrx"] = "Wae Rana", ["wrz"] = "Warray", ["wsa"] = "Warembori", ["wsi"] = "Wusi", ["wsk"] = "Waskia", ["wsr"] = "Owenia", ["wss"] = "Wasa", ["wsu"] = "Wasu", ["wsv"] = "Wotapuri-Katarqalai", ["wtf"] = "Watiwa", ["wth"] = "Wathaurong", ["wti"] = "Berta", ["wtk"] = "Watakataui", ["wtm"] = "Mewati", ["wtw"] = "Wotu", ["wua"] = "Wikngenchera", ["wub"] = "Wunambal", ["wud"] = "Wudu", ["wuh"] = "Wutunhua", ["wul"] = "Silimo", ["wum"] = "Wumbvu", ["wun"] = "Bungu", ["wur"] = "Wurrugu", ["wut"] = "Wutung", ["wuu"] = "Wu", ["wuv"] = "Wuvulu-Aua", ["wux"] = "Wulna", ["wuy"] = "Wauyai", ["wwa"] = "Waama", ["wwo"] = "Dorig", ["wwr"] = "Warrwa", ["www"] = "Wawa", ["wxa"] = "Waxianghua", ["wxw"] = "Wardandi", ["wya"] = "Wyandot", ["wyb"] = "Ngiyambaa", ["wyi"] = "Woiwurrung", ["wym"] = "Vilamovian", ["wyr"] = "Wayoró", ["wyy"] = "Western Fijian", ["xaa"] = "Andalusian Arabic", ["xab"] = "Sambe", ["xac"] = "Kachari", ["xad"] = "Adai", ["xae"] = "Aequian", ["xag"] = "Aghwan", ["xai"] = "Kaimbé", ["xaj"] = "Ararandewára", ["xak"] = "Maku", ["xal"] = "Kalmyk", ["xam"] = "ǀXam", ["xan"] = "Xamtanga", ["xao"] = "Khao", ["xap"] = "Apalachee", ["xaq"] = "Aquitanian", ["xar"] = "Karami", ["xas"] = "Kamassian", ["xat"] = "Katawixi", ["xau"] = "Kauwera", ["xav"] = "Xavante", ["xaw"] = "Kawaiisu", ["xay"] = "Kayan Mahakam", ["xbb"] = "Lower Burdekin", ["xbc"] = "Bactrian", ["xbd"] = "Bindal", ["xbe"] = "Bigambal", ["xbg"] = "Bunganditj", ["xbi"] = "Kombio", ["xbj"] = "Birrpayi", ["xbm"] = "Middle Breton", ["xbn"] = "Kenaboi", ["xbo"] = "Bulgar", ["xbp"] = "Bibbulman", ["xbr"] = "Kambera", ["xbw"] = "Kambiwá", ["xby"] = "Butchulla", ["xcb"] = "Cumbric", ["xcc"] = "Camunic", ["xce"] = "Celtiberian", ["xch"] = "Chemakum", ["xcl"] = "Old Armenian", ["xcm"] = "Comecrudo", ["xcn"] = "Cotoname", ["xco"] = "Khwarezmian", ["xcr"] = "Carian", ["xct"] = "Classical Tibetan", ["xcu"] = "Curonian", ["xcv"] = "Chuvan", ["xcw"] = "Coahuilteco", ["xcy"] = "Cayuse", ["xda"] = "Darkinjung", ["xdc"] = "Dacian", ["xdk"] = "Dharug", ["xdm"] = "Edomite", ["xdy"] = "Malayic Dayak", ["xeb"] = "Eblaite", ["xed"] = "Hdi", ["xeg"] = "ǁXegwi", ["xel"] = "Kelo", ["xem"] = "Kembayan", ["xep"] = "Epi-Olmec", ["xer"] = "Xerénte", ["xes"] = "Kesawai", ["xet"] = "Xetá", ["xeu"] = "Keoru-Ahia", ["xfa"] = "Faliscan", ["xga"] = "Galatian", ["xgb"] = "Gbin", ["xgd"] = "Gudang", ["xgf"] = "Gabrielino-Fernandeño", ["xgg"] = "Goreng", ["xgi"] = "Garingbal", ["xgl"] = "Galindan", ["xgm"] = "Darumbal", ["xgn-mgl"] = "Mongghul", ["xgn-mgr"] = "Mangghuer", ["xgn-pro"] = "Proto-Mongolic", ["xgn-rou"] = "Rouran", ["xgr"] = "Garza", ["xgu"] = "Unggumi", ["xgw"] = "Guwa", ["xh"] = "Xhosa", ["xha"] = "Harami", ["xhc"] = "Hunnic", ["xhd"] = "Hadrami", ["xhe"] = "Khetrani", ["xhm"] = "Middle Khmer", ["xhr"] = "Hernican", ["xht"] = "Hattic", ["xhu"] = "Hurrian", ["xhv"] = "Khua", ["xib"] = "Iberian", ["xii"] = "Xiri", ["xil"] = "Illyrian", ["xin"] = "Xinca", ["xir"] = "Xiriâna", ["xis"] = "Kisan", ["xiv"] = "Indus Valley Language", ["xiy"] = "Xipaya", ["xjb"] = "Minjungbal", ["xka"] = "Kalkoti", ["xkb"] = "Manigri-Kambolé Ede Nago", ["xkc"] = "Khoini", ["xkd"] = "Mendalam Kayan", ["xke"] = "Kereho", ["xkf"] = "Khengkha", ["xkg"] = "Kagoro", ["xki"] = "Kenyan Sign Language", ["xkj"] = "Kajali", ["xkk"] = "Kaco'", ["xkl"] = "Bakung", ["xkn"] = "Kayan River Kayan", ["xko"] = "Kiorr", ["xkp"] = "Kabatei", ["xkq"] = "Koroni", ["xkr"] = "Xakriabá", ["xks"] = "Kumbewaha", ["xkt"] = "Kantosi", ["xku"] = "Kaamba", ["xkv"] = "Kgalagadi", ["xkw"] = "Kembra", ["xkx"] = "Karore", ["xky"] = "Uma' Lasan", ["xkz"] = "Kurtöp", ["xla"] = "Kamula", ["xlb"] = "Loup B", ["xlc"] = "Lycian", ["xld"] = "Lydian", ["xle"] = "Lemnian", ["xlg"] = "Ancient Ligurian", ["xli"] = "Liburnian", ["xlo"] = "Loup A", ["xlp"] = "Lepontic", ["xls"] = "Lusitanian", ["xlu"] = "Luwian", ["xly"] = "Elymian", ["xmb"] = "Mbonga", ["xmc"] = "Makhuwa-Marrevone", ["xmd"] = "Mbudum", ["xme-ker"] = "Kermanic", ["xme-kls"] = "Kalasuri", ["xme-klt"] = "Kilit", ["xme-mid"] = "Middle Median", ["xme-old"] = "Old Median", ["xme-ott"] = "Old Tati", ["xme-taf"] = "Tafreshi", ["xme-ttc-pro"] = "Proto-Tatic", ["xmf"] = "Mingrelian", ["xmg"] = "Mengaka", ["xmh"] = "Kugu-Muminh", ["xmj"] = "Majera", ["xmk"] = "Ancient Macedonian", ["xml"] = "Malaysian Sign Language", ["xmm"] = "Manado Malay", ["xmo"] = "Morerebi", ["xmp"] = "Kuku-Mu'inh", ["xmq"] = "Kuku-Mangk", ["xmr"] = "Meroitic", ["xms"] = "Moroccan Sign Language", ["xmt"] = "Matbat", ["xmu"] = "Kamu", ["xmx"] = "Maden", ["xmy"] = "Mayaguduna", ["xmz"] = "Mori Bawah", ["xna"] = "Ancient North Arabian", ["xnb"] = "Kanakanabu", ["xnd-pro"] = "Proto-Na-Dene", ["xng"] = "Middle Mongol", ["xnh"] = "Kuanhua", ["xni"] = "Ngarigu", ["xnk"] = "Nganakarti", ["xnn"] = "Northern Kankanay", ["xnr"] = "Kangri", ["xns"] = "Kanashi", ["xnt"] = "Narragansett", ["xnu"] = "Nukunul", ["xny"] = "Nyiyaparli", ["xoc"] = "O'chi'chi'", ["xod"] = "Kokoda", ["xog"] = "Soga", ["xoi"] = "Kominimung", ["xok"] = "Xokleng", ["xom"] = "Komo", ["xon"] = "Konkomba", ["xoo"] = "Xukurú", ["xop"] = "Kopar", ["xor"] = "Korubo", ["xow"] = "Kowaki", ["xpa"] = "Pirriya", ["xpb"] = "Pyemmairre", ["xpc"] = "Pecheneg", ["xpd"] = "Paredarerme", ["xpe"] = "Liberia Kpelle", ["xpf"] = "Southeast Tasmanian", ["xpg"] = "Phrygian", ["xph"] = "Tyerrernotepanner", ["xpi"] = "Pictish", ["xpj"] = "Mpalitjanh", ["xpk"] = "Kulina", ["xpl"] = "Port Sorell", ["xpm"] = "Pumpokol", ["xpn"] = "Kapinawá", ["xpo"] = "Pochutec", ["xpp"] = "Puyo-Paekche", ["xpq"] = "Mohegan-Pequot", ["xpr"] = "Parthian", ["xps"] = "Pisidian", ["xpu"] = "Punic", ["xpv"] = "Tommeginne", ["xpw"] = "Peerapper", ["xpx"] = "Toogee", ["xpy"] = "Buyeo", ["xpz"] = "Bruny Island", ["xqa"] = "Karakhanid", ["xqt"] = "Qatabanian", ["xra"] = "Krahô", ["xrb"] = "Eastern Karaboro", ["xrd"] = "Gundungurra", ["xre"] = "Kreye", ["xrg"] = "Minang", ["xri"] = "Krikati-Timbira", ["xrm"] = "Armazic", ["xrn"] = "Arin", ["xrq"] = "Karranga", ["xrr"] = "Raetic", ["xrt"] = "Aranama-Tamique", ["xru"] = "Marriammu", ["xrw"] = "Karawa", ["xsa"] = "Sabaean", ["xsb"] = "Sambali", ["xsc-pro"] = "Proto-Scythian", ["xsc-sak-pro"] = "Proto-Saka", ["xsc-skw-pro"] = "Proto-Saka-Wakhi", ["xsd"] = "Sidetic", ["xse"] = "Sempan", ["xsh"] = "Shamang", ["xsi"] = "Sio", ["xsj"] = "Subi", ["xsl"] = "South Slavey", ["xsm"] = "Kasem", ["xsn"] = "Sanga (Nigeria)", ["xso"] = "Solano", ["xsp"] = "Silopi", ["xsq"] = "Makhuwa-Saka", ["xsr"] = "Sherpa", ["xss"] = "Assan", ["xsu"] = "Sanumá", ["xsv"] = "Sudovian", ["xsy"] = "Saisiyat", ["xta"] = "Alcozauca Mixtec", ["xtb"] = "Chazumba Mixtec", ["xtc"] = "Kadugli", ["xtd"] = "Diuxi-Tilantongo Mixtec", ["xte"] = "Ketengban", ["xth"] = "Yitha Yitha", ["xti"] = "Sinicahua Mixtec", ["xtj"] = "San Juan Teita Mixtec", ["xtl"] = "Tijaltepec Mixtec", ["xtm"] = "Magdalena Peñasco Mixtec", ["xtn"] = "Northern Tlaxiaco Mixtec", ["xto"] = "Tocharian A", ["xtp"] = "San Miguel Piedras Mixtec", ["xtq"] = "Tumshuqese", ["xtr"] = "Early Tripuri", ["xts"] = "Sindihui Mixtec", ["xtt"] = "Tacahua Mixtec", ["xtu"] = "Cuyamecalco Mixtec", ["xtv"] = "Thawa", ["xtw"] = "Tawandê", ["xty"] = "Yoloxochitl Mixtec", ["xtz"] = "Tasmanian", ["xua"] = "Alu Kurumba", ["xub"] = "Betta Kurumba", ["xud"] = "Umiida", ["xug"] = "Kunigami", ["xuj"] = "Jennu Kurumba", ["xul"] = "Ngunawal", ["xum"] = "Umbrian", ["xun"] = "Unggaranggu", ["xuo"] = "Kuo", ["xup"] = "Upper Umpqua", ["xur"] = "Urartian", ["xut"] = "Kuthant", ["xuu"] = "Khwe", ["xve"] = "Venetic", ["xvn"] = "Vandalic", ["xvo"] = "Volscian", ["xvs"] = "Vestinian", ["xwa"] = "Kwaza", ["xwc"] = "Woccon", ["xwd"] = "Wadi Wadi", ["xwe"] = "Xwela Gbe", ["xwg"] = "Kwegu", ["xwj"] = "Wajuk", ["xwk"] = "Wangkumara", ["xwl"] = "Western Xwla Gbe", ["xwo"] = "Written Oirat", ["xwr"] = "Kwerba Mamberamo", ["xww"] = "Wemba-Wemba", ["xxb"] = "Boro", ["xxk"] = "Ke'o", ["xxm"] = "Minkin", ["xxr"] = "Koropó", ["xxt"] = "Tambora", ["xya"] = "Yaygir", ["xyb"] = "Yandjibara", ["xyl"] = "Yalakalore", ["xyt"] = "Mayi-Thakurti", ["xyy"] = "Yorta Yorta", ["xzh"] = "Zhang-Zhung", ["xzm"] = "Zemgalian", ["xzp"] = "Ancient Zapotec", ["yaa"] = "Yaminahua", ["yab"] = "Yuhup", ["yac"] = "Pass Valley Yali", ["yad"] = "Yagua", ["yae"] = "Pumé", ["yaf"] = "Yaka", ["yag"] = "Yámana", ["yah"] = "Yazghulami", ["yai"] = "Yagnobi", ["yaj"] = "Banda-Yangere", ["yak"] = "Yakima", ["yal"] = "Yalunka", ["yam"] = "Yamba", ["yan"] = "Mayangna", ["yao"] = "Yao", ["yap"] = "Yapese", ["yaq"] = "Yaqui", ["yar"] = "Yabarana", ["yas"] = "Gunu", ["yat"] = "Yambeta", ["yau"] = "Yuwana", ["yav"] = "Yangben", ["yaw"] = "Yawalapití", ["yay"] = "Agwagwune", ["yaz"] = "Lokaa", ["yba"] = "Yala", ["ybb"] = "Yemba", ["ybe"] = "Western Yugur", ["ybh"] = "Yakkha", ["ybi"] = "Yamphu", ["ybj"] = "Hasha", ["ybk"] = "Bokha", ["ybl"] = "Yukuben", ["ybm"] = "Yaben", ["ybn"] = "Yabaâna", ["ybo"] = "Yabong", ["ybx"] = "Yawiyo", ["yby"] = "Yaweyuha", ["ych"] = "Chesu", ["ycl"] = "Lolopo", ["ycn"] = "Yucuna", ["ycp"] = "Chepya", ["ycr"] = "Yilan Creole", ["yda"] = "Yanda", ["yde"] = "Yangum Dey", ["ydg"] = "Yidgha", ["ydk"] = "Yoidik", ["yea"] = "Ravula", ["yec"] = "Yeniche", ["yee"] = "Yimas", ["yei"] = "Yeni", ["yej"] = "Yevanic", ["yen"] = "Yendang", ["yer"] = "Tarok", ["yes"] = "Yeskwa", ["yet"] = "Yetfa", ["yeu"] = "Yerukula", ["yev"] = "Yapunda", ["yey"] = "Yeyi", ["ygi"] = "Yiningayi", ["ygl"] = "Yangum Gel", ["ygm"] = "Yagomi", ["ygp"] = "Gepo", ["ygr"] = "Yagaria", ["ygs"] = "Yolngu Sign Language", ["ygu"] = "Yugul", ["ygw"] = "Yagwoia", ["yha"] = "Baha", ["yhl"] = "Hlepho Phowa", ["yi"] = "Yiddish", ["yia"] = "Yinggarda", ["yif"] = "Ache", ["yig"] = "Wusa Nasu", ["yii"] = "Yidiny", ["yij"] = "Yindjibarndi", ["yik"] = "Dongshanba Lalo", ["yil"] = "Yindjilandji", ["yim"] = "Yimchungru Naga", ["yin"] = "Yinchia", ["yip"] = "Pholo", ["yiq"] = "Miqie", ["yir"] = "North Awyu", ["yis"] = "Yis", ["yit"] = "Eastern Lalu", ["yiu"] = "Awu", ["yiv"] = "Northern Nisu", ["yix"] = "Axi Yi", ["yiy"] = "Yir-Yoront", ["yiz"] = "Azhe", ["yka"] = "Yakan", ["ykg"] = "Northern Yukaghir", ["ykh"] = "Khamnigan Mongol", ["yki"] = "Yoke", ["ykk"] = "Yakaikeke", ["ykl"] = "Khlula", ["ykm"] = "Kap", ["ykn"] = "Kua-nsi", ["yko"] = "Yasa", ["ykr"] = "Yekora", ["ykt"] = "Kathu", ["yku"] = "Kuamasi", ["yky"] = "Yakoma", ["yla"] = "Yaul", ["ylb"] = "Yaleba", ["yle"] = "Yele", ["ylg"] = "Yelogu", ["yli"] = "Angguruk Yali", ["yll"] = "Yil", ["ylm"] = "Limi", ["yln"] = "Langnian Buyang", ["ylo"] = "Naluo Yi", ["ylr"] = "Yalarnnga", ["ylu"] = "Aribwaung", ["yly"] = "Nyâlayu", ["ymb"] = "Yambes", ["ymc"] = "Southern Muji", ["ymd"] = "Muda", ["yme"] = "Yameo", ["ymg"] = "Yamongeri", ["ymh"] = "Mili", ["ymi"] = "Moji", ["ymk"] = "Makwe", ["yml"] = "Iamalele", ["ymm"] = "Maay", ["ymn"] = "Sunum", ["ymo"] = "Yangum Mon", ["ymp"] = "Yamap", ["ymq"] = "Qila Muji", ["ymr"] = "Malasar", ["yms"] = "Mysian", ["ymx"] = "Northern Muji", ["ymz"] = "Muzi", ["yna"] = "Aluo", ["ynd"] = "Yandruwandha", ["yne"] = "Lang'e", ["yng"] = "Yango", ["ynk"] = "Naukanski", ["ynl"] = "Yangulam", ["ynn"] = "Yana", ["yno"] = "Yong", ["yns"] = "Yansi", ["ynu"] = "Yahuna", ["yo"] = "Yoruba", ["yob"] = "Yoba", ["yog"] = "Yogad", ["yoi"] = "Yonaguni", ["yol"] = "Yola", ["yom"] = "Yombe", ["yon"] = "Yongkom", ["yox"] = "Yoron", ["yoy"] = "Yoy", ["ypa"] = "Phala", ["ypb"] = "Labo Phowa", ["ypg"] = "Phola", ["yph"] = "Phupha", ["ypk-pro"] = "Proto-Yupik", ["ypm"] = "Phuma", ["ypn"] = "Ani Phowa", ["ypo"] = "Alo Phola", ["ypp"] = "Phupa", ["ypz"] = "Phuza", ["yra"] = "Yerakai", ["yrb"] = "Yareba", ["yre"] = "Yaouré", ["yri"] = "Yarí", ["yrk"] = "Tundra Nenets", ["yrl"] = "Nheengatu", ["yrn"] = "Yerong", ["yro"] = "Yaroamë", ["yrw"] = "Yarawata", ["yry"] = "Yarluyandi", ["ysc"] = "Jassic", ["ysd"] = "Samatao", ["ysg"] = "Sonaga", ["ysl"] = "Yugoslavian Sign Language", ["ysn"] = "Sani", ["yso"] = "Nisi", ["ysp"] = "Southern Lolopo", ["ysr"] = "Sirenik", ["yss"] = "Yessan-Mayo", ["ysy"] = "Sanie", ["yta"] = "Talu", ["ytl"] = "Tanglang", ["ytp"] = "Thopho", ["ytw"] = "Yout Wam", ["yty"] = "Yatay", ["yua"] = "Yucatec Maya", ["yub"] = "Yugambal", ["yuc"] = "Yuchi", ["yue"] = "Cantonese", ["yuf"] = "Havasupai-Walapai-Yavapai", ["yug"] = "Yug", ["yui"] = "Yurutí", ["yuj"] = "Karkar-Yuri", ["yuk"] = "Yuki", ["yul"] = "Yulu", ["yum"] = "Yuma", ["yun"] = "Bena", ["yup"] = "Yukpa", ["yuq"] = "Yuqui", ["yur"] = "Yurok", ["yut"] = "Yopno", ["yuw"] = "Finisterre Yau", ["yux"] = "Southern Yukaghir", ["yuy"] = "East Yugur", ["yuz"] = "Yuracare", ["yva"] = "Yawa", ["yvt"] = "Yavitero", ["ywa"] = "Kalou", ["ywg"] = "Yinhawangka", ["ywl"] = "Western Lalu", ["ywn"] = "Yawanawa", ["ywq"] = "Nasu", ["ywr"] = "Yawuru", ["ywt"] = "Xishanba Lalo", ["ywu"] = "Wumeng Nasu", ["yww"] = "Yawarawarga", ["yxa"] = "Mayawali", ["yxg"] = "Yagara", ["yxl"] = "Yarli", ["yxm"] = "Yinwum", ["yxu"] = "Yuyu", ["yxy"] = "Yabula Yabula", ["yyu"] = "Torricelli Yau", ["yyz"] = "Ayizi", ["yzg"] = "E'ma Buyang", ["yzk"] = "Zokhuo", ["za"] = "Zhuang", ["zaa"] = "Sierra de Juárez Zapotec", ["zab"] = "San Juan Guelavía Zapotec", ["zac"] = "Ocotlán Zapotec", ["zad"] = "Cajonos Zapotec", ["zae"] = "Yareni Zapotec", ["zaf"] = "Ayoquesco Zapotec", ["zag"] = "Zaghawa", ["zah"] = "Zangwal", ["zai"] = "Isthmus Zapotec", ["zaj"] = "Zaramo", ["zak"] = "Zanaki", ["zal"] = "Zauzou", ["zam"] = "Central Mahuatlán Zapoteco", ["zao"] = "Ozolotepec Zapotec", ["zap"] = "Zapotec", ["zaq"] = "Aloápam Zapotec", ["zar"] = "Rincón Zapotec", ["zas"] = "Santo Domingo Albarradas Zapotec", ["zat"] = "Tabaa Zapotec", ["zau"] = "Zangskari", ["zav"] = "Yatzachi Zapotec", ["zaw"] = "Mitla Zapotec", ["zax"] = "Xadani Zapotec", ["zay"] = "Zayse-Zergulla", ["zaz"] = "Zari", ["zbt"] = "Batui", ["zca"] = "Coatecas Altas Zapotec", ["zdj"] = "Ngazidja Comorian", ["zea"] = "Zealandic", ["zeg"] = "Zenag", ["zen"] = "Zenaga", ["zga"] = "Kinga", ["zgh"] = "Moroccan Amazigh", ["zgr"] = "Magori", ["zh"] = "Chinese", ["zhb"] = "Zhaba", ["zhi"] = "Zhire", ["zhn"] = "Nong Zhuang", ["zhw"] = "Zhoa", ["zhx-min-pro"] = "Proto-Min", ["zhx-sht"] = "Shaozhou Tuhua", ["zhx-tai"] = "Taishanese", ["zhx-teo"] = "Teochew", ["zia"] = "Zia", ["zib"] = "Zimbabwe Sign Language", ["zik"] = "Zimakani", ["zil"] = "Zialo", ["zim"] = "Mesme", ["zin"] = "Zinza", ["zir"] = "Ziriya", ["ziw"] = "Zigula", ["ziz"] = "Zizilivakan", ["zka"] = "Kaimbulawa", ["zkb"] = "Koibal", ["zkg"] = "Goguryeo", ["zkh"] = "Khorezmian Turkic", ["zkk"] = "Karankawa", ["zko"] = "Kott", ["zkp"] = "São Paulo Kaingáng", ["zkr"] = "Zakhring", ["zkt"] = "Khitan", ["zku"] = "Kaurna", ["zkv"] = "Krevinian", ["zkz"] = "Khazar", ["zle-ono"] = "Old Novgorodian", ["zle-ort"] = "Old Ruthenian", ["zlw-ocs"] = "Old Czech", ["zlw-opl"] = "Old Polish", ["zlw-pom-pro"] = "Proto-Pomeranian", ["zlw-slv"] = "Slovincian", ["zma"] = "Manda (Australia)", ["zmb"] = "Zimba", ["zmc"] = "Margany", ["zmd"] = "Maridan", ["zme"] = "Mangerr", ["zmf"] = "Mfinu", ["zmg"] = "Marti Ke", ["zmh"] = "Makolkol", ["zmi"] = "Negeri Sembilan Malay", ["zmj"] = "Maridjabin", ["zmk"] = "Mandandanyi", ["zml"] = "Madngele", ["zmm"] = "Marimanindji", ["zmn"] = "Mbangwe", ["zmo"] = "Molo", ["zmp"] = "Mbuun", ["zmq"] = "Mituku", ["zmr"] = "Maranungku", ["zms"] = "Mbesa", ["zmt"] = "Maringarr", ["zmu"] = "Muruwari", ["zmv"] = "Mbariman-Gudhinma", ["zmw"] = "Mbo (Congo)", ["zmx"] = "Bomitaba", ["zmy"] = "Mariyedi", ["zmz"] = "Mbandja", ["zna"] = "Zan Gula", ["zne"] = "Zande", ["zng"] = "Mang", ["znk"] = "Manangkari", ["zns"] = "Mangas", ["zoc"] = "Copainalá Zoque", ["zoh"] = "Chimalapa Zoque", ["zom"] = "Zou", ["zoo"] = "Asunción Mixtepec Zapotec", ["zoq"] = "Tabasco Zoque", ["zor"] = "Rayón Zoque", ["zos"] = "Francisco León Zoque", ["zpa"] = "Lachiguiri Zapotec", ["zpb"] = "Yautepec Zapotec", ["zpc"] = "Choapan Zapotec", ["zpd"] = "Southeastern Ixtlán Zapotec", ["zpe"] = "Petapa Zapotec", ["zpf"] = "San Pedro Quiatoni Zapotec", ["zpg"] = "Guevea de Humboldt Zapotec", ["zph"] = "Totomachapan Zapotec", ["zpi"] = "Santa María Quiegolani Zapotec", ["zpj"] = "Quiavicuzas Zapotec", ["zpk"] = "Tlacolulita Zapotec", ["zpl"] = "Lachixío Zapotec", ["zpm"] = "Mixtepec Zapotec", ["zpn"] = "Santa Inés Yatzechi Zapotec", ["zpo"] = "Amatlán Zapotec", ["zpp"] = "El Alto Zapotec", ["zpq"] = "Zoogocho Zapotec", ["zpr"] = "Santiago Xanica Zapotec", ["zps"] = "Coatlán Zapotec", ["zpt"] = "San Vicente Coatlán Zapotec", ["zpu"] = "Yalálag Zapotec", ["zpv"] = "Chichicapan Zapotec", ["zpw"] = "Zaniza Zapotec", ["zpx"] = "San Baltazar Loxicha Zapotec", ["zpy"] = "Mazaltepec Zapotec", ["zpz"] = "Texmelucan Zapotec", ["zra"] = "Kaya", ["zrg"] = "Mirgan", ["zrn"] = "Zirenkel", ["zro"] = "Záparo", ["zrs"] = "Mairasi", ["zsa"] = "Sarasira", ["zsk"] = "Kaskean", ["zsl"] = "Zambian Sign Language", ["zsr"] = "Southern Rincon Zapotec", ["zsu"] = "Sukurum", ["zte"] = "Elotepec Zapotec", ["ztg"] = "Xanaguía Zapotec", ["ztl"] = "Lapaguía-Guivini Zapotec", ["ztm"] = "San Agustín Mixtepec Zapotec", ["ztn"] = "Santa Catarina Albarradas Zapotec", ["ztp"] = "Loxicha Zapotec", ["ztq"] = "Quioquitani-Quierí Zapotec", ["zts"] = "Tilquiapan Zapotec", ["ztt"] = "Tejalapan Zapotec", ["ztu"] = "San Pablo Güilá Zapotec", ["ztx"] = "Zaachila Zapotec", ["zty"] = "Yatee Zapotec", ["zu"] = "Zulu", ["zua"] = "Zeem", ["zuh"] = "Tokano", ["zum"] = "Kumzari", ["zun"] = "Zuni", ["zuy"] = "Zumaya", ["zwa"] = "Zay", ["zyp"] = "Zyphe", ["zza"] = "Zazaki", ["zzj"] = "Zuojiang Zhuang", } apkqiomqb44ezsqebbp1m7dk0yuvftc 487554 487551 2026-09-01T15:27:08Z SM7 6218 असमिया, हिंदी, बिहारी 487554 Scribunto text/plain return { ["aa"] = "Afar", ["aaa"] = "Ghotuo", ["aab"] = "Alumu-Tesu", ["aac"] = "Ari", ["aad"] = "Amal", ["aaf"] = "Aranadan", ["aag"] = "Ambrak", ["aah"] = "Abu' Arapesh", ["aai"] = "Arifama-Miniafia", ["aak"] = "Ankave", ["aal"] = "Afade", ["aan"] = "Anambé", ["aap"] = "Pará Arára", ["aaq"] = "Penobscot", ["aas"] = "Aasax", ["aau"] = "Abau", ["aav-khs-pro"] = "Proto-Khasian", ["aav-nic-pro"] = "Proto-Nicobarese", ["aav-pkl-pro"] = "Proto-Pnar-Khasi-Lyngngam", ["aav-pro"] = "Proto-Austroasiatic", ["aaw"] = "Solong", ["aax"] = "Mandobo Atas", ["aaz"] = "Amarasi", ["ab"] = "Abkhaz", ["aba"] = "Abé", ["abb"] = "Bankon", ["abc"] = "Ambala Ayta", ["abd"] = "Camarines Norte Agta", ["abe"] = "Abenaki", ["abf"] = "Abai Sungai", ["abg"] = "Abaga", ["abh"] = "Tajiki Arabic", ["abi"] = "Abidji", ["abj"] = "Aka-Bea", ["abl"] = "Abung", ["abm"] = "Abanyom", ["abn"] = "Abua", ["abo"] = "Abon", ["abp"] = "Abenlen Ayta", ["abq"] = "Abaza", ["abr"] = "Abron", ["abs"] = "Ambonese Malay", ["abt"] = "Ambulas", ["abu"] = "Abure", ["abv"] = "Baharna Arabic", ["abw"] = "Pal", ["abx"] = "Inabaknon", ["aby"] = "Aneme Wake", ["abz"] = "Abui", ["aca"] = "Achagua", ["acb"] = "Áncá", ["acd"] = "Gikyode", ["ace"] = "Acehnese", ["ach"] = "Acholi", ["aci"] = "Aka-Cari", ["ack"] = "Aka-Kora", ["acl"] = "Akar-Bale", ["acm"] = "Iraqi Arabic", ["acn"] = "Achang", ["acp"] = "Eastern Acipa", ["acr"] = "Achi", ["acs"] = "Acroá", ["acu"] = "Achuar", ["acv"] = "Achumawi", ["acw"] = "Hijazi Arabic", ["acx"] = "Omani Arabic", ["acy"] = "Cypriot Arabic", ["acz"] = "Acheron", ["ada"] = "Adangme", ["adb"] = "Adabe", ["add"] = "Dzodinka", ["ade"] = "Adele", ["adf"] = "Dhofari Arabic", ["adg"] = "Andegerebinha", ["adh"] = "Adhola", ["adi"] = "Adi", ["adj"] = "Adioukrou", ["adl"] = "Galo", ["adn"] = "Adang", ["ado"] = "Abu", ["adp"] = "Adap", ["adq"] = "Adangbe", ["adr"] = "Adonara", ["ads"] = "Adamorobe Sign Language", ["adt"] = "Adnyamathanha", ["adu"] = "Aduge", ["adw"] = "Amondawa", ["ady"] = "Adyghe", ["adz"] = "Adzera", ["ae"] = "Avestan", ["aea"] = "Areba", ["aeb"] = "Tunisian Arabic", ["aed"] = "Argentine Sign Language", ["aee"] = "Northeast Pashayi", ["aek"] = "Haeke", ["ael"] = "Ambele", ["aem"] = "Arem", ["aen"] = "Armenian Sign Language", ["aeq"] = "Aer", ["aer"] = "Eastern Arrernte", ["aes"] = "Alsea", ["aeu"] = "Akeu", ["aew"] = "Ambakich", ["aey"] = "Amele", ["aez"] = "Aeka", ["af"] = "Afrikaans", ["afa-pro"] = "Proto-Afroasiatic", ["afb"] = "Gulf Arabic", ["afd"] = "Andai", ["afe"] = "Putukwam", ["afg"] = "Afghan Sign Language", ["afh"] = "Afrihili", ["afi"] = "Akrukay", ["afk"] = "Nanubae", ["afn"] = "Defaka", ["afo"] = "Eloyi", ["afp"] = "Tapei", ["afs"] = "Afro-Seminole Creole", ["aft"] = "Afitti", ["afu"] = "Awutu", ["afz"] = "Obokuitai", ["aga"] = "Aguano", ["agb"] = "Legbo", ["agc"] = "Agatu", ["agd"] = "Agarabi", ["age"] = "Angal", ["agf"] = "Arguni", ["agg"] = "Angor", ["agh"] = "Ngelima", ["agi"] = "Agariya", ["agj"] = "Argobba", ["agk"] = "Isarog Agta", ["agl"] = "Fembe", ["agm"] = "Angaataha", ["agn"] = "Agutaynen", ["ago"] = "Tainae", ["agq"] = "Aghem", ["agr"] = "Aguaruna", ["ags"] = "Esimbi", ["agt"] = "Central Cagayan Agta", ["agu"] = "Aguacateca", ["agv"] = "Remontado Agta", ["agw"] = "Kahua", ["agx"] = "Aghul", ["agy"] = "Southern Alta", ["agz"] = "Mount Iriga Agta", ["aha"] = "Ahanta", ["ahb"] = "Axamb", ["ahg"] = "Qimant", ["ahh"] = "Aghu", ["ahi"] = "Tiagbamrin Aizi", ["ahk"] = "Akha", ["ahl"] = "Igo", ["ahm"] = "Mobumrin Aizi", ["ahn"] = "Àhàn", ["aho"] = "Ahom", ["ahp"] = "Aproumu Aizi", ["ahr"] = "Ahirani", ["ahs"] = "Ashe", ["aht"] = "Ahtna", ["aia"] = "Arosi", ["aib"] = "Aynu", ["aic"] = "Ainbai", ["aid"] = "Alngith", ["aie"] = "Amara", ["aif"] = "Agi", ["aig"] = "Antigua and Barbuda Creole English", ["aih"] = "Ai-Cham", ["aii"] = "Assyrian Neo-Aramaic", ["aij"] = "Lishanid Noshan", ["aik"] = "Ake", ["ail"] = "Aimele", ["aim"] = "Aimol", ["ain"] = "Ainu", ["aio"] = "Aiton", ["aip"] = "Burumakok", ["air"] = "Airoran", ["ait"] = "Arikem", ["aiw"] = "Aari", ["aix"] = "Aighon", ["aiy"] = "Ali", ["aja"] = "Aja", ["ajg"] = "Adja", ["aji"] = "Ajië", ["ajn"] = "Andajin", ["ajp"] = "South Levantine Arabic", ["ajw"] = "Ajawa", ["ajz"] = "Amri Karbi", ["ak"] = "Akan", ["akb"] = "Angkola Batak", ["akc"] = "Mpur", ["akd"] = "Ukpet-Ehom", ["ake"] = "Akawaio", ["akf"] = "Akpa", ["akg"] = "Anakalangu", ["akh"] = "Angal Heneng", ["aki"] = "Aiome", ["akj"] = "Jeru", ["akk"] = "Akkadian", ["akl"] = "Aklanon", ["akm"] = "Aka-Bo", ["ako"] = "Akurio", ["akp"] = "Siwu", ["akq"] = "Ak", ["akr"] = "Araki", ["aks"] = "Akaselem", ["akt"] = "Akolet", ["aku"] = "Akum", ["akv"] = "Akhvakh", ["akw"] = "Akwa", ["akx"] = "Aka-Kede", ["aky"] = "Aka-Kol", ["akz"] = "Alabama", ["ala"] = "Alago", ["alc"] = "Kawésqar", ["ald"] = "Alladian", ["ale"] = "Aleut", ["alf"] = "Alege", ["alg-aga"] = "Agawam", ["alg-pro"] = "Proto-Algonquian", ["alh"] = "Alawa", ["ali"] = "Amaimon", ["alj"] = "Alangan", ["alk"] = "Alak", ["all"] = "Allar", ["alm"] = "Amblong", ["alo"] = "Larike-Wakasihu", ["alp"] = "Alune", ["alq"] = "Algonquin", ["alr"] = "Alutor", ["alt"] = "Southern Altai", ["alu"] = "'Are'are", ["alv-ama"] = "Amasi", ["alv-bgu"] = "Baïnounk Gubëeher", ["alv-bua-pro"] = "Proto-Bua", ["alv-cng-pro"] = "Proto-Cangin", ["alv-edk-pro"] = "Proto-Edekiri", ["alv-edo-pro"] = "Proto-Edoid", ["alv-fli-pro"] = "Proto-Fali", ["alv-gbe-pro"] = "Proto-Gbe", ["alv-gng-pro"] = "Proto-Guang", ["alv-gtm-pro"] = "Proto-Central Togo", ["alv-gwa"] = "Gwara", ["alv-hei-pro"] = "Proto-Heiban", ["alv-ido-pro"] = "Proto-Idomoid", ["alv-igb-pro"] = "Proto-Igboid", ["alv-kwa-pro"] = "Proto-Kwa", ["alv-mum-pro"] = "Proto-Mumuye", ["alv-nup-pro"] = "Proto-Nupoid", ["alv-pro"] = "Proto-Atlantic-Congo", ["alv-von-pro"] = "Proto-Volta-Niger", ["alv-yor-pro"] = "Proto-Yoruba", ["alv-yrd-pro"] = "Proto-Yoruboid", ["alw"] = "Alaba", ["alx"] = "Amol", ["aly"] = "Alyawarr", ["alz"] = "Alur", ["am"] = "Amharic", ["ama"] = "Amanayé", ["amb"] = "Ambo", ["amc"] = "Amahuaca", ["ame"] = "Yanesha'", ["amf"] = "Hamer-Banna", ["amg"] = "Amurdag", ["ami"] = "Amis", ["amj"] = "Amdang", ["amk"] = "Ambai", ["aml"] = "War-Jaintia", ["amm"] = "Ama", ["amn"] = "Amanab", ["amo"] = "Amo", ["amp"] = "Alamblak", ["amq"] = "Amahai", ["amr"] = "Amarakaeri", ["ams"] = "Southern Amami-Oshima", ["amt"] = "Amto", ["amu"] = "Guerrero Amuzgo", ["amv"] = "Ambelau", ["amw"] = "Western Neo-Aramaic", ["amx"] = "Anmatyerre", ["amy"] = "Ami", ["amz"] = "Atampaya", ["an"] = "Aragonese", ["ana"] = "Andaqui", ["anb"] = "Andoa", ["anc"] = "Ngas", ["and"] = "Ansus", ["ane"] = "Xârâcùù", ["anf"] = "Animere", ["ang"] = "Old English", ["anh"] = "Nend", ["ani"] = "Andi", ["anj"] = "Anor", ["ank"] = "Goemai", ["anl"] = "Anu", ["anm"] = "Anal", ["ann"] = "Obolo", ["ano"] = "Andoque", ["anp"] = "Angika", ["anq"] = "Jarawa", ["anr"] = "Andh", ["ans"] = "Anserma", ["ant"] = "Antakarinya", ["anu"] = "Anuak", ["anv"] = "Denya", ["anw"] = "Anaang", ["anx"] = "Andra-Hus", ["any"] = "Anyi", ["anz"] = "Anem", ["aoa"] = "Angolar", ["aob"] = "Abom", ["aoc"] = "Pemon", ["aod"] = "Andarum", ["aoe"] = "Angal Enen", ["aof"] = "Bragat", ["aog"] = "Angoram", ["aoi"] = "Anindilyakwa", ["aoj"] = "Mufian", ["aok"] = "Arhö", ["aol"] = "Alor", ["aom"] = "Ömie", ["aon"] = "Bumbita Arapesh", ["aor"] = "Aore", ["aos"] = "Taikat", ["aot"] = "Atong (India)", ["aou"] = "A'ou", ["aox"] = "Atorada", ["aoz"] = "Uab Meto", ["apa-pro"] = "Proto-Apachean", ["apb"] = "Sa'a", ["apc"] = "North Levantine Arabic", ["apd"] = "Sudanese Arabic", ["ape"] = "Bukiyip", ["apf"] = "Pahanan Agta", ["apg"] = "Ampanang", ["aph"] = "Athpare", ["api"] = "Apiaká", ["apj"] = "Jicarilla", ["apk"] = "Plains Apache", ["apl"] = "Lipan", ["apm"] = "Chiricahua", ["apn"] = "Apinayé", ["apo"] = "Ambul", ["app"] = "Apma", ["apq"] = "A-Pucikwar", ["apr"] = "Arop-Lokep", ["aps"] = "Arop-Sissano", ["apt"] = "Apatani", ["apu"] = "Apurinã", ["apv"] = "Alapmunte", ["apw"] = "Western Apache", ["apx"] = "Aputai", ["apy"] = "Apalaí", ["apz"] = "Safeyoka", ["aqc"] = "Archi", ["aqd"] = "Ampari Dogon", ["aqg"] = "Arigidi", ["aql-pro"] = "Proto-Algic", ["aqm"] = "Atohwaim", ["aqn"] = "Northern Alta", ["aqp"] = "Atakapa", ["aqr"] = "Arhâ", ["aqt"] = "Angaité", ["aqz"] = "Akuntsu", ["ar"] = "Arabic", ["arc"] = "Aramaic", ["ard"] = "Arabana", ["are"] = "Western Arrernte", ["arh"] = "Arhuaco", ["ari"] = "Arikara", ["arj"] = "Arapaso", ["ark"] = "Arikapú", ["arl"] = "Arabela", ["arn"] = "Mapudungun", ["aro"] = "Araona", ["arp"] = "Arapaho", ["arq"] = "Algerian Arabic", ["arr"] = "Arara-Karo", ["ars"] = "Najdi Arabic", ["art-blk"] = "Bolak", ["art-bsp"] = "Black Speech", ["art-com"] = "Communicationssprache", ["art-dtk"] = "Dothraki", ["art-elo"] = "Eloi", ["art-gld"] = "Goa'uld", ["art-lap"] = "Lapine", ["art-man"] = "Mandalorian", ["art-mun"] = "Mundolinco", ["art-nav"] = "Na'vi", ["art-nox"] = "Noxilo", ["art-una"] = "Unas", ["aru"] = "Arua", ["arv"] = "Arbore", ["arw"] = "Arawak", ["arx"] = "Aruá", ["ary"] = "Moroccan Arabic", ["arz"] = "Egyptian Arabic", ["as"] = "असमिया", ["asa"] = "Pare", ["asb"] = "Assiniboine", ["asc"] = "Casuarina Coast Asmat", ["ase"] = "American Sign Language", ["asf"] = "Auslan", ["asg"] = "Cishingini", ["ash"] = "Abishira", ["asi"] = "Buruwai", ["asj"] = "Nsari", ["ask"] = "Ashkun", ["asl"] = "Asilulu", ["asn"] = "Xingú Asuriní", ["aso"] = "Dano", ["asp"] = "Algerian Sign Language", ["asq"] = "Austrian Sign Language", ["asr"] = "Asuri", ["ass"] = "Ipulo", ["ast"] = "Asturian", ["asu"] = "Tocantins Asurini", ["asv"] = "Asoa", ["asw"] = "Australian Aboriginal Sign Language", ["asx"] = "Muratayak", ["asy"] = "Yaosakor Asmat", ["asz"] = "As", ["ata"] = "Pele-Ata", ["atb"] = "Zaiwa", ["atc"] = "Atsahuaca", ["atd"] = "Ata Manobo", ["ate"] = "Atemble", ["atg"] = "Okpela", ["ath-nic"] = "Nicola", ["ath-pro"] = "Proto-Athabaskan", ["ati"] = "Attié", ["atj"] = "Atikamekw", ["atk"] = "Ati", ["atl"] = "Mount Iraya Agta", ["atm"] = "Ata", ["ato"] = "Atong (Cameroon)", ["atp"] = "Pudtol Atta", ["atq"] = "Aralle-Tabulahan", ["atr"] = "Waimiri-Atroari", ["ats"] = "Gros Ventre", ["att"] = "Pamplona Atta", ["atu"] = "Reel", ["atv"] = "Northern Altai", ["atw"] = "Atsugewi", ["atx"] = "Arutani", ["aty"] = "Aneityum", ["atz"] = "Arta", ["aua"] = "Asumboa", ["aub"] = "Alugu", ["auc"] = "Huaorani", ["aud"] = "Anuta", ["auf-pro"] = "Proto-Arawa", ["aug"] = "Aguna", ["auh"] = "Aushi", ["aui"] = "Anuki", ["auj"] = "Awjila", ["auk"] = "Heyo", ["aul"] = "Aulua", ["aum"] = "Asu", ["aun"] = "Molmo One", ["auo"] = "Auyokawa", ["aup"] = "Makayam", ["auq"] = "Anus", ["aur"] = "Aruek", ["aus-alu"] = "Alungul", ["aus-and"] = "Andjingith", ["aus-ang"] = "Angkula", ["aus-arn-pro"] = "Proto-Arnhem", ["aus-bra"] = "Barranbinya", ["aus-brm"] = "Barunggam", ["aus-cww-pro"] = "Proto-Central New South Wales", ["aus-dal-pro"] = "Proto-Daly", ["aus-guw"] = "Guwar", ["aus-lsw"] = "Little Swanport", ["aus-mbi"] = "Mbiywom", ["aus-ngk"] = "Ngkoth", ["aus-nyu-pro"] = "Proto-Nyulnyulan", ["aus-pam-pro"] = "Proto-Pama-Nyungan", ["aus-tul"] = "Tulua", ["aus-uwi"] = "Uwinymil", ["aus-wdj-pro"] = "Proto-Iwaidjan", ["aus-won"] = "Wong-gie", ["aus-wul"] = "Wulguru", ["aus-ynk"] = "Yangkaal", ["aut"] = "Austral", ["auu"] = "Auye", ["auw"] = "Awyi", ["aux"] = "Aurá", ["auy"] = "Auyana", ["auz"] = "Uzbeki Arabic", ["av"] = "Avar", ["avb"] = "Avau", ["avd"] = "Alviri-Vidari", ["avi"] = "Avikam", ["avk"] = "Kotava", ["avm"] = "Angkamuthi", ["avn"] = "Avatime", ["avo"] = "Agavotaguerra", ["avs"] = "Aushiri", ["avt"] = "Au", ["avu"] = "Avokaya", ["avv"] = "Avá-Canoeiro", ["awa"] = "Awadhi", ["awb"] = "Awa (New Guinea)", ["awc"] = "Cicipu", ["awd-ama"] = "Amarizana", ["awd-amc-pro"] = "Proto-Amuesha-Chamicuro", ["awd-ana"] = "Anauyá", ["awd-apo"] = "Apolista", ["awd-cav"] = "Cavere", ["awd-gnu"] = "Guinau", ["awd-kar"] = "Cariay", ["awd-kaw"] = "Kawishana", ["awd-kmp-pro"] = "Proto-Kampa", ["awd-kus"] = "Kustenau", ["awd-man"] = "Manao", ["awd-mar"] = "Marawan", ["awd-mpr"] = "Maypure", ["awd-mrt"] = "Mariaté", ["awd-nwk-pro"] = "Proto-Nawiki", ["awd-pai"] = "Paikoneka", ["awd-pas"] = "Passé", ["awd-pro"] = "Proto-Arawak", ["awd-prw-pro"] = "Proto-Paresi-Waura", ["awd-she"] = "Shebayo", ["awd-taa-pro"] = "Proto-Ta-Arawak", ["awd-wai"] = "Wainumá", ["awd-yum"] = "Yumana", ["awe"] = "Awetí", ["awg"] = "Anguthimri", ["awh"] = "Awbono", ["awi"] = "Aekyom", ["awk"] = "Awabakal", ["awm"] = "Arawum", ["awn"] = "Awngi", ["awo"] = "Awak", ["awr"] = "Awera", ["aws"] = "South Awyu", ["awt"] = "Araweté", ["awu"] = "Central Awyu", ["awv"] = "Jair Awyu", ["aww"] = "Awun", ["awx"] = "Awara", ["awy"] = "Edera Awyu", ["axb"] = "Abipon", ["axe"] = "Ayerrerenge", ["axg"] = "Mato Grosso Arára", ["axk"] = "Aka (Central Africa)", ["axl"] = "Lower Southern Aranda", ["axm"] = "Middle Armenian", ["axx"] = "Xaragure", ["ay"] = "Aymara", ["aya"] = "Awar", ["ayb"] = "Ayizo", ["ayd"] = "Ayabadhu", ["aye"] = "Ayere", ["ayg"] = "Nyanga (Togo)", ["ayi"] = "Leyigha", ["ayk"] = "Akuku", ["ayl"] = "Libyan Arabic", ["ayn"] = "Yemeni Arabic", ["ayo"] = "Ayoreo", ["ayp"] = "North Mesopotamian Arabic", ["ayq"] = "Ayi", ["ays"] = "Sorsogon Ayta", ["ayt"] = "Bataan Ayta", ["ayu"] = "Ayu", ["ayy"] = "Tayabas Ayta", ["ayz"] = "Maybrat", ["az"] = "Azerbaijani", ["aza"] = "Azha", ["azc-caz"] = "Cazcan", ["azc-cup-pro"] = "Proto-Cupan", ["azc-ktn"] = "Kitanemuk", ["azc-nah-pro"] = "Proto-Nahuan", ["azc-num-pro"] = "Proto-Numic", ["azc-pro"] = "Proto-Uto-Aztecan", ["azc-tak-pro"] = "Proto-Takic", ["azc-tat"] = "Tataviam", ["azd"] = "Eastern Durango Nahuatl", ["azg"] = "San Pedro Amuzgos Amuzgo", ["azm"] = "Ipalapa Amuzgo", ["azn"] = "Western Durango Nahuatl", ["azo"] = "Awing", ["azt"] = "Faire Atta", ["azz"] = "Highland Puebla Nahuatl", ["ba"] = "Bashkir", ["baa"] = "Babatana", ["bab"] = "Bainouk-Gunyuño", ["bac"] = "Badui", ["bae"] = "Baré", ["baf"] = "Nubaca", ["bag"] = "Tuki", ["bah"] = "Bahamian Creole", ["baj"] = "Barakai", ["bal"] = "Baluchi", ["ban"] = "Balinese", ["bao"] = "Waimaha", ["bap"] = "Bantawa", ["bar"] = "Bavarian", ["bas"] = "Basaa", ["bau"] = "Badanchi", ["bav"] = "Babungo", ["baw"] = "Bambili-Bambui", ["bax"] = "Bamum", ["bay"] = "Batuley", ["bba"] = "Baatonum", ["bbb"] = "Barai", ["bbc"] = "Toba Batak", ["bbd"] = "Bau", ["bbe"] = "Bangba", ["bbf"] = "Baibai", ["bbg"] = "Barama", ["bbh"] = "Bugan", ["bbi"] = "Barombi", ["bbj"] = "Ghomala'", ["bbk"] = "Babanki", ["bbl"] = "Bats", ["bbm"] = "Babango", ["bbn"] = "Uneapa", ["bbo"] = "Konabéré", ["bbp"] = "West Central Banda", ["bbq"] = "Bamali", ["bbr"] = "Girawa", ["bbs"] = "Bakpinka", ["bbt"] = "Mburku", ["bbu"] = "Bakulung", ["bbv"] = "Karnai", ["bbw"] = "Baba", ["bbx"] = "Bubia", ["bby"] = "Befang", ["bca"] = "Central Bai", ["bcb"] = "Bainouk-Samik", ["bcd"] = "North Babar", ["bce"] = "Bamenyam", ["bcf"] = "Bamu", ["bcg"] = "Baga Pokur", ["bch"] = "Bariai", ["bci"] = "Baoule", ["bcj"] = "Bardi", ["bck"] = "Bunaba", ["bcl"] = "Bikol Central", ["bcm"] = "Banoni", ["bcn"] = "Bibaali", ["bco"] = "Kaluli", ["bcp"] = "Bali", ["bcq"] = "Bench", ["bcr"] = "Babine-Witsuwit'en", ["bcs"] = "Kohumono", ["bct"] = "Bendi", ["bcu"] = "Biliau", ["bcv"] = "Shoo-Minda-Nye", ["bcw"] = "Bana", ["bcy"] = "Bacama", ["bcz"] = "Bainouk-Gunyaamolo", ["bda"] = "Bayot", ["bdb"] = "Basap", ["bdc"] = "Emberá-Baudó", ["bdd"] = "Bunama", ["bde"] = "Bade", ["bdf"] = "Biage", ["bdg"] = "Bonggi", ["bdh"] = "Tara Baka", ["bdi"] = "Burun", ["bdj"] = "Bai", ["bdk"] = "Budukh", ["bdl"] = "Indonesian Bajau", ["bdm"] = "Buduma", ["bdn"] = "Baldemu", ["bdo"] = "Morom", ["bdp"] = "Bende", ["bdq"] = "Bahnar", ["bdr"] = "West Coast Bajau", ["bds"] = "Burunge", ["bdt"] = "Bokoto", ["bdu"] = "Oroko", ["bdv"] = "Bodo Parja", ["bdw"] = "Baham", ["bdx"] = "Budong-Budong", ["bdy"] = "Bandjalang", ["bdz"] = "Badeshi", ["be"] = "Belarusian", ["bea"] = "Beaver", ["beb"] = "Bebele", ["bec"] = "Iceve-Maci", ["bed"] = "Bedoanas", ["bee"] = "Byangsi", ["bef"] = "Benabena", ["beg"] = "Belait", ["beh"] = "Biali", ["bei"] = "Bekati'", ["bej"] = "Beja", ["bek"] = "Bebeli", ["bem"] = "Bemba", ["beo"] = "Beami", ["bep"] = "Besoa", ["beq"] = "Beembe", ["ber-fog"] = "Fogaha", ["ber-pro"] = "Proto-Berber", ["ber-zuw"] = "Zuwara", ["bes"] = "Besme", ["bet"] = "Guiberoua Bété", ["beu"] = "Blagar", ["bev"] = "Daloa Bété", ["bew"] = "Betawi", ["bex"] = "Jur Modo", ["bey"] = "Akuwagel", ["bez"] = "Kibena", ["bfa"] = "Bari", ["bfb"] = "Pauri Bareli", ["bfc"] = "Northern Bai", ["bfd"] = "Bafut", ["bfe"] = "Betaf", ["bff"] = "Bofi", ["bfg"] = "Busang Kayan", ["bfh"] = "Blafe", ["bfi"] = "British Sign Language", ["bfj"] = "Bafanji", ["bfk"] = "Ban Khor Sign Language", ["bfl"] = "Banda-Ndélé", ["bfm"] = "Mmen", ["bfn"] = "Bunak", ["bfo"] = "Malba Birifor", ["bfp"] = "Beba", ["bfq"] = "Badaga", ["bfr"] = "Bazigar", ["bfs"] = "Southern Bai", ["bft"] = "Balti", ["bfu"] = "Gahri", ["bfw"] = "Bondo", ["bfx"] = "Bantayanon", ["bfy"] = "Bagheli", ["bfz"] = "Mahasu Pahari", ["bg"] = "Bulgarian", ["bga"] = "Gwamhi-Wuri", ["bgb"] = "Bobongko", ["bgc"] = "Haryanvi", ["bgd"] = "Rathwi Bareli", ["bge"] = "Bauria", ["bgf"] = "Bangandu", ["bgg"] = "Bugun", ["bgi"] = "Giangan", ["bgj"] = "Bangolan", ["bgk"] = "Bit", ["bgl"] = "Bo", ["bgo"] = "Baga Koga", ["bgq"] = "Bagri", ["bgr"] = "Bawm Chin", ["bgs"] = "Tagabawa", ["bgt"] = "Bughotu", ["bgu"] = "Mbongno", ["bgv"] = "Warkay-Bipim", ["bgw"] = "Bhatri", ["bgx"] = "Balkan Gagauz Turkish", ["bgy"] = "Benggoi", ["bgz"] = "Banggai", ["bh"] = "बिहारी", ["bha"] = "Bharia", ["bhb"] = "Bhili", ["bhc"] = "Biga", ["bhd"] = "Bhadrawahi", ["bhe"] = "Bhaya", ["bhf"] = "Odiai", ["bhg"] = "Binandere", ["bhh"] = "Bukhari", ["bhi"] = "Bhilali", ["bhj"] = "Bahing", ["bhl"] = "Bimin", ["bhm"] = "Bathari", ["bhn"] = "Bohtan Neo-Aramaic", ["bho"] = "भोजपुरी", ["bhp"] = "Bima", ["bhq"] = "Tukang Besi South", ["bhs"] = "Buwal", ["bht"] = "Bhattiyali", ["bhu"] = "Bhunjia", ["bhv"] = "Bahau", ["bhw"] = "Biak", ["bhx"] = "Bhalay", ["bhy"] = "Bhele", ["bhz"] = "Bada", ["bi"] = "Bislama", ["bia"] = "Badimaya", ["bib"] = "Bissa", ["bic"] = "Bikaru", ["bid"] = "Bidiyo", ["bie"] = "Bepour", ["bif"] = "Biafada", ["big"] = "Biangai", ["bij"] = "Kwanka", ["bil"] = "Bile", ["bim"] = "Bimoba", ["bin"] = "Edo", ["bio"] = "Nai", ["bip"] = "Bila", ["biq"] = "Bipi", ["bir"] = "Bisorio", ["bit"] = "Berinomo", ["biu"] = "Biete", ["biv"] = "Southern Birifor", ["biw"] = "Kol (Cameroon)", ["bix"] = "Bijori", ["biy"] = "Birhor", ["biz"] = "Baloi", ["bja"] = "Budza", ["bjb"] = "Barngarla", ["bjc"] = "Bariji", ["bje"] = "Biao-Jiao Mien", ["bjf"] = "Barzani Jewish Neo-Aramaic", ["bjg"] = "Bidyogo", ["bjh"] = "Bahinemo", ["bji"] = "Burji", ["bjj"] = "Kannauji", ["bjk"] = "Barok", ["bjl"] = "Bulu (New Guinea)", ["bjm"] = "Bajelani", ["bjn"] = "Banjarese", ["bjo"] = "Mid-Southern Banda", ["bjp"] = "Fanamaket", ["bjr"] = "Binumarien", ["bjs"] = "Bajan", ["bjt"] = "Balanta-Ganja", ["bju"] = "Busuu", ["bjv"] = "Bedjond", ["bjw"] = "Bakwé", ["bjx"] = "Banao Itneg", ["bjy"] = "Bayali", ["bjz"] = "Baruga", ["bka"] = "Kyak", ["bkc"] = "Baka", ["bkd"] = "Binukid", ["bkf"] = "Beeke", ["bkg"] = "Buraka", ["bkh"] = "Bakoko", ["bki"] = "Baki", ["bkj"] = "Pande", ["bkk"] = "Brokskat", ["bkl"] = "Berik", ["bkm"] = "Kom (Cameroon)", ["bkn"] = "Bukitan", ["bko"] = "Kwa'", ["bkp"] = "Iboko", ["bkq"] = "Bakairí", ["bkr"] = "Bakumpai", ["bks"] = "Masbate Sorsogon", ["bkt"] = "Boloki", ["bku"] = "Buhid", ["bkv"] = "Bekwarra", ["bkw"] = "Bekwel", ["bkx"] = "Baikeno", ["bky"] = "Bokyi", ["bkz"] = "Bungku", ["bla"] = "Blackfoot", ["blb"] = "Bilua", ["blc"] = "Bella Coola", ["bld"] = "Bolango", ["ble"] = "Balanta-Kentohe", ["blf"] = "Buol", ["blg"] = "Balau", ["blh"] = "Kuwaa", ["bli"] = "Bolia", ["blj"] = "Bolongan", ["blk"] = "Pa'o Karen", ["bll"] = "Biloxi", ["blm"] = "Beli", ["bln"] = "Southern Catanduanes Bicolano", ["blo"] = "Anii", ["blp"] = "Blablanga", ["blq"] = "Baluan-Pam", ["blr"] = "Blang", ["bls"] = "Balaesang", ["blt"] = "Tai Dam", ["blv"] = "Kibala", ["blw"] = "Balangao", ["blx"] = "Mag-Indi Ayta", ["bly"] = "Notre", ["blz"] = "Balantak", ["bm"] = "Bambara", ["bma"] = "Lame", ["bmb"] = "Bembe", ["bmc"] = "Biem", ["bmd"] = "Baga Manduri", ["bme"] = "Limassa", ["bmf"] = "Bom", ["bmg"] = "Bamwe", ["bmh"] = "Kein", ["bmi"] = "Bagirmi", ["bmj"] = "Bote-Majhi", ["bmk"] = "Ghayavi", ["bml"] = "Bomboli", ["bmn"] = "Bina", ["bmo"] = "Bambalang", ["bmp"] = "Bulgebi", ["bmq"] = "Bomu", ["bmr"] = "Muinane", ["bmt"] = "Biao Mon", ["bmu"] = "Somba-Siawari", ["bmv"] = "Bum", ["bmw"] = "Bomwali", ["bmx"] = "Baimak", ["bmz"] = "Baramu", ["bn"] = "बंगाली", ["bna"] = "Bonerate", ["bnb"] = "Bookan", ["bnd"] = "Banda", ["bne"] = "Bintauna", ["bnf"] = "Masiwang", ["bng"] = "Benga", ["bni"] = "Bangi", ["bnj"] = "Eastern Tawbuid", ["bnk"] = "Bierebo", ["bnl"] = "Boon", ["bnm"] = "Batanga", ["bnn"] = "Bunun", ["bno"] = "Asi", ["bnp"] = "Bola", ["bnq"] = "Bantik", ["bnr"] = "Butmas-Tur", ["bns"] = "Bundeli", ["bnt-bal"] = "Balong", ["bnt-bon"] = "Boma Nkuu", ["bnt-boy"] = "Boma Yumu", ["bnt-bwa"] = "Bwala", ["bnt-cmw"] = "Chimwiini", ["bnt-ind"] = "Indanga", ["bnt-lal"] = "Lala (South Africa)", ["bnt-lwl"] = "Lwel", ["bnt-mpi"] = "Mpiin", ["bnt-mpu"] = "Mpuono", ["bnt-ngu-pro"] = "Proto-Nguni", ["bnt-phu"] = "Phuthi", ["bnt-pro"] = "Proto-Bantu", ["bnt-sbo"] = "South Boma", ["bnt-sts-pro"] = "Proto-Sotho-Tswana", ["bnu"] = "Bentong", ["bnv"] = "Beneraf", ["bnw"] = "Bisis", ["bnx"] = "Bangubangu", ["bny"] = "Bintulu", ["bnz"] = "Beezen", ["bo"] = "Tibetan", ["boa"] = "Bora", ["bob"] = "Aweer", ["boe"] = "Mundabli", ["bof"] = "Bolon", ["bog"] = "Bamako Sign Language", ["boh"] = "North Boma", ["boi"] = "Barbareño", ["boj"] = "Anjam", ["bok"] = "Bonjo", ["bol"] = "Bole", ["bom"] = "Berom", ["bon"] = "Bine", ["boo"] = "Tiemacèwè Bozo", ["bop"] = "Bonkiman", ["boq"] = "Bogaya", ["bor"] = "Borôro", ["bot"] = "Bongo", ["bou"] = "Bondei", ["bov"] = "Tuwuli", ["bow"] = "Rema", ["box"] = "Buamu", ["boy"] = "Bodo (Central Africa)", ["boz"] = "Tiéyaxo Bozo", ["bpa"] = "Dakaka", ["bpd"] = "Banda-Banda", ["bpg"] = "Bonggo", ["bph"] = "Botlikh", ["bpi"] = "Bagupi", ["bpj"] = "Binji", ["bpk"] = "Orowe", ["bpl"] = "Broome Pearling Lugger Pidgin", ["bpm"] = "Biyom", ["bpn"] = "Dzao Min", ["bpo"] = "Anasi", ["bpp"] = "Kaure", ["bpq"] = "Banda Malay", ["bpr"] = "Koronadal Blaan", ["bps"] = "Sarangani Blaan", ["bpt"] = "Barrow Point", ["bpu"] = "Bongu", ["bpv"] = "Bian Marind", ["bpx"] = "Palya Bareli", ["bpy"] = "Bishnupriya Manipuri", ["bpz"] = "Bilba", ["bqa"] = "Tchumbuli", ["bqb"] = "Bagusa", ["bqc"] = "Boko", ["bqd"] = "Bung", ["bqf"] = "Baga Kaloum", ["bqg"] = "Bago-Kusuntu", ["bqh"] = "Baima", ["bqi"] = "Bakhtiari", ["bqj"] = "Bandial", ["bqk"] = "Banda-Mbrès", ["bql"] = "Bilakura", ["bqm"] = "Wumboko", ["bqn"] = "Bulgarian Sign Language", ["bqo"] = "Balo", ["bqp"] = "Busa", ["bqq"] = "Biritai", ["bqr"] = "Burusu", ["bqs"] = "Bosngun", ["bqt"] = "Bamukumbit", ["bqu"] = "Boguru", ["bqv"] = "Begbere-Ejar", ["bqw"] = "Buru (Nigeria)", ["bqx"] = "Baangi", ["bqy"] = "Bengkala Sign Language", ["bqz"] = "Bakaka", ["br"] = "Breton", ["bra"] = "Braj", ["brb"] = "Lave", ["brc"] = "Berbice Creole Dutch", ["brd"] = "Baraamu", ["brf"] = "Bera", ["brg"] = "Baure", ["brh"] = "Brahui", ["bri"] = "Mokpwe", ["brj"] = "Bieria", ["brk"] = "Birgid", ["brl"] = "Birwa", ["brm"] = "Barambu", ["brn"] = "Boruca", ["bro"] = "Brokkat", ["brp"] = "Barapasi", ["brq"] = "Breri", ["brr"] = "Birao", ["brs"] = "Baras", ["brt"] = "Bitare", ["bru"] = "Eastern Bru", ["brv"] = "Western Bru", ["brw"] = "Bellari", ["brx"] = "Bodo (India)", ["bry"] = "Burui", ["brz"] = "Bilbil", ["bsa"] = "Abinomn", ["bsb"] = "Brunei Bisaya", ["bsc"] = "Bassari", ["bse"] = "Wushi", ["bsf"] = "Bauchi", ["bsg"] = "Bashkardi", ["bsh"] = "Kamkata-viri", ["bsi"] = "Bassossi", ["bsj"] = "Bangwinji", ["bsk"] = "Burushaski", ["bsl"] = "Basa-Gumna", ["bsm"] = "Busami", ["bsn"] = "Barasana", ["bso"] = "Buso", ["bsp"] = "Baga Sitemu", ["bsq"] = "Bassa", ["bsr"] = "Bassa-Kontagora", ["bss"] = "Akoose", ["bst"] = "Basketo", ["bsu"] = "Bahonsuai", ["bsv"] = "Baga Sobané", ["bsw"] = "Baiso", ["bsx"] = "Yangkam", ["bsy"] = "Sabah Bisaya", ["bta"] = "Bata", ["btc"] = "Bati (Cameroon)", ["btd"] = "Dairi Batak", ["bte"] = "Gamo-Ningi", ["btf"] = "Birgit", ["btg"] = "Gagnoa Bété", ["bth"] = "Biatah Bidayuh", ["bti"] = "Burate", ["btj"] = "Bacanese Malay", ["btk-pro"] = "Proto-Batak", ["btm"] = "Mandailing Batak", ["btn"] = "Ratagnon", ["bto"] = "Iriga Bicolano", ["btp"] = "Budibud", ["btq"] = "Batek", ["btr"] = "Baetora", ["bts"] = "Simalungun Batak", ["btt"] = "Bete-Bendi", ["btu"] = "Batu", ["btv"] = "Bateri", ["btw"] = "Butuanon", ["btx"] = "Karo Batak", ["bty"] = "Bobot", ["btz"] = "Alas-Kluet Batak", ["bua"] = "Buryat", ["bub"] = "Bua", ["bud"] = "Ntcham", ["bue"] = "Beothuk", ["buf"] = "Bushoong", ["bug"] = "Buginese", ["buh"] = "Younuo Bunu", ["bui"] = "Bongili", ["buj"] = "Basa-Gurmana", ["buk"] = "Bukawa", ["bum"] = "Bulu (Cameroon)", ["bun"] = "Sherbro", ["buo"] = "Terei", ["bup"] = "Busoa", ["buq"] = "Brem", ["bus"] = "Bokobaru", ["but"] = "Bungain", ["buu"] = "Budu", ["buv"] = "Bun", ["buw"] = "Bubi", ["bux"] = "Boghom", ["buy"] = "Mmani", ["bva"] = "Barein", ["bvb"] = "Bube", ["bvc"] = "Baelelea", ["bvd"] = "Baeggu", ["bve"] = "Berau Malay", ["bvf"] = "Boor", ["bvg"] = "Bonkeng", ["bvh"] = "Bure", ["bvi"] = "Belanda Viri", ["bvj"] = "Baan", ["bvk"] = "Bukat", ["bvl"] = "Bolivian Sign Language", ["bvm"] = "Bamunka", ["bvn"] = "Buna", ["bvo"] = "Bolgo", ["bvp"] = "Bumang", ["bvq"] = "Birri", ["bvr"] = "Burarra", ["bvt"] = "Bati (Indonesia)", ["bvu"] = "Bukit Malay", ["bvv"] = "Baniva", ["bvw"] = "Boga", ["bvx"] = "Babole", ["bvy"] = "Baybayanon", ["bvz"] = "Bauzi", ["bwa"] = "Bwatoo", ["bwb"] = "Namosi-Naitasiri-Serua", ["bwc"] = "Bwile", ["bwd"] = "Bwaidoka", ["bwe"] = "Bwe Karen", ["bwf"] = "Boselewa", ["bwg"] = "Barwe", ["bwh"] = "Bishuo", ["bwi"] = "Baniwa", ["bwj"] = "Láá Láá Bwamu", ["bwk"] = "Bauwaki", ["bwl"] = "Bwela", ["bwm"] = "Biwat", ["bwn"] = "Wunai Bunu", ["bwo"] = "Shinasha", ["bwp"] = "Mandobo Bawah", ["bwq"] = "Southern Bobo", ["bwr"] = "Bura", ["bws"] = "Bomboma", ["bwt"] = "Bafaw", ["bwu"] = "Buli (Ghana)", ["bww"] = "Bwa", ["bwx"] = "Bu-Nao Bunu", ["bwy"] = "Cwi Bwamu", ["bwz"] = "Bwisi", ["bxa"] = "Bauro", ["bxb"] = "Belanda Bor", ["bxc"] = "Molengue", ["bxd"] = "Pela", ["bxe"] = "Ongota", ["bxf"] = "Bilur", ["bxg"] = "Bangala", ["bxh"] = "Buhutu", ["bxi"] = "Pirlatapa", ["bxj"] = "Bayungu", ["bxk"] = "Bukusu", ["bxl"] = "Jalkunan", ["bxn"] = "Burduna", ["bxo"] = "Barikanchi", ["bxp"] = "Bebil", ["bxq"] = "Beele", ["bxs"] = "Busam", ["bxv"] = "Berakou", ["bxw"] = "Banka", ["bxz"] = "Binahari", ["bya"] = "Palawan Batak", ["byb"] = "Bikya", ["byc"] = "Ubaghara", ["byd"] = "Benyadu'", ["bye"] = "Pouye", ["byf"] = "Bete", ["byg"] = "Baygo", ["byh"] = "Bujhyal", ["byi"] = "Buyu", ["byj"] = "Binawa", ["byk"] = "Biao", ["byl"] = "Bayono", ["bym"] = "Bidyara", ["byn"] = "Blin", ["byo"] = "Biyo", ["byp"] = "Bumaji", ["byq"] = "Basay", ["byr"] = "Baruya", ["bys"] = "Burak", ["byt"] = "Berti", ["byv"] = "Medumba", ["byw"] = "Belhariya", ["byx"] = "Qaqet", ["byz"] = "Banaro", ["bza"] = "Bandi", ["bzb"] = "Andio", ["bzd"] = "Bribri", ["bze"] = "Jenaama Bozo", ["bzf"] = "Boikin", ["bzg"] = "Babuza", ["bzh"] = "Mapos Buang", ["bzi"] = "Bisu", ["bzj"] = "Belizean Creole", ["bzk"] = "Nicaraguan Creole", ["bzl"] = "Boano (Sulawesi)", ["bzm"] = "Bolondo", ["bzn"] = "Boano (Maluku)", ["bzo"] = "Bozaba", ["bzp"] = "Kemberano", ["bzq"] = "Buli (Indonesia)", ["bzr"] = "Biri", ["bzs"] = "Brazilian Sign Language", ["bzu"] = "Burmeso", ["bzv"] = "Bebe", ["bzw"] = "Basa", ["bzx"] = "Hainyaxo Bozo", ["bzy"] = "Obanliku", ["bzz"] = "Evant", ["ca"] = "Catalan", ["caa"] = "Ch'orti'", ["cab"] = "Garifuna", ["cac"] = "Chuj", ["cad"] = "Caddo", ["cae"] = "Laalaa", ["caf"] = "Southern Carrier", ["cag"] = "Nivaclé", ["cah"] = "Cahuarano", ["caj"] = "Chané", ["cak"] = "Kaqchikel", ["cal"] = "Carolinian", ["cam"] = "Cemuhî", ["can"] = "Chambri", ["cao"] = "Chácobo", ["cap"] = "Chipaya", ["caq"] = "Car Nicobarese", ["car"] = "Galibi Carib", ["cas"] = "Tsimané", ["cau-abz-pro"] = "Proto-Abkhaz-Abaza", ["cau-ava-pro"] = "Proto-Avaro-Andian", ["cau-cir-pro"] = "Proto-Circassian", ["cau-drg-pro"] = "Proto-Dargwa", ["cau-lzg-pro"] = "Proto-Lezghian", ["cau-nec-pro"] = "Proto-Northeast Caucasian", ["cau-nkh-pro"] = "Proto-Nakh", ["cau-nwc-pro"] = "Proto-Northwest Caucasian", ["cau-tsz-pro"] = "Proto-Tsezian", ["cav"] = "Cavineña", ["caw"] = "Callawalla", ["cax"] = "Chiquitano", ["cay"] = "Cayuga", ["caz"] = "Canichana", ["cba-ata"] = "Atanques", ["cba-cat"] = "Catío Chibcha", ["cba-dor"] = "Dorasque", ["cba-dui"] = "Duit", ["cba-hue"] = "Huetar", ["cba-nut"] = "Nutabe", ["cba-pro"] = "Proto-Chibchan", ["cbb"] = "Cabiyarí", ["cbc"] = "Carapana", ["cbd"] = "Carijona", ["cbg"] = "Chimila", ["cbi"] = "Chachi", ["cbj"] = "Ede Cabe", ["cbk"] = "Chavacano", ["cbl"] = "Bualkhaw Chin", ["cbn"] = "Nyah Kur", ["cbo"] = "Izora", ["cbq"] = "Shuba", ["cbr"] = "Cashibo-Cacataibo", ["cbs"] = "Cashinahua", ["cbt"] = "Chayahuita", ["cbu"] = "Candoshi-Shapra", ["cbv"] = "Cacua", ["cbw"] = "Kinabalian", ["cby"] = "Carabayo", ["cca"] = "Cauca", ["ccc"] = "Chamicuro", ["ccd"] = "Cafundó", ["cce"] = "Chopi", ["ccg"] = "Chamba Daka", ["cch"] = "Atsam", ["ccj"] = "Kasanga", ["ccl"] = "Cutchi-Swahili", ["ccm"] = "Malaccan Creole Malay", ["ccn-pro"] = "Proto-North Caucasian", ["cco"] = "Comaltepec Chinantec", ["ccp"] = "Chakma", ["ccr"] = "Cacaopera", ["ccs-gzn-pro"] = "Proto-Georgian-Zan", ["ccs-pro"] = "Proto-Kartvelian", ["cda"] = "Choni", ["cdc-cbm-pro"] = "Proto-Central Chadic", ["cdc-mas-pro"] = "Proto-Masa", ["cdc-pro"] = "Proto-Chadic", ["cdd-pro"] = "Proto-Caddoan", ["cde"] = "Chenchu", ["cdf"] = "Chiru", ["cdh"] = "Chambeali", ["cdi"] = "Chodri", ["cdj"] = "Churahi", ["cdm"] = "Chepang", ["cdn"] = "Chaudangsi", ["cdo"] = "Min Dong", ["cdr"] = "Cinda-Regi-Tiyal", ["cds"] = "Chadian Sign Language", ["cdy"] = "Chadong", ["cdz"] = "Koda", ["ce"] = "Chechen", ["cea"] = "Lower Chehalis", ["ceb"] = "Cebuano", ["ceg"] = "Chamacoco", ["cel-bry-pro"] = "Proto-Brythonic", ["cel-gal"] = "Gallaecian", ["cel-gau"] = "Gaulish", ["cel-pro"] = "Proto-Celtic", ["cen"] = "Cen", ["cet"] = "Centúúm", ["cfa"] = "Dijim-Bwilim", ["cfd"] = "Cara", ["cfg"] = "Como Karim", ["cfm"] = "Falam Chin", ["cga"] = "Changriwa", ["cgc"] = "Kagayanen", ["cgg"] = "Rukiga", ["cgk"] = "Chocangaca", ["ch"] = "Chamorro", ["chb"] = "Chibcha", ["chc"] = "Catawba", ["chd"] = "Highland Oaxaca Chontal", ["chf"] = "Tabasco Chontal", ["chg"] = "Chagatai", ["chh"] = "Chinook", ["chi-pro"] = "Proto-Chimakuan", ["chj"] = "Ojitlán Chinantec", ["chk"] = "Chuukese", ["chl"] = "Cahuilla", ["chm-pro"] = "Proto-Mari", ["chn"] = "Chinook Jargon", ["cho"] = "Choctaw", ["chp"] = "Chipewyan", ["chq"] = "Quiotepec Chinantec", ["chr"] = "Cherokee", ["cht"] = "Cholón", ["chw"] = "Chuabo", ["chx"] = "Chantyal", ["chy"] = "Cheyenne", ["chz"] = "Ozumacín Chinantec", ["cia"] = "Cia-Cia", ["cib"] = "Ci Gbe", ["cic"] = "Chickasaw", ["cid"] = "Chimariko", ["cie"] = "Cineni", ["cih"] = "Chinali", ["cik"] = "Chitkuli Kinnauri", ["cim"] = "Cimbrian", ["cin"] = "Cinta Larga", ["cip"] = "Chiapanec", ["cir"] = "Tiri", ["ciy"] = "Chaima", ["cja"] = "Western Cham", ["cje"] = "Chru", ["cjh"] = "Upper Chehalis", ["cji"] = "Chamalal", ["cjk"] = "Chokwe", ["cjm"] = "Eastern Cham", ["cjn"] = "Chenapian", ["cjo"] = "Ashéninka Pajonal", ["cjp"] = "Cabécar", ["cjs"] = "Shor", ["cjv"] = "Chuave", ["cjy"] = "Jin", ["ckb"] = "Central Kurdish", ["ckh"] = "Chak", ["ckl"] = "Cibak", ["ckn"] = "Kaang Chin", ["cko"] = "Anufo", ["ckq"] = "Kajakse", ["ckr"] = "Kairak", ["cks"] = "Tayo", ["ckt"] = "Chukchi", ["cku"] = "Koasati", ["ckv"] = "Kavalan", ["ckx"] = "Caka", ["cky"] = "Cakfem-Mushere", ["ckz"] = "Cakchiquel-Quiché Mixed Language", ["cla"] = "Ron", ["clc"] = "Chilcotin", ["cld"] = "Chaldean Neo-Aramaic", ["cle"] = "Lealao Chinantec", ["clh"] = "Chilisso", ["cli"] = "Chakali", ["clj"] = "Laitu Chin", ["clk"] = "Idu", ["cll"] = "Chala", ["clm"] = "Klallam", ["clo"] = "Lowland Oaxaca Chontal", ["clt"] = "Lautu Chin", ["clu"] = "Caluyanun", ["clw"] = "Chulym", ["cly"] = "Eastern Highland Chatino", ["cma"] = "Maa", ["cmc-pro"] = "Proto-Chamic", ["cme"] = "Cerma", ["cmg"] = "Classical Mongolian", ["cmi"] = "Emberá-Chamí", ["cml"] = "Campalagian", ["cmm"] = "Michigamea", ["cmn"] = "Mandarin", ["cmo"] = "Central Mnong", ["cmr"] = "Mro Chin", ["cms"] = "Messapic", ["cmt"] = "Camtho", ["cna"] = "Changthang", ["cnb"] = "Chinbon Chin", ["cnc"] = "Côông", ["cng"] = "Northern Qiang", ["cnh"] = "Lai", ["cni"] = "Asháninka", ["cnk"] = "Khumi Chin", ["cnl"] = "Lalana Chinantec", ["cno"] = "Con", ["cns"] = "Central Asmat", ["cnt"] = "Tepetotutla Chinantec", ["cnu"] = "Chenoua", ["cnw"] = "Ngawn Chin", ["cnx"] = "Middle Cornish", ["co"] = "Corsican", ["coa"] = "Cocos Islands Malay", ["cob"] = "Chicomuceltec", ["coc"] = "Cocopa", ["cod"] = "Cocama", ["coe"] = "Koreguaje", ["cof"] = "Tsafiki", ["cog"] = "Chong", ["coh"] = "Chichonyi-Chidzihana-Chikauma", ["coj"] = "Cochimi", ["cok"] = "Santa Teresa Cora", ["col"] = "Columbia-Wenatchi", ["com"] = "Comanche", ["con"] = "Cofán", ["coo"] = "Comox", ["cop"] = "Coptic", ["coq"] = "Coquille", ["cot"] = "Caquinte", ["cou"] = "Wamey", ["cov"] = "Cao Miao", ["cow"] = "Cowlitz", ["cox"] = "Nanti", ["coy"] = "Coyaima", ["coz"] = "Chochotec", ["cpa"] = "Palantla Chinantec", ["cpb"] = "Ucayali-Yurúa Ashéninka", ["cpc"] = "Ajyíninka Apurucayali", ["cpe-mar"] = "Maroon Spirit Language", ["cpe-spp"] = "Samoan Plantation Pidgin", ["cpg"] = "Cappadocian Greek", ["cpi"] = "Chinese Pidgin English", ["cpn"] = "Cherepon", ["cpo"] = "Kpee", ["cps"] = "Capiznon", ["cpu"] = "Pichis Ashéninka", ["cpx"] = "Puxian", ["cpy"] = "South Ucayali Ashéninka", ["cqd"] = "Chuanqiandian Cluster Miao", ["cr"] = "Cree", ["cra"] = "Chara", ["crb"] = "Island Carib", ["crc"] = "Lonwolwol", ["crd"] = "Coeur d'Alene", ["crf"] = "Caramanta", ["crg"] = "Michif", ["crh"] = "Crimean Tatar", ["cri"] = "Sãotomense", ["crj"] = "Southern East Cree", ["crk"] = "Plains Cree", ["crl"] = "Northern East Cree", ["crm"] = "Moose Cree", ["crn"] = "Cora", ["cro"] = "Crow", ["crp-gep"] = "West Greenlandic Pidgin", ["crp-mpp"] = "Macau Pidgin Portuguese", ["crp-rsn"] = "Russenorsk", ["crp-tnw"] = "Tangwang", ["crp-tpr"] = "Taimyr Pidgin Russian", ["crq"] = "Iyo'wujwa Chorote", ["crr"] = "Carolina Algonquian", ["crs"] = "Seychellois Creole", ["crt"] = "Iyojwa'ja Chorote", ["crv"] = "Chaura", ["crw"] = "Chrau", ["crx"] = "Carrier", ["cry"] = "Cori", ["crz"] = "Cruzeño", ["cs"] = "Czech", ["csa"] = "Chiltepec Chinantec", ["csb"] = "Kashubian", ["csc"] = "Catalan Sign Language", ["csd"] = "Chiangmai Sign Language", ["cse"] = "Czech Sign Language", ["csf"] = "Cuban Sign Language", ["csg"] = "Chilean Sign Language", ["csh"] = "Asho Chin", ["csi"] = "Coast Miwok", ["csj"] = "Songlai Chin", ["csk"] = "Jola-Kasa", ["csl"] = "Chinese Sign Language", ["csm"] = "Central Sierra Miwok", ["csn"] = "Colombian Sign Language", ["cso"] = "Sochiapam Chinantec", ["csq"] = "Croatian Sign Language", ["csr"] = "Costa Rican Sign Language", ["css"] = "Southern Ohlone", ["cst"] = "Northern Ohlone", ["csu-bba-pro"] = "Proto-Bongo-Bagirmi", ["csu-maa-pro"] = "Proto-Mangbetu", ["csu-pro"] = "Proto-Central Sudanic", ["csu-sar-pro"] = "Proto-Sara", ["csv"] = "Sumtu Chin", ["csw"] = "Swampy Cree", ["csy"] = "Siyin Chin", ["csz"] = "Coos", ["cta"] = "Tataltepec Chatino", ["ctc"] = "Chetco-Tolowa", ["ctd"] = "Tedim Chin", ["cte"] = "Tepinapa Chinantec", ["ctg"] = "Chittagonian", ["cth"] = "Thaiphum Chin", ["ctl"] = "Tlacoatzintepec Chinantec", ["ctm"] = "Chitimacha", ["ctn"] = "Chhintange", ["cto"] = "Emberá-Catío", ["ctp"] = "Western Highland Chatino", ["ctp-san"] = "San Juan Quiahije Chatino", ["cts"] = "Northern Catanduanes Bicolano", ["ctt"] = "Wayanad Chetti", ["ctu"] = "Chol", ["ctz"] = "Zacatepec Chatino", ["cu"] = "Old Church Slavonic", ["cua"] = "Cua", ["cub"] = "Cubeo", ["cuc"] = "Usila Chinantec", ["cug"] = "Cung", ["cuh"] = "Chuka", ["cui"] = "Cuiba", ["cuj"] = "Mashco Piro", ["cuk"] = "Kuna", ["cul"] = "Culina", ["cuo"] = "Cumanagoto", ["cup"] = "Cupeño", ["cuq"] = "Cun", ["cur"] = "Chhulung", ["cus-ash"] = "Ashraaf", ["cus-hec-pro"] = "Proto-Highland East Cushitic", ["cus-pro"] = "Proto-Cushitic", ["cus-som-pro"] = "Proto-Somaloid", ["cus-sou-pro"] = "Proto-South Cushitic", ["cut"] = "Teutila Cuicatec", ["cuu"] = "Tai Ya", ["cuv"] = "Cuvok", ["cuw"] = "Chukwa", ["cux"] = "Tepeuxila Cuicatec", ["cuy"] = "Cuitlatec", ["cv"] = "Chuvash", ["cvg"] = "Chug", ["cvn"] = "Valle Nacional Chinantec", ["cwa"] = "Kabwa", ["cwb"] = "Maindo", ["cwd"] = "Woods Cree", ["cwe"] = "Kwere", ["cwg"] = "Chewong", ["cwt"] = "Kuwaataay", ["cy"] = "Welsh", ["cya"] = "Nopala Chatino", ["cyb"] = "Cayubaba", ["cyo"] = "Cuyunon", ["czh"] = "Huizhou", ["czk"] = "Knaanic", ["czn"] = "Zenzontepec Chatino", ["czo"] = "Min Zhong", ["czt"] = "Zotung Chin", ["da"] = "Danish", ["daa"] = "Dangaléat", ["dac"] = "Dambi", ["dad"] = "Marik", ["dae"] = "Duupa", ["dag"] = "Dagbani", ["dah"] = "Gwahatike", ["dai"] = "Day", ["daj"] = "Dar Fur Daju", ["dak"] = "Dakota", ["dal"] = "Dahalo", ["dam"] = "Damakawa", ["dao"] = "Daai Chin", ["daq"] = "Dandami Maria", ["dar"] = "Dargwa", ["das"] = "Daho-Doo", ["dau"] = "Dar Sila Daju", ["dav"] = "Taita", ["daw"] = "Davawenyo", ["dax"] = "Dayi", ["daz"] = "Dao", ["dba"] = "Bangime", ["dbb"] = "Deno", ["dbd"] = "Dadiya", ["dbe"] = "Dabe", ["dbf"] = "Edopi", ["dbg"] = "Dogul Dom", ["dbi"] = "Doka", ["dbj"] = "Ida'an", ["dbl"] = "Dyirbal", ["dbm"] = "Duguri", ["dbn"] = "Duriankere", ["dbo"] = "Dulbu", ["dbp"] = "Duwai", ["dbq"] = "Daba", ["dbr"] = "Dabarre", ["dbt"] = "Ben Tey", ["dbu"] = "Bondum Dom Dogon", ["dbv"] = "Dungu", ["dbw"] = "Bankan Tey Dogon", ["dby"] = "Dibiyaso", ["dcc"] = "Deccani", ["dcr"] = "Negerhollands", ["dda"] = "Dadi Dadi", ["ddd"] = "Dongotono", ["dde"] = "Doondo", ["ddg"] = "Fataluku", ["ddi"] = "Diodio", ["ddj"] = "Jaru", ["ddn"] = "Dendi", ["ddo"] = "Tsez", ["ddr"] = "Dhudhuroa", ["dds"] = "Donno So Dogon", ["ddw"] = "Dawera-Daweloor", ["de"] = "जर्मन", ["dec"] = "Dagik", ["ded"] = "Dedua", ["dee"] = "Dewoin", ["def"] = "Dezfuli", ["deg"] = "Degema", ["deh"] = "Dehwari", ["dei"] = "Demisa", ["dek"] = "Dek", ["dem"] = "Dem", ["den"] = "Slavey", ["dep"] = "Pidgin Delaware", ["der"] = "Deori", ["des"] = "Desano", ["dev"] = "Domung", ["dez"] = "Dengese", ["dga"] = "Southern Dagaare", ["dgb"] = "Bunoge", ["dgc"] = "Casiguran Dumagat Agta", ["dgd"] = "Dagaari Dioula", ["dge"] = "Degenan", ["dgg"] = "Doga", ["dgh"] = "Dghwede", ["dgi"] = "Northern Dagara", ["dgk"] = "Dagba", ["dgn"] = "Dagoman", ["dgo"] = "हिंदी डोगरी", ["dgr"] = "Dogrib", ["dgs"] = "Dogoso", ["dgt"] = "Ntra'ngith", ["dgw"] = "Daungwurrung", ["dgx"] = "Doghoro", ["dgz"] = "Daga", ["dhg"] = "Dhangu", ["dhi"] = "Dhimal", ["dhl"] = "Dhalandji", ["dhm"] = "Zemba", ["dhn"] = "Dhanki", ["dho"] = "Dhodia", ["dhr"] = "Tharrgari", ["dhs"] = "Dhaiso", ["dhu"] = "Dhurga", ["dhv"] = "Drehu", ["dhw"] = "Danuwar", ["dhx"] = "Dhungaloo", ["dia"] = "Dia", ["dib"] = "South Central Dinka", ["dic"] = "Lakota Dida", ["did"] = "Didinga", ["dif"] = "Dieri", ["dig"] = "Digo", ["dii"] = "Dimbong", ["dij"] = "Dai", ["dik"] = "Southwestern Dinka", ["dil"] = "Dilling", ["dim"] = "Dime", ["din"] = "Dinka", ["dio"] = "Dibo", ["dip"] = "Northeastern Dinka", ["dir"] = "Dirim", ["dis"] = "Dimasa", ["diu"] = "Gciriku", ["diw"] = "Northwestern Dinka", ["dix"] = "Dixon Reef", ["diy"] = "Diuwe", ["diz"] = "Ding", ["dja"] = "Djadjawurrung", ["djb"] = "Djinba", ["djc"] = "Dar Daju Daju", ["djd"] = "Jaminjung", ["dje"] = "Zarma", ["djf"] = "Djangun", ["dji"] = "Djinang", ["djj"] = "Ndjébbana", ["djk"] = "Aukan", ["djl"] = "Djiwarli", ["djm"] = "Jamsay", ["djn"] = "Djauan", ["djo"] = "Jangkang", ["djr"] = "Djambarrpuyngu", ["dju"] = "Kapriman", ["djw"] = "Djawi", ["dka"] = "Dakpa", ["dkk"] = "Dakka", ["dkr"] = "Kuijau", ["dks"] = "Southeastern Dinka", ["dkx"] = "Mazagway", ["dlg"] = "Dolgan", ["dlk"] = "Dahalik", ["dlm"] = "Dalmatian", ["dln"] = "Darlong", ["dma"] = "Duma", ["dmb"] = "Mombo Dogon", ["dmc"] = "Gavak", ["dmd"] = "Madhi Madhi", ["dme"] = "Dugwor", ["dmf"] = "Medefaidrin", ["dmg"] = "Upper Kinabatangan", ["dmk"] = "Domaaki", ["dml"] = "Dameli", ["dmm"] = "Dama (Nigeria)", ["dmn-dam"] = "Dama (Sierra Leone)", ["dmn-mdw-pro"] = "Proto-Western Mande", ["dmn-pro"] = "Proto-Mande", ["dmo"] = "Kemezung", ["dmr"] = "East Damar", ["dms"] = "Dampelas", ["dmu"] = "Dubu", ["dmv"] = "Dumpas", ["dmw"] = "Mudburra", ["dmx"] = "Dema", ["dmy"] = "Demta", ["dna"] = "Upper Grand Valley Dani", ["dnd"] = "Daonda", ["dne"] = "Ndendeule", ["dng"] = "Dungan", ["dni"] = "Lower Grand Valley Dani", ["dnj"] = "Dan", ["dnk"] = "Dengka", ["dnn"] = "Dzuun", ["dno"] = "Ndrulo", ["dnr"] = "Danaru", ["dnt"] = "Mid Grand Valley Dani", ["dnu"] = "Danau", ["dnv"] = "Danu", ["dnw"] = "Western Dani", ["dny"] = "Dení", ["doa"] = "Dom", ["dob"] = "Dobu", ["doc"] = "Northern Kam", ["doe"] = "Doe", ["dof"] = "Domu", ["doh"] = "Dong", ["doi"] = "Dogri", ["dok"] = "Dondo", ["dol"] = "Doso", ["don"] = "Doura", ["doo"] = "Dongo", ["dop"] = "Lukpa", ["doq"] = "Dominican Sign Language", ["dor"] = "Dori'o", ["dos"] = "Dogosé", ["dot"] = "Dass", ["dov"] = "Toka-Leya", ["dow"] = "Doyayo", ["dox"] = "Bussa", ["doy"] = "Dompo", ["doz"] = "Dorze", ["dpp"] = "Papar", ["dra-mkn"] = "Middle Kannada", ["dra-okn"] = "Old Kannada", ["dra-ote"] = "Old Telugu", ["dra-pro"] = "Proto-Dravidian", ["drb"] = "Dair", ["drc"] = "Minderico", ["drd"] = "Darmiya", ["drg"] = "Rungus", ["dri"] = "Lela", ["drl"] = "Baagandji", ["drn"] = "West Damar", ["dro"] = "Daro-Matu Melanau", ["drq"] = "Dura", ["drs"] = "Gedeo", ["dru"] = "Rukai", ["dru-pro"] = "Proto-Rukai", ["dry"] = "Darai", ["dsb"] = "Lower Sorbian", ["dse"] = "Dutch Sign Language", ["dsh"] = "Daasanach", ["dsi"] = "Disa", ["dsl"] = "Danish Sign Language", ["dsn"] = "Dusner", ["dso"] = "Desiya", ["dsq"] = "Tadaksahak", ["dta"] = "Daur", ["dtb"] = "Labuk-Kinabatangan Kadazan", ["dtd"] = "Ditidaht", ["dth"] = "Adithinngithigh", ["dti"] = "Ana Tinga Dogon", ["dtk"] = "Tene Kan Dogon", ["dtm"] = "Tomo Kan Dogon", ["dto"] = "Tommo So", ["dtp"] = "Central Dusun", ["dtr"] = "Lotud", ["dts"] = "Toro So Dogon", ["dtt"] = "Toro Tegu Dogon", ["dtu"] = "Tebul Ure Dogon", ["dty"] = "Doteli", ["dua"] = "Duala", ["dub"] = "Dubli", ["duc"] = "Duna", ["due"] = "Umiray Dumaget Agta", ["duf"] = "Dumbea", ["dug"] = "Chiduruma", ["duh"] = "Dungra Bhil", ["dui"] = "Dumun", ["duk"] = "Uyajitaya", ["dul"] = "Alabat Island Agta", ["dum"] = "Middle Dutch", ["dun"] = "Dusun Deyah", ["duo"] = "Dupaningan Agta", ["dup"] = "Duano", ["duq"] = "Dusun Malang", ["dur"] = "Dii", ["dus"] = "Dumi", ["duu"] = "Drung", ["duv"] = "Duvle", ["duw"] = "Dusun Witu", ["dux"] = "Duun", ["duy"] = "Dicamay Agta", ["duz"] = "Duli", ["dv"] = "Dhivehi", ["dva"] = "Duau", ["dwa"] = "Diri", ["dwr"] = "Dawro", ["dwu"] = "Dhuwal", ["dww"] = "Dawawa", ["dwy"] = "Dhuwaya", ["dwz"] = "Dewas Rai", ["dya"] = "Dyan", ["dyb"] = "Dyaberdyaber", ["dyd"] = "Dyugun", ["dyg"] = "Villa Viciosa Agta", ["dyi"] = "Djimini", ["dym"] = "Yanda Dogon", ["dyn"] = "Dyangadi", ["dyo"] = "Jola-Fonyi", ["dyu"] = "Dyula", ["dyy"] = "Dyaabugay", ["dz"] = "Dzongkha", ["dza"] = "Tunzu", ["dzg"] = "Dazaga", ["dzl"] = "Dzala", ["dzn"] = "Dzando", ["ebg"] = "Ebughu", ["ebk"] = "Eastern Bontoc", ["ebr"] = "Ebrié", ["ebu"] = "Embu", ["ecr"] = "Eteocretan", ["ecs"] = "Ecuadorian Sign Language", ["ecy"] = "Eteocypriot", ["ee"] = "Ewe", ["eee"] = "E", ["efa"] = "Efai", ["efe"] = "Efe", ["efi"] = "Efik", ["ega"] = "Ega", ["egl"] = "Emilian", ["ego"] = "Eggon", ["egx-dem"] = "Demotic", ["egy"] = "Egyptian", ["ehu"] = "Ehueun", ["eip"] = "Eipomek", ["eit"] = "Eitiep", ["eiv"] = "Askopan", ["eja"] = "Ejamat", ["eka"] = "Ekajuk", ["eke"] = "Ekit", ["ekg"] = "Ekari", ["eki"] = "Eki", ["ekl"] = "Kolhe", ["ekm"] = "Elip", ["eko"] = "Koti", ["ekp"] = "Ekpeye", ["ekr"] = "Yace", ["eky"] = "Eastern Kayah", ["el"] = "Greek", ["ele"] = "Elepi", ["elh"] = "El Hugeirat", ["eli"] = "Nding", ["elk"] = "Elkei", ["elm"] = "Eleme", ["elo"] = "El Molo", ["elu"] = "Elu", ["elu-prk"] = "Helu", ["elx"] = "Elamite", ["ema"] = "Emai", ["emb"] = "Embaloh", ["eme"] = "Emerillon", ["emg"] = "Eastern Meohang", ["emi"] = "Mussau-Emira", ["emk"] = "Eastern Maninkakan", ["emm"] = "Mamulique", ["emn"] = "Eman", ["emp"] = "Northern Emberá", ["ems"] = "Alutiiq", ["emu"] = "Eastern Muria", ["emw"] = "Emplawas", ["emx"] = "Erromintxela", ["emy"] = "Epigraphic Mayan", ["en"] = "अंग्रेज़ी", ["ena"] = "Apali", ["enb"] = "Markweeta", ["enc"] = "En", ["end"] = "Ende", ["enf"] = "Forest Enets", ["enh"] = "Tundra Enets", ["enl"] = "Enlhet", ["enm"] = "Middle English", ["enn"] = "Engenni", ["eno"] = "Enggano", ["enq"] = "Enga", ["enr"] = "Emem", ["enu"] = "Enu", ["env"] = "Enwan", ["enw"] = "Enwang", ["enx"] = "Enxet", ["eo"] = "Esperanto", ["eot"] = "Eotile", ["epi"] = "Epie", ["era"] = "Eravallan", ["erg"] = "Sie", ["erh"] = "Eruwa", ["eri"] = "Ogea", ["erk"] = "South Efate", ["ero"] = "Horpa", ["err"] = "Erre", ["ers"] = "Ersu", ["ert"] = "Eritai", ["erw"] = "Erokwanas", ["es"] = "Spanish", ["ese"] = "Ese Ejja", ["esh"] = "Eshtehardi", ["esi"] = "North Alaskan Inupiatun", ["esk"] = "Northwest Alaska Inupiatun", ["esl"] = "Egyptian Sign Language", ["esm"] = "Esuma", ["esn"] = "Salvadoran Sign Language", ["eso"] = "Estonian Sign Language", ["esq"] = "Esselen", ["ess"] = "Central Siberian Yupik", ["esu"] = "Yup'ik", ["esx-esk-pro"] = "Proto-Eskimo", ["esx-ink"] = "Inuktun", ["esx-inq"] = "Inuinnaqtun", ["esx-inu-pro"] = "Proto-Inuit", ["esx-pro"] = "Proto-Eskimo-Aleut", ["esx-tut"] = "Tunumiisut", ["esy"] = "Eskayan", ["et"] = "Estonian", ["etb"] = "Etebi", ["etc"] = "Etchemin", ["eth"] = "Ethiopian Sign Language", ["etn"] = "Eton (Vanuatu)", ["eto"] = "Eton (Cameroon)", ["etr"] = "Edolo", ["ets"] = "Yekhee", ["ett"] = "Etruscan", ["etu"] = "Ejagham", ["etx"] = "Eten", ["etz"] = "Semimi", ["eu"] = "Basque", ["euq-pro"] = "Proto-Basque", ["eve"] = "Even", ["evh"] = "Uvbie", ["evn"] = "Evenki", ["ewo"] = "Ewondo", ["ext"] = "Extremaduran", ["eya"] = "Eyak", ["eyo"] = "Keiyo", ["eza"] = "Ezaa", ["eze"] = "Uzekwe", ["fa"] = "फ़ारसी", ["faa"] = "Fasu", ["fab"] = "Annobonese", ["fad"] = "Wagi", ["faf"] = "Fagani", ["fag"] = "Finongan", ["fah"] = "Baissa Fali", ["fai"] = "Faiwol", ["faj"] = "Faita", ["fak"] = "Fang (Beboid)", ["fal"] = "South Fali", ["fam"] = "Fam", ["fan"] = "Fang (Bantu)", ["fap"] = "Palor", ["far"] = "Fataleka", ["fau"] = "Fayu", ["fax"] = "Fala", ["fay"] = "Southwestern Fars", ["faz"] = "Northwestern Fars", ["fbl"] = "West Albay Bikol", ["fcs"] = "Quebec Sign Language", ["fer"] = "Feroge", ["ff"] = "Fula", ["ffi"] = "Foia Foia", ["fgr"] = "Fongoro", ["fi"] = "Finnish", ["fia"] = "Nobiin", ["fie"] = "Fyer", ["fip"] = "Fipa", ["fir"] = "Firan", ["fit"] = "Meänkieli", ["fiw"] = "Fiwaga", ["fj"] = "Fijian", ["fkk"] = "Kirya-Konzel", ["fkv"] = "Kven", ["fla"] = "Montana Salish", ["flh"] = "Foau", ["fli"] = "Fali", ["fll"] = "North Fali", ["fln"] = "Flinders Island", ["flr"] = "Fuliiru", ["fly"] = "Tsotsitaal", ["fmp"] = "Fe'fe'", ["fmu"] = "Far Western Muria", ["fng"] = "Fanagalo", ["fni"] = "Fania", ["fo"] = "Faroese", ["fod"] = "Foodo", ["foi"] = "Foi", ["fom"] = "Foma", ["fon"] = "Fon", ["for"] = "Fore", ["fos"] = "Siraya", ["fpe"] = "Pichinglis", ["fqs"] = "Fas", ["fr"] = "French", ["frd"] = "Fordata", ["frm"] = "Middle French", ["fro"] = "Old French", ["frp"] = "Franco-Provençal", ["frq"] = "Forak", ["frr"] = "North Frisian", ["frt"] = "Fortsenal", ["fse"] = "Finnish Sign Language", ["fsl"] = "French Sign Language", ["fss"] = "Finnish-Swedish Sign Language", ["fud"] = "East Futuna", ["fuj"] = "Ko", ["fum"] = "Fum", ["fun"] = "Fulniô", ["fur"] = "Friulian", ["fut"] = "Futuna-Aniwa", ["fuu"] = "Furu", ["fuy"] = "Fuyug", ["fvr"] = "Fur", ["fwa"] = "Fwâi", ["fwe"] = "Fwe", ["fy"] = "West Frisian", ["ga"] = "Irish", ["gaa"] = "Ga", ["gab"] = "Gabri", ["gac"] = "Mixed Great Andamanese", ["gad"] = "Gaddang", ["gae"] = "Warekena", ["gaf"] = "Gende", ["gag"] = "Gagauz", ["gah"] = "Alekano", ["gai"] = "Borei", ["gaj"] = "Gadsup", ["gak"] = "Gamkonora", ["gal"] = "Galoli", ["gam"] = "Kandawo", ["gan"] = "Gan", ["gao"] = "Gants", ["gap"] = "Gal", ["gaq"] = "Gata'", ["gar"] = "Galeya", ["gas"] = "Adiwasi Garasia", ["gat"] = "Kenati", ["gau"] = "Kondekor", ["gaw"] = "Nobonob", ["gay"] = "Gayo", ["gba"] = "Gbaya", ["gbb"] = "Kaytetye", ["gbd"] = "Karadjeri", ["gbe"] = "Niksek", ["gbf"] = "Gaikundi", ["gbg"] = "Gbanziri", ["gbh"] = "Defi Gbe", ["gbi"] = "Galela", ["gbj"] = "Bodo Gadaba", ["gbk"] = "Gaddi", ["gbl"] = "Gamit", ["gbm"] = "Garhwali", ["gbn"] = "Mo'da", ["gbo"] = "Northern Grebo", ["gbp"] = "Gbaya-Bossangoa", ["gbq"] = "Gbaya-Bozoum", ["gbr"] = "Gbagyi", ["gbs"] = "Gbesi Gbe", ["gbu"] = "Gagadu", ["gbv"] = "Gbanu", ["gbw"] = "Gabi", ["gbx"] = "Eastern Xwla Gbe", ["gby"] = "Gbari", ["gcc"] = "Mali", ["gcd"] = "Ganggalida", ["gce"] = "Galice", ["gcf"] = "Antillean Creole", ["gcl"] = "Grenadian Creole English", ["gcn"] = "Gaina", ["gcr"] = "Guianese Creole", ["gct"] = "Colonia Tovar German", ["gd"] = "Scottish Gaelic", ["gdb"] = "Ollari", ["gdc"] = "Gugu Badhun", ["gdd"] = "Gedaged", ["gde"] = "Gude", ["gdf"] = "Guduf-Gava", ["gdg"] = "Ga'dang", ["gdh"] = "Gadjerawang", ["gdi"] = "Gundi", ["gdj"] = "Kurtjar", ["gdk"] = "Gadang", ["gdl"] = "Dirasha", ["gdm"] = "Laal", ["gdn"] = "Umanakaina", ["gdo"] = "Godoberi", ["gdq"] = "Mehri", ["gdr"] = "Wipi", ["gds"] = "Ghandruk Sign Language", ["gdt"] = "Kungardutyi", ["gdu"] = "Gudu", ["gdx"] = "Godwari", ["gea"] = "Geruma", ["geb"] = "Kire", ["gec"] = "Gboloo Grebo", ["ged"] = "Gade", ["geg"] = "Gengle", ["geh"] = "Hutterisch", ["gei"] = "Gebe", ["gej"] = "Gen", ["gek"] = "Gerka", ["gel"] = "Fakkanci", ["gem-bur"] = "Burgundian", ["gem-pro"] = "Proto-Germanic", ["geq"] = "Geme", ["ges"] = "Geser-Gorom", ["gev"] = "Viya", ["gew"] = "Gera", ["gex"] = "Garre", ["gey"] = "Enya", ["gez"] = "Ge'ez", ["gfk"] = "Patpatar", ["gft"] = "Gafat", ["gga"] = "Gao", ["ggb"] = "Gbii", ["ggd"] = "Gugadj", ["gge"] = "Guragone", ["ggg"] = "Gurgula", ["ggk"] = "Kungarakany", ["ggl"] = "Ganglau", ["ggn"] = "Eastern Gurung", ["ggt"] = "Gitua", ["ggu"] = "Gban", ["ggw"] = "Gogodala", ["gha"] = "Ghadames", ["ghe"] = "Southern Ghale", ["ghh"] = "Northern Ghale", ["ghk"] = "Geko Karen", ["ghl"] = "Ghulfan", ["ghn"] = "Ghanongga", ["gho"] = "Ghomara", ["ghr"] = "Ghera", ["ghs"] = "Guhu-Samane", ["ght"] = "Kutang Ghale", ["gia"] = "Kitja", ["gib"] = "Gibanawa", ["gid"] = "Gidar", ["gie"] = "Guébie", ["gig"] = "Goaria", ["gih"] = "Githabul", ["gii"] = "Girirra", ["gil"] = "Gilbertese", ["gim"] = "Gimi (Goroka)", ["gin"] = "Hinukh", ["gio"] = "Gelao", ["gip"] = "Gimi (Austronesian)", ["giq"] = "Green Gelao", ["gir"] = "Red Gelao", ["gis"] = "North Giziga", ["git"] = "Gitxsan", ["giu"] = "Mulao", ["giw"] = "White Gelao", ["gix"] = "Gilima", ["giy"] = "Giyug", ["giz"] = "South Giziga", ["gji"] = "Geji", ["gjk"] = "Kachi Koli", ["gjm"] = "Gunditjmara", ["gjn"] = "Gonja", ["gju"] = "Gojri", ["gka"] = "Guya", ["gkd"] = "Magɨ", ["gke"] = "Ndai", ["gkn"] = "Gokana", ["gko"] = "Kok-Nar", ["gkp"] = "Guinea Kpelle", ["gl"] = "Galician", ["glc"] = "Bon Gula", ["gld"] = "Nanai", ["glh"] = "Northwest Pashayi", ["glj"] = "Kulaal", ["glk"] = "Gilaki", ["glo"] = "Galambu", ["glr"] = "Glaro-Twabo", ["glu"] = "Gula", ["glw"] = "Glavda", ["gly"] = "Gule", ["gma"] = "Gambera", ["gmb"] = "Gula'alaa", ["gmd"] = "Mághdì", ["gme-cgo"] = "Crimean Gothic", ["gmg"] = "Magiyi", ["gmh"] = "Middle High German", ["gml"] = "Middle Low German", ["gmm"] = "Gbaya-Mbodomo", ["gmn"] = "Gimnime", ["gmq-gut"] = "Gutnish", ["gmq-jmk"] = "Jamtish", ["gmq-mno"] = "Middle Norwegian", ["gmq-oda"] = "Old Danish", ["gmq-osw"] = "Old Swedish", ["gmq-pro"] = "Proto-Norse", ["gmq-scy"] = "Scanian", ["gmu"] = "Gumalu", ["gmv"] = "Gamo", ["gmw-bgh"] = "Bergish", ["gmw-cfr"] = "Central Franconian", ["gmw-ecg"] = "East Central German", ["gmw-gts"] = "Gottscheerish", ["gmw-jdt"] = "Jersey Dutch", ["gmw-pro"] = "Proto-West Germanic", ["gmw-rfr"] = "Rhine Franconian", ["gmw-stm"] = "Sathmar Swabian", ["gmw-tsx"] = "Transylvanian Saxon", ["gmw-vog"] = "Volga German", ["gmw-zps"] = "Zipser German", ["gmx"] = "Magoma", ["gmy"] = "Mycenaean Greek", ["gmz"] = "Mgbo", ["gn"] = "Guaraní", ["gn-cls"] = "Classical Guaraní", ["gna"] = "Kaansa", ["gnb"] = "Gangte", ["gnc"] = "Guanche", ["gnd"] = "Zulgo-Gemzek", ["gne"] = "Ganang", ["gng"] = "Ngangam", ["gnh"] = "Lere", ["gni"] = "Gooniyandi", ["gnj"] = "Ngen", ["gnk"] = "ǁGana", ["gnl"] = "Gangulu", ["gnm"] = "Ginuman", ["gnn"] = "Gumatj", ["gnq"] = "Gana", ["gnr"] = "Gureng Gureng", ["gnt"] = "Guntai", ["gnu"] = "Gnau", ["gnw"] = "Western Bolivian Guaraní", ["gnz"] = "Ganzi", ["goa"] = "Guro", ["gob"] = "Playero", ["goc"] = "Gorakor", ["god"] = "Godié", ["goe"] = "Gongduk", ["gof"] = "Gofa", ["gog"] = "Gogo", ["goh"] = "Old High German", ["goi"] = "Gobasi", ["goj"] = "Gowlan", ["gol"] = "Gola", ["gon"] = "Gondi", ["goo"] = "Gone Dau", ["gop"] = "Yeretuar", ["goq"] = "Gorap", ["gor"] = "Gorontalo", ["got"] = "Gothic", ["gou"] = "Gavar", ["gov"] = "Goo", ["gow"] = "Gorowa", ["gox"] = "Gobu", ["goy"] = "Goundo", ["goz"] = "Gozarkhani", ["gpa"] = "Gupa-Abawa", ["gpn"] = "Taiap", ["gqa"] = "Ga'anda", ["gqi"] = "Guiqiong", ["gqn"] = "Kinikinao", ["gqr"] = "Gor", ["gqu"] = "Qau", ["gra"] = "Rajput Garasia", ["grb"] = "Grebo", ["grc"] = "Ancient Greek", ["grd"] = "Guruntum", ["grg"] = "Madi", ["grh"] = "Gbiri-Niragu", ["gri"] = "Ghari", ["grj"] = "Southern Grebo", ["grk-cal"] = "Calabrian Greek", ["grk-ita"] = "Italiot Greek", ["grk-mar"] = "Mariupol Greek", ["grk-pro"] = "Proto-Hellenic", ["grm"] = "Kota Marudu Talantang", ["gro"] = "Groma", ["grq"] = "Gorovu", ["grs"] = "Gresi", ["grt"] = "Garo", ["gru"] = "Kistane", ["grv"] = "Central Grebo", ["grw"] = "Gweda", ["grx"] = "Guriaso", ["gry"] = "Barclayville Grebo", ["grz"] = "Guramalum", ["gse"] = "Ghanaian Sign Language", ["gsg"] = "German Sign Language", ["gsl"] = "Gusilay", ["gsm"] = "Guatemalan Sign Language", ["gsn"] = "Gusan", ["gso"] = "Southwest Gbaya", ["gsp"] = "Wasembo", ["gss"] = "Greek Sign Language", ["gsw"] = "Alemannic German", ["gta"] = "Guató", ["gtu"] = "Aghu Tharrnggala", ["gu"] = "Gujarati", ["gua"] = "Shiki", ["gub"] = "Guajajára", ["guc"] = "Wayuu", ["gud"] = "Yocoboué Dida", ["gue"] = "Gurindji", ["guf"] = "Gupapuyngu", ["gug"] = "Paraguayan Guaraní", ["guh"] = "Guahibo", ["gui"] = "Eastern Bolivian Guaraní", ["guk"] = "Gumuz", ["gul"] = "Gullah", ["gum"] = "Guambiano", ["gun"] = "Mbyá Guaraní", ["guo"] = "Guayabero", ["gup"] = "Gunwinggu", ["guq"] = "Aché", ["gur"] = "Farefare", ["gus"] = "Guinean Sign Language", ["gut"] = "Maléku Jaíka", ["guu"] = "Yanomamö", ["guv"] = "Gey", ["guw"] = "Gun", ["gux"] = "Gourmanchéma", ["guz"] = "Gusii", ["gv"] = "Manx", ["gva"] = "Kaskihá", ["gvc"] = "Guanano", ["gve"] = "Duwet", ["gvf"] = "Golin", ["gvj"] = "Guajá", ["gvl"] = "Gulay", ["gvm"] = "Gurmana", ["gvn"] = "Kuku-Yalanji", ["gvo"] = "Gavião do Jiparaná", ["gvp"] = "Pará Gavião", ["gvr"] = "Western Gurung", ["gvs"] = "Gumawana", ["gvy"] = "Guyani", ["gwa"] = "Mbato", ["gwb"] = "Gwa", ["gwc"] = "Kalami", ["gwd"] = "Gawwada", ["gwe"] = "Gweno", ["gwf"] = "Gowro", ["gwg"] = "Moo", ["gwi"] = "Gwich'in", ["gwj"] = "Gcwi", ["gwm"] = "Awngthim", ["gwn"] = "Gwandara", ["gwr"] = "Gwere", ["gwt"] = "Gawar-Bati", ["gwu"] = "Guwamu", ["gww"] = "Kwini", ["gwx"] = "Gua", ["gxx"] = "Wè Southern", ["gya"] = "Northwest Gbaya", ["gyb"] = "Garus", ["gyd"] = "Kayardild", ["gye"] = "Gyem", ["gyf"] = "Gungabula", ["gyg"] = "Gbayi", ["gyi"] = "Gyele", ["gyl"] = "Gayil", ["gym"] = "Ngäbere", ["gyn"] = "Guyanese Creole English", ["gyo"] = "Gyalsumdo", ["gyr"] = "Guarayu", ["gyy"] = "Gunya", ["gza"] = "Ganza", ["gzn"] = "Gane", ["ha"] = "Hausa", ["haa"] = "Hän", ["hab"] = "Hanoi Sign Language", ["hac"] = "Gurani", ["had"] = "Hatam", ["haf"] = "Haiphong Sign Language", ["hag"] = "Hanga", ["hah"] = "Hahon", ["hai"] = "Haida", ["haj"] = "Hajong", ["hak"] = "Hakka", ["hal"] = "Halang", ["ham"] = "Hewa", ["hao"] = "Hakö", ["hap"] = "Hupla", ["har"] = "Harari", ["has"] = "Haisla", ["hav"] = "Havu", ["haw"] = "Hawaiian", ["hax"] = "Southern Haida", ["hay"] = "Haya", ["haz"] = "Hazaragi", ["hba"] = "Hamba", ["hbb"] = "Huba", ["hbn"] = "Heiban", ["hbu"] = "Habu", ["hca"] = "अंडमान क्रियोल हिंदी", ["hch"] = "Huichol", ["hdn"] = "Northern Haida", ["hds"] = "Honduras Sign Language", ["hdy"] = "Hadiyya", ["he"] = "Hebrew", ["hea"] = "Northern Qiandong Miao", ["hed"] = "Herdé", ["heg"] = "Helong", ["heh"] = "Hehe", ["hei"] = "Heiltsuk", ["hem"] = "Hemba", ["hgm"] = "Haiǁom", ["hgw"] = "Haigwai", ["hhi"] = "Hoia Hoia", ["hhr"] = "Kerak", ["hhy"] = "Hoyahoya", ["hi"] = "हिंदी", ["hia"] = "Lamang", ["hib"] = "Hibito", ["hid"] = "Hidatsa", ["hif"] = "फीजी हिंदी", ["hig"] = "Kamwe", ["hih"] = "Pamosu", ["hii"] = "Hinduri", ["hij"] = "Hijuk", ["hik"] = "Seit-Kaitetu", ["hil"] = "Hiligaynon", ["hio"] = "Tshwa", ["hir"] = "Himarimã", ["hit"] = "Hittite", ["hiw"] = "Hiw", ["hix"] = "Hixkaryana", ["hji"] = "Haji", ["hka"] = "Kahe", ["hke"] = "Hunde", ["hkk"] = "Hunjara-Kaina Ke", ["hkn"] = "Mel-Khaonh", ["hks"] = "Hong Kong Sign Language", ["hla"] = "Halia", ["hlb"] = "Halbi", ["hld"] = "Halang Doan", ["hle"] = "Hlersu", ["hlt"] = "Nga La", ["hma"] = "Southern Mashan Hmong", ["hmb"] = "Humburi Senni", ["hmc"] = "Central Huishui Hmong", ["hmd"] = "A-Hmao", ["hme"] = "Eastern Huishui Hmong", ["hmf"] = "Hmong Don", ["hmg"] = "Southwestern Guiyang Hmong", ["hmh"] = "Southwestern Huishui Hmong", ["hmi"] = "Northern Huishui Hmong", ["hmj"] = "Ge", ["hmk"] = "Maek", ["hml"] = "Luopohe Hmong", ["hmm"] = "Central Mashan Hmong", ["hmn-pro"] = "Proto-Hmong", ["hmp"] = "Northern Mashan Hmong", ["hmq"] = "Eastern Qiandong Miao", ["hmr"] = "Hmar", ["hms"] = "Southern Qiandong Miao", ["hmt"] = "Hamtai", ["hmu"] = "Hamap", ["hmv"] = "Hmong Dô", ["hmw"] = "Western Mashan Hmong", ["hmx-mie-pro"] = "Proto-Mien", ["hmx-pro"] = "Proto-Hmong-Mien", ["hmy"] = "Southern Guiyang Hmong", ["hmz"] = "Hmong Shua", ["hna"] = "Mina", ["hnd"] = "Southern Hindko", ["hne"] = "Chhattisgarhi", ["hnh"] = "ǁAni", ["hni"] = "Hani", ["hnj"] = "Green Hmong", ["hnn"] = "Hanunoo", ["hno"] = "Northern Hindko", ["hns"] = "Caribbean Hindustani", ["hnu"] = "Hung", ["ho"] = "Hiri Motu", ["hoa"] = "Hoava", ["hob"] = "Austronesian Mari", ["hoc"] = "Ho", ["hod"] = "Holma", ["hoe"] = "Horom", ["hoh"] = "Hobyót", ["hoi"] = "Holikachuk", ["hoj"] = "Hadothi", ["hol"] = "Holu", ["hom"] = "Homa", ["hoo"] = "Holoholo", ["hop"] = "Hopi", ["hor"] = "Horo", ["hos"] = "Ho Chi Minh City Sign Language", ["hot"] = "Hote", ["hov"] = "Hovongan", ["how"] = "Honi", ["hoy"] = "Holiya", ["hoz"] = "Hozo", ["hpo"] = "Hpon", ["hps"] = "Hawai'i Pidgin Sign Language", ["hra"] = "Hrangkhol", ["hrc"] = "Niwer Mil", ["hre"] = "Hre", ["hrk"] = "Haruku", ["hrm"] = "Horned Miao", ["hro"] = "Haroi", ["hrp"] = "Nhirrpi", ["hrt"] = "Hértevin", ["hru"] = "Hruso", ["hrw"] = "Warwar Feni", ["hrx"] = "Hunsrik", ["hrz"] = "Harzani", ["hsb"] = "Upper Sorbian", ["hsh"] = "Hungarian Sign Language", ["hsl"] = "Hausa Sign Language", ["hsn"] = "Xiang", ["hss"] = "Harsusi", ["ht"] = "Haitian Creole", ["hti"] = "Hoti", ["hto"] = "Minica Huitoto", ["hts"] = "Hadza", ["htu"] = "Hitu", ["hu"] = "Hungarian", ["hub"] = "Huambisa", ["huc"] = "ǂHoan", ["hud"] = "Huaulu", ["huf"] = "Humene", ["hug"] = "Huachipaeri", ["huh"] = "Huilliche", ["hui"] = "Huli", ["huj"] = "Northern Guiyang Hmong", ["huk"] = "Hulung", ["hul"] = "Hula", ["hum"] = "Hungana", ["huo"] = "Hu", ["hup"] = "Hupa", ["huq"] = "Tsat", ["hur"] = "Halkomelem", ["hus"] = "Wastek", ["huu"] = "Murui Huitoto", ["huv"] = "Huave", ["huw"] = "Hukumina", ["hux"] = "Nüpode Huitoto", ["huy"] = "Hulaulá", ["huz"] = "Hunzib", ["hvc"] = "Haitian Vodoun Culture Language", ["hvk"] = "Haveke", ["hvn"] = "Sabu", ["hwa"] = "Wané", ["hwc"] = "Hawaiian Creole", ["hwo"] = "Hwana", ["hy"] = "Armenian", ["hya"] = "Hya", ["hyx-pro"] = "Proto-Armenian", ["hz"] = "Herero", ["ia"] = "Interlingua", ["iai"] = "Iaai", ["ian"] = "Iatmul", ["iar"] = "Purari", ["iba"] = "Iban", ["ibb"] = "Ibibio", ["ibd"] = "Iwaidja", ["ibe"] = "Akpes", ["ibg"] = "Ibanag", ["ibh"] = "Bih", ["ibl"] = "Ibaloi", ["ibm"] = "Agoi", ["ibn"] = "Ibino", ["ibr"] = "Ibuoro", ["ibu"] = "Ibu", ["iby"] = "Ibani", ["ica"] = "Ede Ica", ["ich"] = "Etkywan", ["icl"] = "Icelandic Sign Language", ["icr"] = "Islander Creole English", ["id"] = "Indonesian", ["ida"] = "Idakho-Isukha-Tiriki", ["idb"] = "Indo-Portuguese", ["idc"] = "Idon", ["idd"] = "Ede Idaca", ["ide"] = "Idere", ["idi"] = "Idi", ["idr"] = "Indri", ["ids"] = "Idesa", ["idt"] = "Idaté", ["idu"] = "Idoma", ["ie"] = "Interlingue", ["ifa"] = "Amganad Ifugao", ["ifb"] = "Batad Ifugao", ["ife"] = "Ifè", ["iff"] = "Ifo", ["ifk"] = "Tuwali Ifugao", ["ifm"] = "Teke-Fuumu", ["ifu"] = "Mayoyao Ifugao", ["ify"] = "Keley-I Kallahan", ["ig"] = "Igbo", ["igb"] = "Ebira", ["ige"] = "Igede", ["igg"] = "Igana", ["igl"] = "Igala", ["igm"] = "Kanggape", ["ign"] = "Ignaciano", ["igo"] = "Isebe", ["igs"] = "Glosa", ["igw"] = "Igwe", ["ihb"] = "Pidgin Iha", ["ihi"] = "Ihievbe", ["ihp"] = "Iha", ["ii"] = "Sichuan Yi", ["iir-nur-pro"] = "Proto-Nuristani", ["iir-pro"] = "Proto-Indo-Iranian", ["ijc"] = "Izon", ["ije"] = "Biseni", ["ijj"] = "Ede Ije", ["ijn"] = "Kalabari", ["ijo-pro"] = "Proto-Ijoid", ["ijs"] = "Southeast Ijo", ["ik"] = "Inupiaq", ["ike"] = "Eastern Canadian Inuktitut", ["iki"] = "Iko", ["ikk"] = "Ika", ["ikl"] = "Ikulu", ["iko"] = "Olulumo-Ikom", ["ikp"] = "Ikpeshi", ["ikr"] = "Ikaranggal", ["iks"] = "Inuit Sign Language", ["ikt"] = "Inuvialuktun", ["ikv"] = "Iku-Gora-Ankwa", ["ikw"] = "Ikwere", ["ikx"] = "Ik", ["ikz"] = "Ikizu", ["ila"] = "Ile Ape", ["ilb"] = "Ila", ["ilg"] = "Ilgar", ["ili"] = "Ili Turki", ["ilk"] = "Ilongot", ["ill"] = "Iranun", ["ilo"] = "Ilocano", ["ils"] = "International Sign", ["ilu"] = "Ili'uun", ["ilv"] = "Ilue", ["ima"] = "Mala Malasar", ["imi"] = "Anamgura", ["iml"] = "Miluk", ["imn"] = "Imonda", ["imo"] = "Imbongu", ["imr"] = "Imroing", ["ims"] = "Marsian", ["imy"] = "Milyan", ["inb"] = "Inga", ["inc-ash"] = "Ashokan Prakrit", ["inc-cen-pro"] = "Proto-Central Indo-Aryan", ["inc-gup"] = "Gurjar Apabhramsa", ["inc-kam"] = "Kamarupi Prakrit", ["inc-kha"] = "Khasa Prakrit", ["inc-kho"] = "Kholosi", ["inc-mas"] = "मध्य असमिया", ["inc-mbn"] = "Middle Bengali", ["inc-mgd"] = "Magadhi Prakrit", ["inc-mgu"] = "Middle Gujarati", ["inc-mor"] = "Middle Oriya", ["inc-oas"] = "प्रारंभिक असमिया", ["inc-obn"] = "Old Bengali", ["inc-ogu"] = "Old Gujarati", ["inc-ohi"] = "पुरानी हिंदी", ["inc-oor"] = "Old Oriya", ["inc-opa"] = "Old Punjabi", ["inc-ork"] = "Old Kamta", ["inc-pra"] = "Prakrit", ["inc-pro"] = "Proto-Indo-Aryan", ["inc-psc"] = "Paisaci Prakrit", ["inc-sap"] = "Sauraseni Apabhramsa", ["inc-tak"] = "Takka Apabhramsa", ["inc-vra"] = "Vracada Apabhramsa", ["ine-ana-pro"] = "Proto-Anatolian", ["ine-bsl-pro"] = "Proto-Balto-Slavic", ["ine-pae"] = "Paeonian", ["ine-pro"] = "Proto-Indo-European", ["ine-toc-pro"] = "Proto-Tocharian", ["ing"] = "Deg Xinag", ["inh"] = "Ingush", ["inj"] = "Jungle Inga", ["inl"] = "Indonesian Sign Language", ["inm"] = "Minaean", ["inn"] = "Isinai", ["ino"] = "Inoke-Yate", ["inp"] = "Iñapari", ["ins"] = "Indian Sign Language", ["int"] = "Intha", ["inz"] = "Ineseño", ["io"] = "Ido", ["ior"] = "Inor", ["iou"] = "Tuma-Irumu", ["iow"] = "Chiwere", ["ipi"] = "Ipili", ["ipo"] = "Ipiko", ["iqu"] = "Iquito", ["iqw"] = "Ikwo", ["ira-kms-pro"] = "Proto-Komisenian", ["ira-mny-pro"] = "Proto-Munji-Yidgha", ["ira-mpr-pro"] = "Proto-Medo-Parthian", ["ira-pat-pro"] = "Proto-Pathan", ["ira-pro"] = "Proto-Iranian", ["ira-sgc-pro"] = "Proto-Sogdic", ["ira-sgi-pro"] = "Proto-Sanglechi-Ishkashimi", ["ira-shr-pro"] = "Proto-Shughni-Roshani", ["ira-shy-pro"] = "Proto-Shughni-Yazghulami", ["ira-sym-pro"] = "Proto-Shughni-Yazghulami-Munji", ["ira-wnj"] = "Vanji", ["ira-zgr-pro"] = "Proto-Zaza-Gorani", ["ire"] = "Iresim", ["irh"] = "Irarutu", ["iri"] = "Rigwe", ["irk"] = "Iraqw", ["irn"] = "Irantxe", ["iro-ere"] = "Erie", ["iro-min"] = "Mingo", ["iro-nor-pro"] = "Proto-North Iroquoian", ["iro-pro"] = "Proto-Iroquoian", ["irr"] = "Ir", ["iru"] = "Irula", ["irx"] = "Kamberau", ["iry"] = "Iraya", ["is"] = "Icelandic", ["isa"] = "Isabi", ["isc"] = "Isconahua", ["isd"] = "Isnag", ["ise"] = "Italian Sign Language", ["isg"] = "Irish Sign Language", ["ish"] = "Esan", ["isi"] = "Nkem-Nkum", ["isk"] = "Ishkashimi", ["ism"] = "Masimasi", ["isn"] = "Isanzu", ["iso"] = "Isoko", ["isr"] = "Israeli Sign Language", ["ist"] = "Istriot", ["isu"] = "Isu", ["it"] = "Italian", ["itb"] = "Binongan Itneg", ["itc-pro"] = "Proto-Italic", ["itd"] = "Southern Tidong", ["ite"] = "Itene", ["iti"] = "Inlaod Itneg", ["itk"] = "Judeo-Italian", ["itl"] = "Itelmen", ["itm"] = "Itu Mbon Uzo", ["ito"] = "Itonama", ["itr"] = "Iteri", ["its"] = "Itsekiri", ["itt"] = "Maeng Itneg", ["itv"] = "Itawit", ["itw"] = "Ito", ["itx"] = "Itik", ["ity"] = "Moyadan Itneg", ["itz"] = "Itzá", ["iu"] = "Inuktitut", ["ium"] = "Iu Mien", ["ivb"] = "Ibatan", ["ivv"] = "Ivatan", ["iwk"] = "I-Wak", ["iwm"] = "Iwam", ["iwo"] = "Iwur", ["iws"] = "Sepik Iwam", ["ixc"] = "Ixcatec", ["ixl"] = "Ixil", ["iya"] = "Iyayu", ["iyo"] = "Mesaka", ["iyx"] = "Yaa", ["izh"] = "Ingrian", ["izi"] = "Izi-Ezaa-Ikwo-Mgbo", ["izr"] = "Izere", ["izz"] = "Izi", ["ja"] = "Japanese", ["jaa"] = "Jamamadí", ["jab"] = "Hyam", ["jac"] = "Jakaltek", ["jad"] = "Jahanka", ["jae"] = "Jabem", ["jaf"] = "Jara", ["jah"] = "Jah Hut", ["jaj"] = "Zazao", ["jal"] = "Yalahatan", ["jam"] = "Jamaican Creole", ["jan"] = "Janday", ["jao"] = "Yanyuwa", ["jaq"] = "Yaqay", ["jas"] = "New Caledonian Javanese", ["jat"] = "Jakati", ["jau"] = "Yaur", ["jax"] = "Jambi Malay", ["jay"] = "Yan-nhangu", ["jaz"] = "Jawe", ["jbj"] = "Arandai", ["jbk"] = "Barikewa", ["jbn"] = "Nefusa", ["jbo"] = "Lojban", ["jbr"] = "Jofotek-Bromnya", ["jbt"] = "Jabutí", ["jbu"] = "Jukun Takum", ["jbw"] = "Yawijibaya", ["jcs"] = "Jamaican Country Sign Language", ["jct"] = "Krymchak", ["jda"] = "Jad", ["jdg"] = "Jadgali", ["jdt"] = "Judeo-Tat", ["jeb"] = "Jebero", ["jee"] = "Jerung", ["jeg"] = "Jeng", ["jeh"] = "Jeh", ["jei"] = "Yei", ["jek"] = "Jeri Kuo", ["jel"] = "Yelmek", ["jen"] = "Dza", ["jer"] = "Jere", ["jet"] = "Manem", ["jeu"] = "Jonkor Bourmataguil", ["jgb"] = "Ngbee", ["jgk"] = "Gwak", ["jgo"] = "Ngomba", ["jhi"] = "Jehai", ["jhs"] = "Jhankot Sign Language", ["jia"] = "Jina", ["jib"] = "Jibu", ["jic"] = "Tol", ["jid"] = "Bu", ["jie"] = "Jilbe", ["jig"] = "Jingulu", ["jih"] = "Shangzhai", ["jii"] = "Jiiddu", ["jil"] = "Jilim", ["jim"] = "Jimjimen", ["jio"] = "Jiamao", ["jiq"] = "Khroskyabs", ["jit"] = "Jita", ["jiu"] = "Youle Jinuo", ["jiv"] = "Shuar", ["jiy"] = "Buyuan Jinuo", ["jje"] = "Jeju", ["jjr"] = "Zhár", ["jka"] = "Kaera", ["jko"] = "Kubo", ["jkr"] = "Koro (India)", ["jku"] = "Labir", ["jle"] = "Ngile", ["jls"] = "Jamaican Sign Language", ["jma"] = "Dima", ["jmb"] = "Zumbun", ["jmc"] = "Machame", ["jmd"] = "Yamdena", ["jmi"] = "Jimi", ["jml"] = "Jumli", ["jmn"] = "Makuri Naga", ["jmr"] = "Kamara", ["jmw"] = "Mouwase", ["jmx"] = "Western Juxtlahuaca Mixtec", ["jna"] = "Jangshung", ["jnd"] = "Jandavra", ["jng"] = "Yangman", ["jni"] = "Janji", ["jnj"] = "Yemsa", ["jnl"] = "Rawat", ["jns"] = "Jaunsari", ["job"] = "Joba", ["jod"] = "Wojenaka", ["jor"] = "Jorá", ["jos"] = "Jordanian Sign Language", ["jow"] = "Jowulu", ["jpr"] = "Judeo-Persian", ["jpx-pro"] = "Proto-Japonic", ["jpx-ryu-pro"] = "Proto-Ryukyuan", ["jqr"] = "Jaqaru", ["jra"] = "Jarai", ["jrr"] = "Jiru", ["jru"] = "Japrería", ["jsl"] = "Japanese Sign Language", ["jua"] = "Júma", ["jub"] = "Wannu", ["juc"] = "Jurchen", ["jud"] = "Worodougou", ["juh"] = "Hone", ["jui"] = "Ngadjuri", ["juk"] = "Wapan", ["jul"] = "Jirel", ["jum"] = "Jumjum", ["jun"] = "Juang", ["juo"] = "Jiba", ["jup"] = "Hupdë", ["jur"] = "Jurúna", ["jus"] = "Jumla Sign Language", ["jut"] = "Jutish", ["juu"] = "Ju", ["juw"] = "Wãpha", ["juy"] = "Juray", ["jv"] = "Javanese", ["jvd"] = "Javindo", ["jvn"] = "Caribbean Javanese", ["jwi"] = "Jwira-Pepesa", ["jyy"] = "Jaya", ["ka"] = "Georgian", ["kaa"] = "Karakalpak", ["kab"] = "Kabyle", ["kac"] = "Jingpho", ["kad"] = "Kadara", ["kae"] = "Ketangalan", ["kaf"] = "Katso", ["kag"] = "Kajaman", ["kah"] = "Fer", ["kai"] = "Karekare", ["kaj"] = "Jju", ["kak"] = "Kayapa Kallahan", ["kam"] = "Kamba", ["kao"] = "Kassonke", ["kap"] = "Bezhta", ["kaq"] = "Capanahua", ["kar-pro"] = "Proto-Karen", ["kaw"] = "Old Javanese", ["kax"] = "Kao", ["kay"] = "Kamayurá", ["kba"] = "Kalarko", ["kbb"] = "Kaxuyana", ["kbc"] = "Kadiwéu", ["kbd"] = "Kabardian", ["kbe"] = "Kanju", ["kbh"] = "Camsá", ["kbi"] = "Kaptiau", ["kbj"] = "Kari", ["kbk"] = "Grass Koiari", ["kbm"] = "Iwal", ["kbn"] = "Kare (Africa)", ["kbo"] = "Keliko", ["kbp"] = "Kabiyé", ["kbq"] = "Kamano", ["kbr"] = "Kafa", ["kbs"] = "Kande", ["kbt"] = "Gabadi", ["kbu"] = "Kabutra", ["kbv"] = "Kamberataro", ["kbw"] = "Kaiep", ["kbx"] = "Ap Ma", ["kbz"] = "Duhwa", ["kca"] = "Khanty", ["kcb"] = "Kawacha", ["kcc"] = "Lubila", ["kcd"] = "Ngkâlmpw Kanum", ["kce"] = "Kaivi", ["kcf"] = "Ukaan", ["kcg"] = "Tyap", ["kch"] = "Vono", ["kci"] = "Kamantan", ["kcj"] = "Kobiana", ["kck"] = "Kalanga", ["kcl"] = "Kala", ["kcm"] = "Tar Gula", ["kcn"] = "Nubi", ["kco"] = "Kinalakna", ["kcp"] = "Kanga", ["kcq"] = "Kamo", ["kcr"] = "Katla", ["kcs"] = "Koenoem", ["kct"] = "Kaian", ["kcu"] = "Kikami", ["kcv"] = "Kete", ["kcw"] = "Kabwari", ["kcx"] = "Kachama-Ganjule", ["kcy"] = "Korandje", ["kcz"] = "Konongo", ["kda"] = "Worimi", ["kdc"] = "Kutu", ["kdd"] = "Yankunytjatjara", ["kde"] = "Makonde", ["kdf"] = "Mamusi", ["kdg"] = "Seba", ["kdh"] = "Tem", ["kdi"] = "Kumam", ["kdj"] = "Karamojong", ["kdk"] = "Numee", ["kdl"] = "Tsikimba", ["kdm"] = "Kagoma", ["kdn"] = "Kunda", ["kdp"] = "Kaningdon-Nindem", ["kdq"] = "Koch", ["kdr"] = "Karaim", ["kdt"] = "Kuy", ["kdu"] = "Kadaru", ["kdv"] = "Kado", ["kdw"] = "Koneraw", ["kdx"] = "Kam", ["kdy"] = "Keder", ["kdz"] = "Kwaja", ["kea"] = "Kabuverdianu", ["keb"] = "Kélé", ["kec"] = "Keiga", ["ked"] = "Kerewe", ["kee"] = "Eastern Keres", ["kef"] = "Kpessi", ["keg"] = "Tese", ["keh"] = "Keak", ["kei"] = "Kei", ["kej"] = "Kadar", ["kek"] = "Q'eqchi", ["kel"] = "Kela-Yela", ["kem"] = "Kemak", ["ken"] = "Kenyang", ["keo"] = "Kakwa", ["kep"] = "Kaikadi", ["keq"] = "Kamar", ["ker"] = "Kera", ["kes"] = "Kugbo", ["ket"] = "Ket", ["keu"] = "Akebu", ["kev"] = "Kanikkaran", ["kew"] = "Kewa", ["kex"] = "Kukna", ["key"] = "Kupia", ["kez"] = "Kukele", ["kfa"] = "Kodava", ["kfb"] = "Kolami", ["kfc"] = "Konda-Dora", ["kfd"] = "Korra Koraga", ["kfe"] = "Kota (India)", ["kff"] = "Koya", ["kfg"] = "Kudiya", ["kfh"] = "Kurichiya", ["kfi"] = "Kannada Kurumba", ["kfj"] = "Kemiehua", ["kfk"] = "Kinnauri", ["kfl"] = "Kung", ["kfn"] = "Kuk", ["kfo"] = "Koro (West Africa)", ["kfp"] = "Korwa", ["kfq"] = "Korku", ["kfr"] = "Kachchi", ["kfs"] = "Bilaspuri", ["kft"] = "Kanjari", ["kfu"] = "Katkari", ["kfv"] = "Kurmukar", ["kfw"] = "Kharam Naga", ["kfx"] = "Kullu Pahari", ["kfy"] = "Kumaoni", ["kfz"] = "Koromfé", ["kg"] = "Kongo", ["kga"] = "Koyaga", ["kgb"] = "Kawe", ["kgd"] = "Kataang", ["kge"] = "Komering", ["kgf"] = "Kube", ["kgg"] = "Kusunda", ["kgi"] = "Selangor Sign Language", ["kgj"] = "Gamale Kham", ["kgk"] = "Kaiwá", ["kgl"] = "Kunggari", ["kgm"] = "Karipúna", ["kgn"] = "Karingani", ["kgo"] = "Krongo", ["kgp"] = "Kaingang", ["kgq"] = "Kamoro", ["kgr"] = "Abun", ["kgs"] = "Kumbainggar", ["kgt"] = "Somyev", ["kgu"] = "Kobol", ["kgv"] = "Karas", ["kgw"] = "Karon Dori", ["kgx"] = "Kamaru", ["kgy"] = "Kyerung", ["kha"] = "Khasi", ["khb"] = "Lü", ["khc"] = "Tukang Besi North", ["khd"] = "Bädi Kanum", ["khe"] = "Korowai", ["khf"] = "Khuen", ["khh"] = "Kehu", ["khi-kho-pro"] = "Proto-Khoe", ["khi-kun"] = "ǃKung", ["khj"] = "Kuturmi", ["khl"] = "Lusi", ["khn"] = "Khandeshi", ["kho"] = "Khotanese", ["khp"] = "Kapauri", ["khq"] = "Koyra Chiini", ["khr"] = "Kharia", ["khs"] = "Kasua", ["kht"] = "Khamti", ["khu"] = "Nkhumbi", ["khv"] = "Khvarshi", ["khw"] = "Khowar", ["khx"] = "Kanu", ["khy"] = "Ekele", ["khz"] = "Keapara", ["ki"] = "Kikuyu", ["kia"] = "Kim", ["kib"] = "Koalib", ["kic"] = "Kickapoo", ["kid"] = "Koshin", ["kie"] = "Kibet", ["kif"] = "Eastern Parbate Kham", ["kig"] = "Kimaama", ["kih"] = "Kilmeri", ["kii"] = "Kitsai", ["kij"] = "Kilivila", ["kil"] = "Kariya", ["kim"] = "Tofa", ["kio"] = "Kiowa", ["kip"] = "Sheshi Kham", ["kiq"] = "Kosadle", ["kis"] = "Kis", ["kit"] = "Agob", ["kiv"] = "Kimbu", ["kiw"] = "Northeast Kiwai", ["kix"] = "Khiamniungan Naga", ["kiy"] = "Kirikiri", ["kiz"] = "Kisi", ["kj"] = "Kwanyama", ["kja"] = "Mlap", ["kjb"] = "Q'anjob'al", ["kjc"] = "Coastal Konjo", ["kjd"] = "Southern Kiwai", ["kje"] = "Kisar", ["kjg"] = "Khmu", ["kjh"] = "Khakas", ["kji"] = "Zabana", ["kjj"] = "Khinalug", ["kjk"] = "Highland Konjo", ["kjl"] = "Kham", ["kjm"] = "Kháng", ["kjn"] = "Kunjen", ["kjo"] = "Harijan Kinnauri", ["kjp"] = "Eastern Pwo", ["kjq"] = "Western Keres", ["kjr"] = "Kurudu", ["kjs"] = "East Kewa", ["kjt"] = "Phrae Pwo", ["kju"] = "Kashaya", ["kjx"] = "Ramopa", ["kjy"] = "Erave", ["kjz"] = "Bumthangkha", ["kk"] = "Kazakh", ["kka"] = "Kakanda", ["kkb"] = "Kwerisa", ["kkc"] = "Odoodee", ["kkd"] = "Kinuku", ["kke"] = "Kakabe", ["kkf"] = "Kalaktang Monpa", ["kkg"] = "Mabaka Valley Kalinga", ["kkh"] = "Khün", ["kki"] = "Kagulu", ["kkj"] = "Kako", ["kkk"] = "Kokota", ["kkl"] = "Kosarek Yale", ["kkm"] = "Kiong", ["kkn"] = "Kon Keu", ["kko"] = "Karko", ["kkp"] = "Koko-Bera", ["kkq"] = "Kaiku", ["kkr"] = "Kir-Balar", ["kks"] = "Kirfi", ["kkt"] = "Koi", ["kku"] = "Tumi", ["kkv"] = "Kangean", ["kkw"] = "Teke-Kukuya", ["kkx"] = "Kohin", ["kky"] = "Guugu Yimidhirr", ["kkz"] = "Kaska", ["kl"] = "Greenlandic", ["kla"] = "Klamath-Modoc", ["klb"] = "Kiliwa", ["klc"] = "Kolbila", ["kld"] = "Gamilaraay", ["kle"] = "Kulung", ["klf"] = "Kendeje", ["klg"] = "Tagakaulu Kalagan", ["klh"] = "Weliki", ["kli"] = "Kalumpang", ["klj"] = "Khalaj", ["klk"] = "Kono (Nigeria)", ["kll"] = "Kagan Kalagan", ["klm"] = "Kolom", ["kln"] = "Kalenjin", ["klo"] = "Kapya", ["klp"] = "Kamasa", ["klq"] = "Rumu", ["klr"] = "Khaling", ["kls"] = "Kalasha", ["klt"] = "Nukna", ["klu"] = "Klao", ["klv"] = "Maskelynes", ["klw"] = "Lindu", ["klx"] = "Koluwawa", ["kly"] = "Kalao", ["klz"] = "Kabola", ["km"] = "Khmer", ["kma"] = "Konni", ["kmb"] = "Kimbundu", ["kmc"] = "Southern Kam", ["kmd"] = "Madukayang Kalinga", ["kme"] = "Bakole", ["kmf"] = "Kare (New Guinea)", ["kmg"] = "Kâte", ["kmh"] = "Kalam", ["kmi"] = "Kami", ["kmj"] = "Kumarbhag Paharia", ["kmk"] = "Limos Kalinga", ["kml"] = "Tanudan Kalinga", ["kmm"] = "Kom (India)", ["kmn"] = "Awtuw", ["kmo"] = "Kwoma", ["kmp"] = "Gimme", ["kmq"] = "Kwama", ["kmr"] = "Northern Kurdish", ["kms"] = "Kamasau", ["kmt"] = "Kemtuik", ["kmu"] = "Kanite", ["kmv"] = "Karipúna Creole French", ["kmw"] = "Kumu", ["kmx"] = "Waboda", ["kmy"] = "Koma", ["kmz"] = "Khorasani Turkish", ["kn"] = "Kannada", ["kna"] = "Kanakuru", ["knb"] = "Lubuagan Kalinga", ["knd"] = "Konda", ["kne"] = "Kankanaey", ["knf"] = "Mankanya", ["kni"] = "Kanufi", ["knj"] = "Akatek", ["knk"] = "Kuranko", ["knl"] = "Keninjal", ["knm"] = "Kanamari", ["kno"] = "Kono (Sierra Leone)", ["knp"] = "Kwanja", ["knq"] = "Kintaq", ["knr"] = "Kaningra", ["kns"] = "Kensiu", ["knt"] = "Katukina", ["knu"] = "Kono (Guinea)", ["knv"] = "Tabo", ["knx"] = "Kendayan", ["kny"] = "Kanyok", ["knz"] = "Kalamsé", ["ko"] = "Korean", ["ko-ear"] = "Early Modern Korean", ["koa"] = "Konomala", ["koc"] = "Kpati", ["kod"] = "Kodi", ["koe"] = "Kacipo-Balesi", ["kof"] = "Kubi", ["kog"] = "Cogui", ["koh"] = "Koyo", ["koi"] = "Komi-Permyak", ["kok"] = "Konkani", ["kol"] = "Kol (New Guinea)", ["koo"] = "Konzo", ["kop"] = "Waube", ["koq"] = "Kota (Gabon)", ["kos"] = "Kosraean", ["kot"] = "Lagwan", ["kou"] = "Koke", ["kov"] = "Kudu-Camo", ["kow"] = "Kugama", ["koy"] = "Koyukon", ["koz"] = "Korak", ["kpa"] = "Kutto", ["kpb"] = "Mullu Kurumba", ["kpc"] = "Curripaco", ["kpd"] = "Koba", ["kpe"] = "Kpelle", ["kpf"] = "Komba", ["kpg"] = "Kapingamarangi", ["kph"] = "Kplang", ["kpi"] = "Kofei", ["kpj"] = "Karajá", ["kpk"] = "Kpan", ["kpl"] = "Kpala", ["kpm"] = "Koho", ["kpn"] = "Kepkiriwát", ["kpo"] = "Ikposo", ["kpp"] = "Paku Karen", ["kpq"] = "Korupun-Sela", ["kpr"] = "Korafe-Yegha", ["kps"] = "Tehit", ["kpt"] = "Karata", ["kpu"] = "Kafoa", ["kpv"] = "Komi-Zyrian", ["kpw"] = "Kobon", ["kpx"] = "Mountain Koiari", ["kpy"] = "Koryak", ["kpz"] = "Kupsabiny", ["kqa"] = "Mum", ["kqb"] = "Kovai", ["kqc"] = "Doromu-Koki", ["kqd"] = "Koy Sanjaq Surat", ["kqe"] = "Kalagan", ["kqf"] = "Kakabai", ["kqg"] = "Khe", ["kqh"] = "Kisankasa", ["kqi"] = "Koitabu", ["kqj"] = "Koromira", ["kqk"] = "Kotafon Gbe", ["kql"] = "Kyenele", ["kqm"] = "Khisa", ["kqn"] = "Kaonde", ["kqo"] = "Eastern Krahn", ["kqp"] = "Kimré", ["kqq"] = "Krenak", ["kqr"] = "Kimaragang", ["kqs"] = "Northern Kissi", ["kqt"] = "Klias River Kadazan", ["kqu"] = "Seroa", ["kqv"] = "Okolod", ["kqw"] = "Kandas", ["kqx"] = "Mser", ["kqy"] = "Koorete", ["kqz"] = "Korana", ["kr"] = "Kanuri", ["kra"] = "Kumhali", ["krb"] = "Karkin", ["krc"] = "Karachay-Balkar", ["krd"] = "Kairui-Midiki", ["kre"] = "Panará", ["krf"] = "Koro (Vanuatu)", ["krh"] = "Kurama", ["kri"] = "Krio", ["krj"] = "Kinaray-a", ["krk"] = "Kerek", ["krl"] = "Karelian", ["krm"] = "Krim", ["krn"] = "Sapo", ["kro-pro"] = "Proto-Kru", ["krp"] = "Korop", ["krr"] = "Kru'ng", ["krs"] = "Kresh", ["kru"] = "Kurukh", ["krv"] = "Kavet", ["krw"] = "Western Krahn", ["krx"] = "Karon", ["kry"] = "Kryts", ["krz"] = "Sota Kanum", ["ks"] = "Kashmiri", ["ksa"] = "Shuwa-Zamani", ["ksb"] = "Shambala", ["ksc"] = "Southern Kalinga", ["ksd"] = "Tolai", ["kse"] = "Kuni", ["ksf"] = "Bafia", ["ksg"] = "Kusaghe", ["ksi"] = "Krisa", ["ksj"] = "Uare", ["ksk"] = "Kansa", ["ksl"] = "Kumalu", ["ksm"] = "Kumba", ["ksn"] = "Kasiguranin", ["kso"] = "Kofa", ["ksp"] = "Kaba", ["ksq"] = "Kwaami", ["ksr"] = "Borong", ["kss"] = "Southern Kissi", ["kst"] = "Winyé", ["ksu"] = "Khamyang", ["ksv"] = "Kusu", ["ksw"] = "S'gaw Karen", ["ksx"] = "Kedang", ["ksy"] = "Kharia Thar", ["ksz"] = "Kodaku", ["kta"] = "Katua", ["ktb"] = "Kambaata", ["ktc"] = "Kholok", ["ktd"] = "Kokata", ["ktf"] = "Kwami", ["ktg"] = "Kalkatungu", ["kth"] = "Karanga", ["kti"] = "North Muyu", ["ktj"] = "Plapo Krumen", ["ktk"] = "Kaniet", ["ktl"] = "Koroshi", ["ktm"] = "Kurti", ["ktn"] = "Karitiâna", ["kto"] = "Kuot", ["ktp"] = "Kaduo", ["ktq"] = "Katabaga", ["ktr"] = "Kota Marudu Tinagas", ["kts"] = "South Muyu", ["ktt"] = "Ketum", ["ktu"] = "Kituba", ["ktv"] = "Eastern Katu", ["ktw"] = "Kato", ["ktx"] = "Kaxararí", ["kty"] = "Kango", ["ktz"] = "Juǀ'hoan", ["ku-pro"] = "Proto-Kurdish", ["kub"] = "Kutep", ["kuc"] = "Kwinsu", ["kud"] = "Auhelawa", ["kue"] = "Kuman", ["kuf"] = "Western Katu", ["kug"] = "Kupa", ["kuh"] = "Kushi", ["kui"] = "Kuikúro", ["kuj"] = "Kuria", ["kuk"] = "Kepo'", ["kul"] = "Kulere", ["kum"] = "Kumyk", ["kun"] = "Kunama", ["kuo"] = "Kumukio", ["kup"] = "Kunimaipa", ["kuq"] = "Karipuna", ["kus"] = "Kusaal", ["kut"] = "Kutenai", ["kuu"] = "Upper Kuskokwim", ["kuv"] = "Kur", ["kuw"] = "Kpagua", ["kux"] = "Kukatja", ["kuy"] = "Kuuku-Ya'u", ["kuz"] = "Kunza", ["kva"] = "Bagvalal", ["kvb"] = "Kubu", ["kvc"] = "Kove", ["kvd"] = "Kui (Indonesia)", ["kve"] = "Kalabakan", ["kvf"] = "Kabalai", ["kvg"] = "Kuni-Boazi", ["kvh"] = "Komodo", ["kvi"] = "Kwang", ["kvj"] = "Psikye", ["kvk"] = "Korean Sign Language", ["kvl"] = "Brek Karen", ["kvm"] = "Kendem", ["kvn"] = "Border Kuna", ["kvo"] = "Dobel", ["kvp"] = "Kompane", ["kvq"] = "Geba Karen", ["kvr"] = "Kerinci", ["kvt"] = "Lahta Karen", ["kvu"] = "Yinbaw Karen", ["kvv"] = "Kola", ["kvw"] = "Wersing", ["kvx"] = "Parkari Koli", ["kvy"] = "Yintale Karen", ["kvz"] = "Tsakwambo", ["kw"] = "Cornish", ["kwa"] = "Dâw", ["kwb"] = "Baa", ["kwc"] = "Likwala", ["kwd"] = "Kwaio", ["kwe"] = "Kwerba", ["kwf"] = "Kwara'ae", ["kwg"] = "Sara Kaba Deme", ["kwh"] = "Kowiai", ["kwi"] = "Awa-Cuaiquer", ["kwj"] = "Kwanga", ["kwk"] = "Kwak'wala", ["kwl"] = "Kofyar", ["kwm"] = "Kwambi", ["kwn"] = "Kwangali", ["kwo"] = "Kwomtari", ["kwp"] = "Kodia", ["kwq"] = "Kwak", ["kwr"] = "Kwer", ["kws"] = "Kwese", ["kwt"] = "Kwesten", ["kwu"] = "Kwakum", ["kwv"] = "Sara Kaba Náà", ["kww"] = "Kwinti", ["kwx"] = "Khirwar", ["kwz"] = "Kwadi", ["kxa"] = "Kairiru", ["kxb"] = "Krobu", ["kxc"] = "Khonso", ["kxd"] = "Brunei Malay", ["kxe"] = "Kakihum", ["kxf"] = "Manumanaw Karen", ["kxh"] = "Karo", ["kxi"] = "Keningau Murut", ["kxj"] = "Kulfa", ["kxk"] = "Zayein Karen", ["kxl"] = "Nepali Kurux", ["kxm"] = "Northern Khmer", ["kxn"] = "Kanowit", ["kxo"] = "Kanoé", ["kxp"] = "Wadiyara Koli", ["kxq"] = "Smärky Kanum", ["kxr"] = "Koro (New Guinea)", ["kxs"] = "Kangjia", ["kxt"] = "Koiwat", ["kxu"] = "Kui (India)", ["kxv"] = "Kuvi", ["kxw"] = "Konai", ["kxx"] = "Likuba", ["kxy"] = "Kayong", ["kxz"] = "Kerewo", ["ky"] = "Kyrgyz", ["kya"] = "Kwaya", ["kyb"] = "Butbut Kalinga", ["kyc"] = "Kyaka", ["kyd"] = "Karey", ["kye"] = "Krache", ["kyf"] = "Kouya", ["kyg"] = "Keyagana", ["kyh"] = "Karok", ["kyi"] = "Kiput", ["kyj"] = "Karao", ["kyk"] = "Kamayo", ["kyl"] = "Kalapuya", ["kym"] = "Kpatili", ["kyn"] = "Karolanos", ["kyo"] = "Kelon", ["kyp"] = "Kang", ["kyq"] = "Kenga", ["kyr"] = "Kuruáya", ["kys"] = "Baram Kayan", ["kyt"] = "Kayagar", ["kyu"] = "Western Kayah", ["kyv"] = "Kayort", ["kyw"] = "Kudmali", ["kyx"] = "Rapoisi", ["kyy"] = "Kambaira", ["kyz"] = "Kayabí", ["kza"] = "Western Karaboro", ["kzb"] = "Kaibobo", ["kzc"] = "Bondoukou Kulango", ["kzd"] = "Kadai", ["kze"] = "Kosena", ["kzf"] = "Da'a Kaili", ["kzg"] = "Kikai", ["kzh"] = "Dongolawi", ["kzi"] = "Kelabit", ["kzj"] = "Coastal Kadazan", ["kzk"] = "Kazukuru", ["kzl"] = "Kayeli", ["kzm"] = "Kais", ["kzn"] = "Kokola", ["kzo"] = "Kaningi", ["kzp"] = "Kaidipang", ["kzq"] = "Kaike", ["kzr"] = "Karang", ["kzs"] = "Sugut Dusun", ["kzt"] = "Tambunan Dusun", ["kzu"] = "Kayupulau", ["kzv"] = "Komyandaret", ["kzw"] = "Kariri", ["kzx"] = "Kamarian", ["kzy"] = "Kango-Sua", ["kzz"] = "Kalabra", ["la"] = "Latin", ["laa"] = "Lapuyan Subanun", ["lab"] = "Linear A", ["lac"] = "Lacandon", ["lad"] = "Ladino", ["lae"] = "Pattani", ["laf"] = "Lafofa", ["lag"] = "Langi", ["lah"] = "Lahnda", ["lai"] = "Lambya", ["laj"] = "Lango (Uganda)", ["lak"] = "Laka", ["lam"] = "Lamba", ["lan"] = "Laru", ["lap"] = "Kabba-Laka", ["laq"] = "Qabiao", ["lar"] = "Larteh", ["las"] = "Gur Lama", ["lau"] = "Laba", ["law"] = "Lauje", ["lax"] = "Tiwa", ["lay"] = "Lama Bai", ["laz"] = "Aribwatsa", ["lb"] = "Luxembourgish", ["lbb"] = "Label", ["lbc"] = "Lakkia", ["lbe"] = "Lak", ["lbf"] = "Tinani", ["lbg"] = "Laopang", ["lbi"] = "La'bi", ["lbj"] = "Ladakhi", ["lbk"] = "Central Bontoc", ["lbl"] = "Libon Bikol", ["lbm"] = "Lodhi", ["lbn"] = "Lamet", ["lbo"] = "Laven", ["lbq"] = "Wampar", ["lbr"] = "Northern Lorung", ["lbs"] = "Libyan Sign Language", ["lbt"] = "Lachi", ["lbu"] = "Labu", ["lbv"] = "Lavatbura-Lamusong", ["lbw"] = "Tolaki", ["lbx"] = "Lawangan", ["lby"] = "Lamu-Lamu", ["lbz"] = "Lardil", ["lcc"] = "Legenyem", ["lcd"] = "Lola", ["lce"] = "Loncong", ["lcf"] = "Lubu", ["lch"] = "Luchazi", ["lcl"] = "Lisela", ["lcm"] = "Tungag", ["lcp"] = "Western Lawa", ["lcq"] = "Luhu", ["lcs"] = "Lisabata-Nuniali", ["lda"] = "Kla", ["ldb"] = "Idun", ["ldd"] = "Luri (Nigeria)", ["ldg"] = "Lenyima", ["ldh"] = "Lamja-Dengsa-Tola", ["ldj"] = "Lemoro", ["ldk"] = "Leelau", ["ldl"] = "Kaan", ["ldm"] = "Landoma", ["ldn"] = "Láadan", ["ldo"] = "Loo", ["ldp"] = "Tso", ["ldq"] = "Lufu", ["lea"] = "Lega-Shabunda", ["leb"] = "Lala-Bisa", ["lec"] = "Leco", ["led"] = "Lendu", ["lee"] = "Lyélé", ["lef"] = "Lelemi", ["leh"] = "Lenje", ["lei"] = "Lemio", ["lej"] = "Lengola", ["lek"] = "Leipon", ["lel"] = "Lele (Congo)", ["lem"] = "Nomaande", ["len"] = "Honduran Lenca", ["leo"] = "Leti (Cameroon)", ["lep"] = "Lepcha", ["leq"] = "Lembena", ["ler"] = "Lenkau", ["les"] = "Lese", ["let"] = "Lesing-Gelimi", ["leu"] = "Kara (New Guinea)", ["lev"] = "Lamma", ["lew"] = "Ledo Kaili", ["lex"] = "Luang", ["ley"] = "Lemolang", ["lez"] = "Lezgi", ["lfa"] = "Lefa", ["lfn"] = "Lingua Franca Nova", ["lg"] = "Luganda", ["lga"] = "Lungga", ["lgb"] = "Laghu", ["lgg"] = "Lugbara", ["lgh"] = "Laghuu", ["lgi"] = "Lengilu", ["lgk"] = "Neverver", ["lgl"] = "Wala", ["lgm"] = "Lega-Mwenga", ["lgn"] = "Opuuo", ["lgq"] = "Logba", ["lgr"] = "Lengo", ["lgs"] = "Guinea-Bissau Sign Language", ["lgt"] = "Pahi", ["lgu"] = "Longgu", ["lgz"] = "Ligenza", ["lha"] = "Laha (Vietnam)", ["lhh"] = "Laha (Indonesia)", ["lhi"] = "Lahu Shi", ["lhl"] = "Lahul Lohar", ["lhn"] = "Lahanan", ["lhp"] = "Lhokpu", ["lhs"] = "Mlahsö", ["lht"] = "Lo-Toga", ["lhu"] = "Lahu", ["li"] = "Limburgish", ["lia"] = "West-Central Limba", ["lib"] = "Likum", ["lic"] = "Hlai", ["lid"] = "Nyindrou", ["lie"] = "Likila", ["lif"] = "Limbu", ["lig"] = "Ligbi", ["lih"] = "Lihir", ["lii"] = "Lingkhim", ["lij"] = "Ligurian", ["lik"] = "Lika", ["lil"] = "Lillooet", ["lio"] = "Liki", ["lip"] = "Sekpele", ["liq"] = "Libido", ["lir"] = "Liberian English", ["lis"] = "Lisu", ["liu"] = "Logorik", ["liv"] = "Livonian", ["liw"] = "Col", ["lix"] = "Liabuku", ["liy"] = "Banda-Bambari", ["liz"] = "Libinza", ["lja"] = "Golpa", ["lje"] = "Rampi", ["lji"] = "Laiyolo", ["ljl"] = "Li'o", ["ljp"] = "Lampung Api", ["ljw"] = "Yirandali", ["ljx"] = "Yuru", ["lka"] = "Lakalei", ["lkb"] = "Kabras", ["lkc"] = "Kucong", ["lkd"] = "Lakondê", ["lke"] = "Kenyi", ["lkh"] = "Lakha", ["lki"] = "Laki", ["lkj"] = "Remun", ["lkl"] = "Laeko-Libuat", ["lkm"] = "Kalaamaya", ["lkn"] = "Lakon", ["lko"] = "Khayo", ["lkr"] = "Päri", ["lks"] = "Kisa", ["lkt"] = "Lakota", ["lku"] = "Kungkari", ["lky"] = "Lokoya", ["lla"] = "Lala-Roba", ["llb"] = "Lolo", ["llc"] = "Lele (Guinea)", ["lld"] = "Ladin", ["lle"] = "Lele (New Guinea)", ["llf"] = "Hermit", ["llg"] = "Lole", ["llh"] = "Lamu", ["lli"] = "Teke-Laali", ["llj"] = "Ladji-Ladji", ["llk"] = "Lelak", ["lll"] = "Lilau", ["llm"] = "Lasalimu", ["lln"] = "Lele (Chad)", ["llo"] = "Khlor", ["llp"] = "North Efate", ["llq"] = "Lolak", ["lls"] = "Lithuanian Sign Language", ["llu"] = "Lau", ["llx"] = "Lauan", ["lma"] = "East Limba", ["lmb"] = "Merei", ["lmc"] = "Limilngan", ["lmd"] = "Lumun", ["lme"] = "Pévé", ["lmf"] = "South Lembata", ["lmg"] = "Lamogai", ["lmh"] = "Lambichhong", ["lmi"] = "Lombi", ["lmj"] = "West Lembata", ["lmk"] = "Lamkang", ["lml"] = "Raga", ["lmn"] = "Lambadi", ["lmo"] = "Lombard", ["lmp"] = "Limbum", ["lmq"] = "Lamatuka", ["lmr"] = "Lamalera", ["lmu"] = "Lamenu", ["lmv"] = "Lomaiviti", ["lmw"] = "Lake Miwok", ["lmx"] = "Laimbue", ["lmy"] = "Laboya", ["lmz"] = "Lumbee", ["ln"] = "Lingala", ["lna"] = "Langbashe", ["lnb"] = "Mbalanhu", ["lnd"] = "Lun Bawang", ["lnh"] = "Lanoh", ["lni"] = "Daantanai'", ["lnj"] = "Linngithigh", ["lnl"] = "South Central Banda", ["lnm"] = "Langam", ["lnn"] = "Lorediakarkar", ["lno"] = "Lango (Sudan)", ["lns"] = "Lamnso'", ["lnu"] = "Longuda", ["lnw"] = "Lanima", ["lo"] = "Lao", ["loa"] = "Loloda", ["lob"] = "Lobi", ["loc"] = "Inonhan", ["lod"] = "Berawan", ["loe"] = "Saluan", ["lof"] = "Logol", ["log"] = "Logo", ["loh"] = "Narim", ["loi"] = "Lomakka", ["loj"] = "Lou", ["lok"] = "Loko", ["lol"] = "Mongo", ["lom"] = "Looma", ["lon"] = "Malawi Lomwe", ["loo"] = "Lombo", ["lop"] = "Lopa", ["loq"] = "Lobala", ["lor"] = "Téén", ["los"] = "Loniu", ["lot"] = "Lotuko", ["lou"] = "Louisiana Creole", ["lov"] = "Lopi", ["low"] = "Tampias Lobu", ["lox"] = "Loun", ["loz"] = "Lozi", ["lpa"] = "Lelepa", ["lpe"] = "Lepki", ["lpn"] = "Long Phuri Naga", ["lpo"] = "Lipo", ["lpx"] = "Lopit", ["lra"] = "Rara Bakati'", ["lrc"] = "Northern Luri", ["lre"] = "Laurentian", ["lrg"] = "Laragia", ["lri"] = "Marachi", ["lrk"] = "Loarki", ["lrl"] = "Larestani", ["lrm"] = "Marama", ["lrn"] = "Lorang", ["lro"] = "Laro", ["lrr"] = "Southern Lorung", ["lrt"] = "Larantuka Malay", ["lrv"] = "Larevat", ["lrz"] = "Lemerig", ["lsa"] = "Lasgerdi", ["lsd"] = "Lishana Deni", ["lse"] = "Lusengo", ["lsh"] = "Lish", ["lsi"] = "Lashi", ["lsl"] = "Latvian Sign Language", ["lsm"] = "Saamia", ["lso"] = "Laos Sign Language", ["lsp"] = "Panamanian Sign Language", ["lsr"] = "Aruop", ["lss"] = "Lasi", ["lst"] = "Trinidad and Tobago Sign Language", ["lsy"] = "Mauritian Sign Language", ["lt"] = "Lithuanian", ["ltc"] = "Middle Chinese", ["ltg"] = "Latgalian", ["lti"] = "Leti (Indonesia)", ["ltn"] = "Latundê", ["lto"] = "Olutsotso", ["lts"] = "Lutachoni", ["ltu"] = "Latu", ["lu"] = "Luba-Katanga", ["lua"] = "Luba-Kasai", ["luc"] = "Aringa", ["lud"] = "Ludian", ["lue"] = "Luvale", ["luf"] = "Laua", ["lui"] = "Luiseño", ["luj"] = "Luna", ["luk"] = "Lunanakha", ["lul"] = "Olu'bo", ["lum"] = "Luimbi", ["lun"] = "Lunda", ["luo"] = "Luo", ["lup"] = "Lumbu", ["luq"] = "Lucumí", ["lur"] = "Laura", ["lus"] = "Mizo", ["lut"] = "Lushootseed", ["luu"] = "Lumba-Yakkha", ["luv"] = "Luwati", ["luy"] = "Luhya", ["luz"] = "Southern Luri", ["lv"] = "Latvian", ["lva"] = "Maku'a", ["lvi"] = "Lawi", ["lvk"] = "Lavukaleve", ["lvu"] = "Levuka", ["lwa"] = "Lwalu", ["lwe"] = "Lewo Eleng", ["lwg"] = "Wanga", ["lwh"] = "White Lachi", ["lwl"] = "Eastern Lawa", ["lwm"] = "Laomian", ["lwo"] = "Luwo", ["lws"] = "Malawian Sign Language", ["lwt"] = "Lewotobi", ["lwu"] = "Lawu", ["lww"] = "Lewo", ["lya"] = "Layakha", ["lyg"] = "Lyngngam", ["lyn"] = "Luyana", ["lzh"] = "Literary Chinese", ["lzl"] = "Litzlitz", ["lzn"] = "Leinong Naga", ["lzz"] = "Laz", ["maa"] = "San Jerónimo Tecóatl Mazatec", ["mab"] = "Yutanduchi Mixtec", ["mad"] = "Madurese", ["mae"] = "Bo-Rukul", ["maf"] = "Mafa", ["mag"] = "Magahi", ["mai"] = "Maithili", ["maj"] = "Jalapa de Díaz Mazatec", ["mak"] = "Makasar", ["mam"] = "Mam", ["man"] = "Mandingo", ["map-ata-pro"] = "Proto-Atayalic", ["map-bms"] = "Banyumasan", ["map-pro"] = "Proto-Austronesian", ["maq"] = "Chiquihuitlán Mazatec", ["mas"] = "Maasai", ["mat"] = "Matlatzinca", ["mau"] = "Huautla Mazatec", ["mav"] = "Sateré-Mawé", ["maw"] = "Mampruli", ["max"] = "North Moluccan Malay", ["maz"] = "Central Mazahua", ["mba"] = "Higaonon", ["mbb"] = "Western Bukidnon Manobo", ["mbc"] = "Macushi", ["mbd"] = "Dibabawon Manobo", ["mbe"] = "Molale", ["mbf"] = "Baba Malay", ["mbh"] = "Mangseng", ["mbi"] = "Ilianen Manobo", ["mbj"] = "Nadëb", ["mbk"] = "Malol", ["mbl"] = "Maxakalí", ["mbm"] = "Ombamba", ["mbn"] = "Macaguán", ["mbo"] = "Mbo (Cameroon)", ["mbp"] = "Wiwa", ["mbq"] = "Maisin", ["mbr"] = "Nukak Makú", ["mbs"] = "Sarangani Manobo", ["mbt"] = "Matigsalug Manobo", ["mbu"] = "Mbula-Bwazza", ["mbv"] = "Mbulungish", ["mbw"] = "Maring", ["mbx"] = "Sepik Mari", ["mby"] = "Memoni", ["mbz"] = "Amoltepec Mixtec", ["mca"] = "Maca", ["mcb"] = "Machiguenga", ["mcc"] = "Bitur", ["mcd"] = "Sharanahua", ["mce"] = "Itundujia Mixtec", ["mcf"] = "Matsés", ["mcg"] = "Mapoyo", ["mch"] = "Maquiritari", ["mci"] = "Mese", ["mcj"] = "Mvanip", ["mck"] = "Mbunda", ["mcl"] = "Macaguaje", ["mcm"] = "Kristang", ["mcn"] = "Masana", ["mco"] = "Coatlán Mixe", ["mcp"] = "Makaa", ["mcq"] = "Ese", ["mcr"] = "Menya", ["mcs"] = "Mambai", ["mcu"] = "Cameroon Mambila", ["mcv"] = "Minanibai", ["mcw"] = "Mawa", ["mcx"] = "Mpiemo", ["mcy"] = "South Watut", ["mcz"] = "Mawan", ["mda"] = "Mada (Nigeria)", ["mdb"] = "Morigi", ["mdc"] = "Male", ["mdd"] = "Mbum", ["mde"] = "Bura Mabang", ["mdf"] = "Moksha", ["mdg"] = "Massalat", ["mdh"] = "Maguindanao", ["mdi"] = "Mamvu", ["mdj"] = "Mangbetu", ["mdk"] = "Mangbutu", ["mdl"] = "Maltese Sign Language", ["mdm"] = "Mayogo", ["mdn"] = "Mbati", ["mdp"] = "Mbala", ["mdq"] = "Mbole", ["mdr"] = "Mandar", ["mds"] = "Maria", ["mdt"] = "Mbere", ["mdu"] = "Mboko", ["mdv"] = "Santa Lucía Monteverde Mixtec", ["mdw"] = "Mbosi", ["mdx"] = "Dizin", ["mdy"] = "Maale", ["mdz"] = "Suruí Do Pará", ["mea"] = "Menka", ["meb"] = "Ikobi-Mena", ["mec"] = "Mara", ["med"] = "Melpa", ["mee"] = "Mengen", ["mef"] = "Megam", ["meg"] = "Mea", ["meh"] = "Southwestern Tlaxiaco Mixtec", ["mei"] = "Midob", ["mej"] = "Meyah", ["mek"] = "Mekeo", ["mel"] = "Central Melanau", ["mem"] = "Mangala", ["men"] = "Mende", ["meo"] = "Kedah Malay", ["mep"] = "Miriwung", ["meq"] = "Merey", ["mer"] = "Meru", ["mes"] = "Masmaje", ["met"] = "Mato", ["meu"] = "Motu", ["mev"] = "Mano", ["mew"] = "Maaka", ["mey"] = "Hassaniya", ["mez"] = "Menominee", ["mfa"] = "Pattani Malay", ["mfb"] = "Bangka", ["mfc"] = "Mba", ["mfd"] = "Mendankwe-Nkwen", ["mfe"] = "Mauritian Creole", ["mff"] = "Naki", ["mfg"] = "Mixifore", ["mfh"] = "Matal", ["mfi"] = "Wandala", ["mfj"] = "Mefele", ["mfk"] = "North Mofu", ["mfl"] = "Putai", ["mfm"] = "Marghi South", ["mfn"] = "Cross River Mbembe", ["mfo"] = "Mbe", ["mfp"] = "Makassar Malay", ["mfq"] = "Moba", ["mfr"] = "Marrithiyel", ["mfs"] = "Mexican Sign Language", ["mft"] = "Mokerang", ["mfu"] = "Mbwela", ["mfv"] = "Mandjak", ["mfw"] = "Mulaha", ["mfx"] = "Melo", ["mfy"] = "Mayo", ["mfz"] = "Mabaan", ["mg"] = "Malagasy", ["mga"] = "Middle Irish", ["mgb"] = "Mararit", ["mgc"] = "Morokodo", ["mgd"] = "Moru", ["mge"] = "Mango", ["mgf"] = "Maklew", ["mgg"] = "Mpongmpong", ["mgh"] = "Makhuwa-Meetto", ["mgi"] = "Jili", ["mgj"] = "Abureni", ["mgk"] = "Mawes", ["mgl"] = "Maleu-Kilenge", ["mgm"] = "Mambae", ["mgn"] = "Mbangi", ["mgo"] = "Meta'", ["mgp"] = "Eastern Magar", ["mgq"] = "Malila", ["mgr"] = "Mambwe-Lungu", ["mgs"] = "Manda (Tanzania)", ["mgt"] = "Mongol", ["mgu"] = "Mailu", ["mgv"] = "Matengo", ["mgw"] = "Matumbi", ["mgy"] = "Mbunga", ["mgz"] = "Mbugwe", ["mh"] = "Marshallese", ["mha"] = "Manda (India)", ["mhb"] = "Mahongwe", ["mhc"] = "Mocho", ["mhd"] = "Mbugu", ["mhe"] = "Besisi", ["mhf"] = "Mamaa", ["mhg"] = "Margu", ["mhi"] = "Ma'di", ["mhj"] = "Mogholi", ["mhk"] = "Mungaka", ["mhl"] = "Mauwake", ["mhm"] = "Makhuwa-Moniga", ["mhn"] = "Mòcheno", ["mho"] = "Mashi", ["mhp"] = "Balinese Malay", ["mhq"] = "Mandan", ["mhr"] = "Eastern Mari", ["mhs"] = "Buru (Indonesia)", ["mht"] = "Mandahuaca", ["mhu"] = "Taraon", ["mhw"] = "Mbukushu", ["mhx"] = "Lhao Vo", ["mhy"] = "Ma'anyan", ["mhz"] = "Mor (Austronesian)", ["mi"] = "Maori", ["mia"] = "Miami", ["mib"] = "Atatláhuca Mixtec", ["mic"] = "Mi'kmaq", ["mid"] = "Mandaic", ["mie"] = "Ocotepec Mixtec", ["mif"] = "Mofu-Gudur", ["mig"] = "San Miguel el Grande Mixtec", ["mih"] = "Chayuco Mixtec", ["mii"] = "Chigmecatitlán Mixtec", ["mij"] = "Mungbam", ["mik"] = "Mikasuki", ["mil"] = "Peñoles Mixtec", ["mim"] = "Alacatlatzala Mixtec", ["min"] = "Minangkabau", ["mio"] = "Pinotepa Nacional Mixtec", ["mip"] = "Apasco-Apoala Mixtec", ["miq"] = "Miskito", ["mir"] = "Isthmus Mixe", ["mit"] = "Southern Puebla Mixtec", ["miu"] = "Cacaloxtepec Mixtec", ["miw"] = "Akoye", ["mix"] = "Mixtepec Mixtec", ["miy"] = "Ayutla Mixtec", ["miz"] = "Coatzospan Mixtec", ["mjb"] = "Makalero", ["mjc"] = "San Juan Colorado Mixtec", ["mjd"] = "Northwest Maidu", ["mje"] = "Muskum", ["mji"] = "Kim Mun", ["mjj"] = "Mawak", ["mjk"] = "Matukar", ["mjl"] = "Mandeali", ["mjm"] = "Medebur", ["mjn"] = "Mebu", ["mjo"] = "Malankuravan", ["mjp"] = "Malapandaram", ["mjq"] = "Malaryan", ["mjr"] = "Malavedan", ["mjs"] = "Miship", ["mjt"] = "Sawriya Paharia", ["mju"] = "Manna-Dora", ["mjv"] = "Mannan", ["mjw"] = "Karbi", ["mjx"] = "Mahali", ["mjy"] = "Mahican", ["mjz"] = "Majhi", ["mk"] = "Macedonian", ["mka"] = "Mbre", ["mkb"] = "Mal Paharia", ["mkc"] = "Siliput", ["mke"] = "Mawchi", ["mkf"] = "Miya", ["mkg"] = "Mak (China)", ["mkh-asl-pro"] = "Proto-Aslian", ["mkh-ban-pro"] = "Proto-Bahnaric", ["mkh-kat-pro"] = "Proto-Katuic", ["mkh-khm-pro"] = "Proto-Khmuic", ["mkh-kmr-pro"] = "Proto-Khmeric", ["mkh-mmn"] = "Middle Mon", ["mkh-mnc-pro"] = "Proto-Monic", ["mkh-mvi"] = "Middle Vietnamese", ["mkh-pal-pro"] = "Proto-Palaungic", ["mkh-pea-pro"] = "Proto-Pearic", ["mkh-pkn-pro"] = "Proto-Pakanic", ["mkh-pro"] = "Proto-Mon-Khmer", ["mkh-vie-pro"] = "Proto-Vietic", ["mki"] = "Dhatki", ["mkj"] = "Mokilese", ["mkk"] = "Byep", ["mkl"] = "Mokole", ["mkm"] = "Moklen", ["mkn"] = "Kupang Malay", ["mko"] = "Mingang Doso", ["mkp"] = "Moikodi", ["mkq"] = "Bay Miwok", ["mkr"] = "Malas", ["mks"] = "Silacayoapan Mixtec", ["mkt"] = "Vamale", ["mku"] = "Konyanka Maninka", ["mkv"] = "Mafea", ["mkx"] = "Cinamiguin Manobo", ["mky"] = "East Makian", ["mkz"] = "Makasae", ["ml"] = "Malayalam", ["mla"] = "Tamambo", ["mlb"] = "Mbule", ["mlc"] = "Caolan", ["mle"] = "Manambu", ["mlf"] = "Mal", ["mlh"] = "Mape", ["mli"] = "Malimpung", ["mlj"] = "Miltu", ["mlk"] = "Ilwana", ["mll"] = "Malua Bay", ["mlm"] = "Mulam", ["mln"] = "Malango", ["mlo"] = "Mlomp", ["mlp"] = "Bargam", ["mlq"] = "Western Maninkakan", ["mlr"] = "Vame", ["mls"] = "Masalit", ["mlu"] = "To'abaita", ["mlv"] = "Mwotlap", ["mlw"] = "Moloko", ["mlx"] = "Malfaxal", ["mlz"] = "Malaynon", ["mma"] = "Mama", ["mmb"] = "Momina", ["mmc"] = "Michoacán Mazahua", ["mmd"] = "Maonan", ["mme"] = "Mae", ["mmf"] = "Mundat", ["mmg"] = "North Ambrym", ["mmh"] = "Mehináku", ["mmi"] = "Musar", ["mmj"] = "Majhwar", ["mmk"] = "Mukha-Dora", ["mml"] = "Man Met", ["mmm"] = "Maii", ["mmn"] = "Mamanwa", ["mmo"] = "Mangga Buang", ["mmp"] = "Musan", ["mmq"] = "Aisi", ["mmr"] = "Western Xiangxi Miao", ["mmt"] = "Malalamai", ["mmu"] = "Mmaala", ["mmv"] = "Miriti", ["mmw"] = "Emae", ["mmx"] = "Madak", ["mmy"] = "Migaama", ["mmz"] = "Mabaale", ["mn"] = "Mongolian", ["mna"] = "Mbula", ["mnb"] = "Muna", ["mnc"] = "Manchu", ["mnd"] = "Mondé", ["mne"] = "Naba", ["mnf"] = "Mundani", ["mng"] = "Eastern Mnong", ["mnh"] = "Mono (Congo)", ["mni"] = "Manipuri", ["mnj"] = "Munji", ["mnk"] = "Mandinka", ["mnl"] = "Tiale", ["mnm"] = "Mapena", ["mnn"] = "Southern Mnong", ["mnp"] = "Min Bei", ["mnq"] = "Minriq", ["mnr"] = "Mono (California)", ["mns"] = "Mansi", ["mnt"] = "Maykulan", ["mnu"] = "Mer", ["mnv"] = "Rennellese", ["mnw"] = "Mon", ["mnw-tha"] = "Thai Mon", ["mnx"] = "Manikion", ["mny"] = "Manyawa", ["mnz"] = "Moni", ["moa"] = "Mwan", ["moc"] = "Mocoví", ["mod"] = "Mobilian", ["moe"] = "Montagnais", ["mog"] = "Mongondow", ["moh"] = "Mohawk", ["moi"] = "Mboi", ["moj"] = "Monzombo", ["mok"] = "Morori", ["mom"] = "Monimbo", ["moo"] = "Monom", ["mop"] = "Mopan Maya", ["moq"] = "Mor (Papuan)", ["mor"] = "Moro", ["mos"] = "Moore", ["mot"] = "Barí", ["mou"] = "Mogum", ["mov"] = "Mojave", ["mow"] = "Moi (Congo)", ["mox"] = "Molima", ["moy"] = "Shekkacho", ["moz"] = "Mukulu", ["mpa"] = "Mpoto", ["mpb"] = "Mullukmulluk", ["mpc"] = "Mangarayi", ["mpd"] = "Machinere", ["mpe"] = "Majang", ["mpg"] = "Marba", ["mph"] = "Maung", ["mpi"] = "Mpade", ["mpj"] = "Martu Wangka", ["mpk"] = "Mbara (Chad)", ["mpl"] = "Middle Watut", ["mpm"] = "Yosondúa Mixtec", ["mpn"] = "Mindiri", ["mpo"] = "Miu", ["mpp"] = "Migabac", ["mpq"] = "Matís", ["mpr"] = "Vangunu", ["mps"] = "Dadibi", ["mpt"] = "Mian", ["mpu"] = "Makuráp", ["mpv"] = "Mungkip", ["mpw"] = "Mapidian", ["mpx"] = "Misima-Paneati", ["mpy"] = "Mapia", ["mpz"] = "Mpi", ["mqa"] = "Maba", ["mqb"] = "Mbuko", ["mqc"] = "Mangole", ["mqe"] = "Matepi", ["mqf"] = "Momuna", ["mqg"] = "Kota Bangun Kutai Malay", ["mqh"] = "Tlazoyaltepec Mixtec", ["mqi"] = "Mariri", ["mqj"] = "Mamasa", ["mqk"] = "Rajah Kabunsuwan Manobo", ["mql"] = "Mbelime", ["mqm"] = "South Marquesan", ["mqn"] = "Moronene", ["mqo"] = "Modole", ["mqp"] = "Manipa", ["mqq"] = "Minokok", ["mqr"] = "Mander", ["mqs"] = "West Makian", ["mqt"] = "Mok", ["mqu"] = "Mandari", ["mqv"] = "Mosimo", ["mqw"] = "Murupi", ["mqx"] = "Mamuju", ["mqy"] = "Manggarai", ["mqz"] = "Malasanga", ["mr"] = "Marathi", ["mra"] = "Mlabri", ["mrb"] = "Marino", ["mrc"] = "Maricopa", ["mrd"] = "Western Magar", ["mre"] = "Martha's Vineyard Sign Language", ["mrf"] = "Elseng", ["mrg"] = "Mising", ["mrh"] = "Mara Chin", ["mrj"] = "Western Mari", ["mrk"] = "Hmwaveke", ["mrl"] = "Mortlockese", ["mrm"] = "Merlav", ["mrn"] = "Cheke Holo", ["mro"] = "Mru", ["mrp"] = "Morouas", ["mrq"] = "North Marquesan", ["mrr"] = "Hill Maria", ["mrs"] = "Maragus", ["mrt"] = "Margi", ["mru"] = "Mono (Cameroon)", ["mrv"] = "Mangarevan", ["mrw"] = "Maranao", ["mrx"] = "Dineor", ["mry"] = "Karaga Mandaya", ["mrz"] = "Marind", ["ms"] = "Malay", ["msb"] = "Masbatenyo", ["msc"] = "Sankaran Maninka", ["msd"] = "Yucatec Maya Sign Language", ["mse"] = "Musey", ["msf"] = "Mekwei", ["msg"] = "Moraid", ["msi"] = "Sabah Malay", ["msj"] = "Ma", ["msk"] = "Mansaka", ["msl"] = "Molof", ["msm"] = "Agusan Manobo", ["msn"] = "Vurës", ["mso"] = "Mombum", ["msp"] = "Maritsauá", ["msq"] = "Caac", ["msr"] = "Mongolian Sign Language", ["mss"] = "West Masela", ["msu"] = "Musom", ["msv"] = "Maslam", ["msw"] = "Mansoanka", ["msx"] = "Moresada", ["msy"] = "Aruamu", ["msz"] = "Momare", ["mt"] = "Maltese", ["mta"] = "Cotabato Manobo", ["mtb"] = "Anyin Morofo", ["mtc"] = "Munit", ["mtd"] = "Mualang", ["mte"] = "Alu", ["mtf"] = "Murik (New Guinea)", ["mtg"] = "Una", ["mth"] = "Munggui", ["mti"] = "Maiwa (New Guinea)", ["mtj"] = "Moskona", ["mtk"] = "Mbe'", ["mtl"] = "Montol", ["mtm"] = "Mator", ["mtn"] = "Matagalpa", ["mto"] = "Totontepec Mixe", ["mtp"] = "Wichí Lhamtés Nocten", ["mtq"] = "Muong", ["mtr"] = "Mewari", ["mts"] = "Yora", ["mtt"] = "Mota", ["mtu"] = "Tututepec Mixtec", ["mtv"] = "Asaro'o", ["mtw"] = "Magahat", ["mtx"] = "Tidaá Mixtec", ["mty"] = "Nabi", ["mua"] = "Mundang", ["mub"] = "Mubi", ["muc"] = "Mbu'", ["mud"] = "Mednyj Aleut", ["mue"] = "Media Lengua", ["mug"] = "Musgu", ["muh"] = "Mündü", ["mui"] = "Musi", ["muj"] = "Mabire", ["mul"] = "Translingual", ["mum"] = "Maiwala", ["mun-pro"] = "Proto-Munda", ["muo"] = "Nyong", ["mup"] = "Malvi", ["muq"] = "Eastern Xiangxi Miao", ["mur"] = "Murle", ["mus"] = "Creek", ["mut"] = "Western Muria", ["muu"] = "Yaaku", ["muv"] = "Muthuvan", ["mux"] = "Bo-Ung", ["muy"] = "Muyang", ["muz"] = "Mursi", ["mva"] = "Manam", ["mvb"] = "Mattole", ["mvd"] = "Mamboru", ["mvg"] = "Yucuañe Mixtec", ["mvh"] = "Mire", ["mvi"] = "Miyako", ["mvk"] = "Mekmek", ["mvl"] = "Mbara (Australia)", ["mvm"] = "Muya", ["mvn"] = "Minaveha", ["mvo"] = "Marovo", ["mvp"] = "Duri", ["mvq"] = "Moere", ["mvr"] = "Marau", ["mvs"] = "Massep", ["mvt"] = "Mpotovoro", ["mvu"] = "Marfa", ["mvv"] = "Tagal Murut", ["mvw"] = "Machinga", ["mvx"] = "Meoswar", ["mvy"] = "Indus Kohistani", ["mvz"] = "Mesqan", ["mwa"] = "Mwatebu", ["mwb"] = "Juwal", ["mwc"] = "Are", ["mwe"] = "Mwera", ["mwf"] = "Murrinh-Patha", ["mwg"] = "Aiklep", ["mwh"] = "Mouk-Aria", ["mwi"] = "Labo", ["mwk"] = "Kita Maninkakan", ["mwl"] = "Mirandese", ["mwm"] = "Sar", ["mwn"] = "Nyamwanga", ["mwo"] = "Central Maewo", ["mwp"] = "Kala Lagaw Ya", ["mwq"] = "Mün Chin", ["mwr"] = "Marwari", ["mws"] = "Mwimbi-Muthambi", ["mwt"] = "Moken", ["mwu"] = "Mittu", ["mwv"] = "Mentawai", ["mww"] = "White Hmong", ["mwz"] = "Moingi", ["mxa"] = "Northwest Oaxaca Mixtec", ["mxb"] = "Tezoatlán Mixtec", ["mxd"] = "Modang", ["mxe"] = "Mele-Fila", ["mxf"] = "Malgbe", ["mxg"] = "Mbangala", ["mxh"] = "Mvuba", ["mxi"] = "Mozarabic", ["mxj"] = "Miju", ["mxk"] = "Monumbo", ["mxl"] = "Maxi Gbe", ["mxm"] = "Meramera", ["mxn"] = "Moi (Indonesia)", ["mxo"] = "Mbowe", ["mxp"] = "Tlahuitoltepec Mixe", ["mxq"] = "Juquila Mixe", ["mxr"] = "Murik (Malaysia)", ["mxs"] = "Huitepec Mixtec", ["mxt"] = "Jamiltepec Mixtec", ["mxu"] = "Mada (Cameroon)", ["mxv"] = "Metlatónoc Mixtec", ["mxw"] = "Namo", ["mxx"] = "Mahou", ["mxy"] = "Southeastern Nochixtlán Mixtec", ["mxz"] = "Central Masela", ["my"] = "Burmese", ["myb"] = "Mbay", ["myc"] = "Mayeka", ["mye"] = "Myene", ["myf"] = "Bambassi", ["myg"] = "Manta", ["myh"] = "Makah", ["myj"] = "Mangayat", ["myk"] = "Mamara Senoufo", ["myl"] = "Moma", ["mym"] = "Me'en", ["myn-chl"] = "Ch'olti'", ["myn-pro"] = "Proto-Mayan", ["myo"] = "Anfillo", ["myp"] = "Pirahã", ["myr"] = "Muniche", ["mys"] = "Mesmes", ["myu"] = "Mundurukú", ["myv"] = "Erzya", ["myw"] = "Muyuw", ["myx"] = "Masaba", ["myy"] = "Macuna", ["myz"] = "Classical Mandaic", ["mza"] = "Santa María Zacatepec Mixtec", ["mzb"] = "Northern Saharan Berber", ["mzc"] = "Madagascar Sign Language", ["mzd"] = "Malimba", ["mze"] = "Morawa", ["mzg"] = "Monastic Sign Language", ["mzh"] = "Wichí Lhamtés Güisnay", ["mzi"] = "Ixcatlán Mazatec", ["mzj"] = "Manya", ["mzk"] = "Nigeria Mambila", ["mzl"] = "Mazatlán Mixe", ["mzm"] = "Mumuye", ["mzn"] = "Mazanderani", ["mzo"] = "Matipuhy", ["mzp"] = "Movima", ["mzq"] = "Mori Atas", ["mzr"] = "Marúbo", ["mzs"] = "Macanese", ["mzt"] = "Mintil", ["mzu"] = "Inapang", ["mzv"] = "Manza", ["mzw"] = "Deg", ["mzx"] = "Mawayana", ["mzy"] = "Mozambican Sign Language", ["mzz"] = "Maiadomu", ["na"] = "Nauruan", ["naa"] = "Namla", ["nab"] = "Nambikwara", ["nac"] = "Narak", ["nae"] = "Naka'ela", ["naf"] = "Nabak", ["nag"] = "Naga Pidgin", ["nah"] = "Nahuatl", ["nai-ala"] = "Alazapa", ["nai-bay"] = "Bayogoula", ["nai-bvy"] = "Buena Vista Yokuts", ["nai-cal"] = "Calusa", ["nai-chi"] = "Chiquimulilla", ["nai-chu-pro"] = "Proto-Chumash", ["nai-cig"] = "Ciguayo", ["nai-ckn-pro"] = "Proto-Chinookan", ["nai-dly"] = "Delta Yokuts", ["nai-gsy"] = "Gashowu", ["nai-guz"] = "Guazacapán", ["nai-hit"] = "Hitchiti", ["nai-ipa"] = "Ipai", ["nai-jtp"] = "Jutiapa", ["nai-jum"] = "Jumaytepeque", ["nai-kat"] = "Kathlamet", ["nai-klp-pro"] = "Proto-Kalapuyan", ["nai-knm"] = "Konomihu", ["nai-kry"] = "Kings River Yokuts", ["nai-kum"] = "Kumeyaay", ["nai-mac"] = "Macoris", ["nai-mdu-pro"] = "Proto-Maidun", ["nai-miz-pro"] = "Proto-Mixe-Zoque", ["nai-mus-pro"] = "Proto-Muskogean", ["nai-nao"] = "Naolan", ["nai-nrs"] = "New River Shasta", ["nai-nvy"] = "Northern Valley Yokuts", ["nai-okw"] = "Okwanuchu", ["nai-per"] = "Pericú", ["nai-pic"] = "Picuris", ["nai-plp-pro"] = "Proto-Plateau Penutian", ["nai-ply"] = "Palewyami", ["nai-pom-pro"] = "Proto-Pomo", ["nai-qng"] = "Quinigua", ["nai-sca-pro"] = "Proto-Siouan-Catawban", ["nai-sin"] = "Sinacantán", ["nai-sln"] = "Salvadoran Lenca", ["nai-spt"] = "Sahaptin", ["nai-svy"] = "Southern Valley Yokuts", ["nai-tap"] = "Tapachultec", ["nai-taw"] = "Tawasa", ["nai-teq"] = "Tequistlatec", ["nai-tip"] = "Tipai", ["nai-tky"] = "Tule-Kaweah Yokuts", ["nai-tot-pro"] = "Proto-Totozoquean", ["nai-tsi-pro"] = "Proto-Tsimshianic", ["nai-utn-pro"] = "Proto-Utian", ["nai-wai"] = "Waikuri", ["nai-yup"] = "Yupiltepeque", ["naj"] = "Nalu", ["nak"] = "Nakanai", ["nal"] = "Nalik", ["nam"] = "Ngan'gityemerri", ["nan"] = "Min Nan", ["nao"] = "Naaba", ["nap"] = "Neapolitan", ["naq"] = "Khoekhoe", ["nar"] = "Iguta", ["nas"] = "Nasioi", ["nat"] = "Hungworo", ["naw"] = "Nawuri", ["nax"] = "Nakwi", ["nay"] = "Ngarrindjeri", ["naz"] = "Coatepec Nahuatl", ["nb"] = "Norwegian Bokmål", ["nba"] = "Nyemba", ["nbb"] = "Ndoe", ["nbc"] = "Chang", ["nbd"] = "Ngbinda", ["nbe"] = "Konyak Naga", ["nbg"] = "Nagarchal", ["nbh"] = "Ngamo", ["nbi"] = "Mao Naga", ["nbj"] = "Ngarinman", ["nbk"] = "Nake", ["nbm"] = "Ngbaka Ma'bo", ["nbn"] = "Kuri", ["nbo"] = "Nkukoli", ["nbp"] = "Nnam", ["nbq"] = "Nggem", ["nbr"] = "Numana", ["nbs"] = "Namibian Sign Language", ["nbt"] = "Na", ["nbu"] = "Rongmei Naga", ["nbv"] = "Ngamambo", ["nbw"] = "Southern Ngbandi", ["nby"] = "Ningera", ["nca"] = "Iyo", ["ncb"] = "Central Nicobarese", ["ncc"] = "Ponam", ["ncd"] = "Nachering", ["nce"] = "Yale", ["ncf"] = "Notsi", ["ncg"] = "Nisga'a", ["nch"] = "Central Huasteca Nahuatl", ["nci"] = "Classical Nahuatl", ["ncj"] = "Northern Puebla Nahuatl", ["nck"] = "Nakara", ["ncl"] = "Michoacán Nahuatl", ["ncm"] = "Nambo", ["ncn"] = "Nauna", ["nco"] = "Sibe", ["ncr"] = "Ncane", ["ncs"] = "Nicaraguan Sign Language", ["nct"] = "Chothe Naga", ["ncu"] = "Chumburung", ["ncx"] = "Central Puebla Nahuatl", ["ncz"] = "Natchez", ["nd"] = "Northern Ndebele", ["nda"] = "Ndasa", ["ndb"] = "Kenswei Nsei", ["ndc"] = "Ndau", ["ndd"] = "Nde-Nsele-Nta", ["ndf"] = "Nadruvian", ["ndg"] = "Ndengereko", ["ndh"] = "Ndali", ["ndi"] = "Chamba Leko", ["ndj"] = "Ndamba", ["ndk"] = "Ndaka", ["ndl"] = "Ndolo", ["ndm"] = "Ndam", ["ndn"] = "Ngundi", ["ndp"] = "Ndo", ["ndq"] = "Ndombe", ["ndr"] = "Ndoola", ["nds"] = "Low German", ["nds-de"] = "German Low German", ["nds-nl"] = "Dutch Low Saxon", ["ndt"] = "Ndunga", ["ndu"] = "Dugun", ["ndv"] = "Ndut", ["ndw"] = "Ndobo", ["ndx"] = "Nduga", ["ndy"] = "Lutos", ["ndz"] = "Ndogo", ["ne"] = "Nepali", ["nea"] = "Eastern Ngad'a", ["neb"] = "Toura", ["nec"] = "Nedebang", ["ned"] = "Nde-Gbite", ["nee"] = "Kumak", ["nef"] = "Nefamese", ["neg"] = "Negidal", ["neh"] = "Nyenkha", ["nej"] = "Neko", ["nek"] = "Neku", ["nem"] = "Nemi", ["nen"] = "Nengone", ["neo"] = "Ná-Meo", ["neq"] = "North Central Mixe", ["ner"] = "Yahadian", ["nes"] = "Bhoti Kinnauri", ["net"] = "Nete", ["neu"] = "Neo", ["nev"] = "Nyaheun", ["new"] = "Newar", ["nex"] = "Neme", ["ney"] = "Neyo", ["nez"] = "Nez Perce", ["nfa"] = "Dhao", ["nfd"] = "Ahwai", ["nfl"] = "Aiwoo", ["nfr"] = "Nafaanra", ["nfu"] = "Mfumte", ["ng"] = "Ndonga", ["nga"] = "Ngbaka", ["ngb"] = "Northern Ngbandi", ["ngc"] = "Ngombe (Congo)", ["ngd"] = "Ngando (Central African Republic)", ["nge"] = "Ngemba", ["ngf-pro"] = "Proto-Trans-New Guinea", ["ngg"] = "Ngbaka Manza", ["ngh"] = "Nǀuu", ["ngi"] = "Ngizim", ["ngj"] = "Ngie", ["ngk"] = "Ngalkbun", ["ngl"] = "Lomwe", ["ngm"] = "Ngatik Men's Creole", ["ngn"] = "Ngwo", ["ngo"] = "Ngoni", ["ngp"] = "Ngulu", ["ngq"] = "Ngoreme", ["ngr"] = "Nagu", ["ngs"] = "Gvoko", ["ngt"] = "Ngeq", ["ngu"] = "Guerrero Nahuatl", ["ngv"] = "Nagumi", ["ngw"] = "Ngwaba", ["ngx"] = "Nggwahyi", ["ngy"] = "Tibea", ["ngz"] = "Ngungwel", ["nha"] = "Nhanda", ["nhb"] = "Beng", ["nhc"] = "Tabasco Nahuatl", ["nhd"] = "Chiripá", ["nhe"] = "Eastern Huasteca Nahuatl", ["nhf"] = "Nhuwala", ["nhg"] = "Tetelcingo Nahuatl", ["nhh"] = "Nahari", ["nhi"] = "Zacatlán-Ahuacatlán-Tepetzintla Nahuatl", ["nhk"] = "Cosoleacaque Nahuatl", ["nhm"] = "Morelos Nahuatl", ["nhn"] = "Central Nahuatl", ["nho"] = "Takuu", ["nhp"] = "Pajapan Nahuatl", ["nhq"] = "Huaxcaleca Nahuatl", ["nhr"] = "Naro", ["nht"] = "Ometepec Nahuatl", ["nhu"] = "Noone", ["nhv"] = "Temascaltepec Nahuatl", ["nhw"] = "Western Huasteca Nahuatl", ["nhx"] = "Mecayapan Nahuatl", ["nhy"] = "Northern Oaxaca Nahuatl", ["nhz"] = "Santa María La Alta Nahuatl", ["nia"] = "Nias", ["nib"] = "Nakame", ["nic-bco-pro"] = "Proto-Benue-Congo", ["nic-bod-pro"] = "Proto-Bantoid", ["nic-eov-pro"] = "Proto-Eastern Oti-Volta", ["nic-gns-pro"] = "Proto-Gurunsi", ["nic-grf-pro"] = "Proto-Grassfields", ["nic-gur-pro"] = "Proto-Gur", ["nic-jkn-pro"] = "Proto-Jukunoid", ["nic-lcr-pro"] = "Proto-Lower Cross River", ["nic-ogo-pro"] = "Proto-Ogoni", ["nic-ovo-pro"] = "Proto-Oti-Volta", ["nic-plt-pro"] = "Proto-Plateau", ["nic-pro"] = "Proto-Niger-Congo", ["nic-ubg-pro"] = "Proto-Ubangian", ["nic-ucr-pro"] = "Proto-Upper Cross River", ["nic-vco-pro"] = "Proto-Volta-Congo", ["nid"] = "Ngandi", ["nie"] = "Niellim", ["nif"] = "Nek", ["nig"] = "Ngalakan", ["nih"] = "Nyiha", ["nii"] = "Nii", ["nij"] = "Ngaju", ["nik"] = "Southern Nicobarese", ["nil"] = "Nila", ["nim"] = "Nilamba", ["nin"] = "Ninzo", ["nio"] = "Nganasan", ["niq"] = "Nandi", ["nir"] = "Nimboran", ["nis"] = "Nimi", ["nit"] = "Southeastern Kolami", ["niu"] = "Niuean", ["niv"] = "Nivkh", ["niw"] = "Nimo", ["nix"] = "Hema", ["niy"] = "Ngiti", ["niz"] = "Ningil", ["nja"] = "Nzanyi", ["njb"] = "Nocte Naga", ["njh"] = "Lotha Naga", ["nji"] = "Gudanji", ["njj"] = "Njen", ["njl"] = "Njalgulgule", ["njm"] = "Angami", ["njn"] = "Liangmai Naga", ["njo"] = "Ao", ["njr"] = "Njerep", ["njs"] = "Nisa", ["njt"] = "Ndyuka-Trio Pidgin", ["nju"] = "Ngadjunmaya", ["njx"] = "Kunyi", ["njy"] = "Njyem", ["njz"] = "Nyishi", ["nka"] = "Nkoya", ["nkb"] = "Khoibu Naga", ["nkc"] = "Nkongho", ["nkd"] = "Koireng", ["nke"] = "Duke", ["nkf"] = "Inpui Naga", ["nkg"] = "Nekgini", ["nkh"] = "Khezha Naga", ["nki"] = "Thangal Naga", ["nkj"] = "Nakai", ["nkk"] = "Nokuku", ["nkm"] = "Namat", ["nkn"] = "Nkangala", ["nko"] = "Nkonya", ["nkp"] = "Niuatoputapu", ["nkq"] = "Nkami", ["nkr"] = "Nukuoro", ["nks"] = "North Asmat", ["nkt"] = "Nyika", ["nku"] = "Bouna Kulango", ["nkw"] = "Nkutu", ["nkx"] = "Nkoroo", ["nkz"] = "Nkari", ["nl"] = "Dutch", ["nla"] = "Ngombale", ["nlc"] = "Nalca", ["nle"] = "East Nyala", ["nlg"] = "Gela", ["nli"] = "Grangali", ["nlj"] = "Nyali", ["nlk"] = "Ninia Yali", ["nll"] = "Nihali", ["nlm"] = "Mankiyali", ["nlo"] = "Ngul", ["nlq"] = "Lao Naga", ["nlu"] = "Nchumbulu", ["nlv"] = "Orizaba Nahuatl", ["nlw"] = "Walangama", ["nlx"] = "Nahali", ["nly"] = "Nyamal", ["nlz"] = "Nalögo", ["nma"] = "Maram Naga", ["nmb"] = "Big Nambas", ["nmc"] = "Ngam", ["nmd"] = "Ndumu", ["nme"] = "Mzieme Naga", ["nmf"] = "Tangkhul Naga", ["nmg"] = "Kwasio", ["nmh"] = "Monsang Naga", ["nmi"] = "Nyam", ["nmj"] = "Ngombe (Central African Republic)", ["nmk"] = "Namakura", ["nml"] = "Ndemli", ["nmm"] = "Manangba", ["nmn"] = "ǃXóõ", ["nmo"] = "Moyon Naga", ["nmp"] = "Nimanbur", ["nmq"] = "Nambya", ["nmr"] = "Nimbari", ["nms"] = "Letemboi", ["nmt"] = "Namonuito", ["nmu"] = "Northeast Maidu", ["nmv"] = "Ngamini", ["nmw"] = "Nimoa", ["nmy"] = "Namuyi", ["nmz"] = "Nawdm", ["nn"] = "Norwegian Nynorsk", ["nna"] = "Nyangumarta", ["nnb"] = "Nande", ["nnc"] = "Nancere", ["nnd"] = "West Ambae", ["nne"] = "Ngandyera", ["nnf"] = "Ngaing", ["nng"] = "Maring Naga", ["nnh"] = "Ngiemboon", ["nni"] = "North Nuaulu", ["nnj"] = "Nyangatom", ["nnk"] = "Nankina", ["nnl"] = "Northern Rengma Naga", ["nnm"] = "Namia", ["nnn"] = "Ngete", ["nnp"] = "Wancho", ["nnq"] = "Ngindo", ["nnr"] = "Narungga", ["nnt"] = "Nanticoke", ["nnu"] = "Dwang", ["nnv"] = "Nukunu", ["nnw"] = "Southern Nuni", ["nnx"] = "Ngong", ["nny"] = "Nyangga", ["nnz"] = "Nda'nda'", ["no"] = "Norwegian", ["noa"] = "Woun Meu", ["noc"] = "Nuk", ["nod"] = "Northern Thai", ["noe"] = "Nimadi", ["nof"] = "Nomane", ["nog"] = "Nogai", ["noh"] = "Nomu", ["noi"] = "Noiri", ["noj"] = "Nonuya", ["nok"] = "Nooksack", ["nol"] = "Nomlaki", ["nom"] = "Nocamán", ["non"] = "Old Norse", ["nop"] = "Numanggang", ["noq"] = "Ngongo", ["nos"] = "Eastern Nisu", ["not"] = "Nomatsiguenga", ["nou"] = "Ewage-Notu", ["nov"] = "Novial", ["now"] = "Nyambo", ["noy"] = "Noy", ["noz"] = "Nayi", ["npa"] = "Nar Phu", ["npb"] = "Nupbikha", ["npg"] = "Ponyo", ["nph"] = "Phom", ["npl"] = "Southeastern Puebla Nahuatl", ["npn"] = "Mondropolon", ["npo"] = "Pochuri Naga", ["nps"] = "Nipsan", ["npu"] = "Puimei Naga", ["npy"] = "Napu", ["nqg"] = "Ede Nago", ["nqk"] = "Kura Ede Nago", ["nql"] = "Ngendelengo", ["nqm"] = "Ndom", ["nqn"] = "Nen", ["nqo"] = "N'Ko", ["nqq"] = "Kyan-Karyaw Naga", ["nqy"] = "Akyaung Ari", ["nr"] = "Southern Ndebele", ["nra"] = "Ngom", ["nrb"] = "Nara", ["nrc"] = "Noric", ["nre"] = "Southern Rengma Naga", ["nrf"] = "Norman", ["nrg"] = "Narango", ["nri"] = "Chokri Naga", ["nrk"] = "Ngarla", ["nrl"] = "Ngarluma", ["nrm"] = "Narom", ["nrn"] = "Norn", ["nrp"] = "North Picene", ["nrr"] = "Norra", ["nrt"] = "Northern Kalapuya", ["nru"] = "Narua", ["nrx"] = "Ngurmbur", ["nrz"] = "Lala (New Guinea)", ["nsa"] = "Sangtam Naga", ["nsb"] = "Lower Nossob", ["nsc"] = "Nshi", ["nsd"] = "Southern Nisu", ["nse"] = "Nsenga", ["nsg"] = "Ngasa", ["nsh"] = "Ngoshie", ["nsi"] = "Nigerian Sign Language", ["nsk"] = "Naskapi", ["nsl"] = "Norwegian Sign Language", ["nsm"] = "Sema", ["nsn"] = "Nehan", ["nso"] = "Northern Sotho", ["nsp"] = "Nepalese Sign Language", ["nsq"] = "Northern Sierra Miwok", ["nsr"] = "Maritime Sign Language", ["nss"] = "Nali", ["nst"] = "Tangsa", ["nsu"] = "Sierra Negra Nahuatl", ["nsv"] = "Southwestern Nisu", ["nsw"] = "Navut", ["nsx"] = "Nsongo", ["nsy"] = "Nasal", ["nsz"] = "Nisenan", ["ntd"] = "Northern Tidong", ["nte"] = "Nathembo", ["ntg"] = "Ngantangarra", ["nti"] = "Natioro", ["ntj"] = "Ngaanyatjarra", ["ntk"] = "Ikoma", ["ntm"] = "Nateni", ["nto"] = "Ntomba", ["ntp"] = "Northern Tepehuan", ["ntr"] = "Delo", ["nts"] = "Natagaimas", ["ntu"] = "Natügu", ["ntw"] = "Nottoway", ["ntx"] = "Somra", ["nty"] = "Mantsi", ["nua"] = "Yuaga", ["nub-har"] = "Haraza", ["nub-pro"] = "Proto-Nubian", ["nuc"] = "Nukuini", ["nud"] = "Ngala", ["nue"] = "Ngundu", ["nuf"] = "Nusu", ["nug"] = "Nungali", ["nuh"] = "Ndunda", ["nui"] = "Ngumbi", ["nuj"] = "Nyole (Uganda)", ["nuk"] = "Nootka", ["nul"] = "Nusa Laut", ["num"] = "Niuafo'ou", ["nun"] = "Anong", ["nuo"] = "Nguôn", ["nup"] = "Nupe", ["nuq"] = "Nukumanu", ["nur"] = "Nuguria", ["nus"] = "Nuer", ["nut"] = "Nung", ["nuu"] = "Ngbundu", ["nuv"] = "Northern Nuni", ["nuw"] = "Nguluwan", ["nux"] = "Mehek", ["nuy"] = "Nunggubuyu", ["nuz"] = "Tlamacazapa Nahuatl", ["nv"] = "Navajo", ["nvh"] = "Nasarian", ["nvm"] = "Namiae", ["nvo"] = "Nyokon", ["nwa"] = "Nawathinehena", ["nwb"] = "Nyabwa", ["nwc"] = "Classical Newar", ["nwe"] = "Ngwe", ["nwi"] = "Southwest Tanna", ["nwm"] = "Nyamusa-Molo", ["nwo"] = "Nauo", ["nwr"] = "Nawaru", ["nwx"] = "Middle Newar", ["nwy"] = "Nottoway-Meherrin", ["nxa"] = "Nauete", ["nxd"] = "Ngando (Congo)", ["nxe"] = "Nage", ["nxg"] = "Ngadha", ["nxi"] = "Nindi", ["nxl"] = "South Nuaulu", ["nxm"] = "Numidian", ["nxn"] = "Ngawun", ["nxo"] = "Ndambomo", ["nxq"] = "Naxi", ["nxr"] = "Ninggerum", ["nxu"] = "Narau", ["nxx"] = "Nafri", ["ny"] = "Chichewa", ["nyb"] = "Nyangbo", ["nyc"] = "Nyanga-li", ["nyd"] = "Nyole (Kenya)", ["nye"] = "Nyengo", ["nyf"] = "Giryama", ["nyg"] = "Nyindu", ["nyh"] = "Nyigina", ["nyi"] = "Nyimang", ["nyj"] = "Nyanga (Congo)", ["nyk"] = "Nyaneka", ["nyl"] = "Nyeu", ["nym"] = "Nyamwezi", ["nyn"] = "Nyankole", ["nyo"] = "Nyoro", ["nyp"] = "Nyang'i", ["nys"] = "Nyunga", ["nyt"] = "Nyawaygi", ["nyu"] = "Nyungwe", ["nyv"] = "Nyulnyul", ["nyw"] = "Nyaw", ["nyx"] = "Nganyaywana", ["nyy"] = "Nyakyusa", ["nza"] = "Tigon Mbembe", ["nzb"] = "Njebi", ["nzd"] = "Nzadi", ["nzi"] = "Nzima", ["nzk"] = "Nzakara", ["nzm"] = "Zeme Naga", ["nzs"] = "New Zealand Sign Language", ["nzu"] = "Central Teke", ["nzy"] = "Nzakambay", ["nzz"] = "Nanga Dama Dogon", ["oaa"] = "Orok", ["oac"] = "Oroch", ["oav"] = "Old Avar", ["obi"] = "Obispeño", ["obk"] = "Southern Bontoc", ["obl"] = "Oblo", ["obm"] = "Moabite", ["obo"] = "Obo Manobo", ["obr"] = "Old Burmese", ["obt"] = "Old Breton", ["obu"] = "Obulom", ["oc"] = "Occitan", ["oca"] = "Ocaina", ["och"] = "Old Chinese", ["oco"] = "Old Cornish", ["ocu"] = "Tlahuica", ["oda"] = "Odut", ["odk"] = "Od", ["odt"] = "Old Dutch", ["odu"] = "Odual", ["ofo"] = "Ofo", ["ofs"] = "Old Frisian", ["ofu"] = "Efutop", ["ogb"] = "Ogbia", ["ogc"] = "Ogbah", ["oge"] = "Old Georgian", ["ogg"] = "Ogbogolo", ["ogo"] = "Khana", ["ogu"] = "Ogbronuagum", ["ohu"] = "Old Hungarian", ["oia"] = "Oirata", ["oin"] = "Inebu One", ["oj"] = "Ojibwe", ["ojb"] = "Northwestern Ojibwa", ["ojc"] = "Central Ojibwa", ["ojg"] = "Eastern Ojibwa", ["ojp"] = "Old Japanese", ["ojs"] = "Severn Ojibwa", ["ojv"] = "Ontong Java", ["ojw"] = "Western Ojibwa", ["oka"] = "Okanagan", ["okb"] = "Okobo", ["okd"] = "Okodia", ["oke"] = "Okpe (Southwestern Edo)", ["okg"] = "Kok-Paponk", ["okh"] = "Koresh-e Rostam", ["oki"] = "Okiek", ["okj"] = "Oko-Juwoi", ["okk"] = "Kwamtim One", ["okl"] = "Old Kentish Sign Language", ["okm"] = "Middle Korean", ["okn"] = "Oki-No-Erabu", ["oko"] = "Old Korean", ["okr"] = "Kirike", ["oks"] = "Oko-Eni-Osayen", ["oku"] = "Oku", ["okv"] = "Orokaiva", ["okx"] = "Okpe (Northwestern Edo)", ["okz"] = "Old Khmer", ["old"] = "Mochi", ["ole"] = "Olekha", ["olm"] = "Oloma", ["olo"] = "Livvi", ["olr"] = "Olrat", ["olt"] = "Old Lithuanian", ["olu"] = "Kuvale", ["om"] = "Oromo", ["oma"] = "Omaha-Ponca", ["omb"] = "Omba", ["omc"] = "Mochica", ["omg"] = "Omagua", ["omi"] = "Omi", ["omk"] = "Omok", ["oml"] = "Ombo", ["omn"] = "Minoan", ["omo"] = "Utarmbung", ["omp"] = "Old Manipuri", ["omq-cha-pro"] = "Proto-Chatino", ["omq-maz-pro"] = "Proto-Mazatec", ["omq-mix-pro"] = "Proto-Mixtecan", ["omq-mxt-pro"] = "Proto-Mixtec", ["omq-otp-pro"] = "Proto-Oto-Pamean", ["omq-pro"] = "Proto-Oto-Manguean", ["omq-tel"] = "Teposcolula Mixtec", ["omq-teo"] = "Teojomulco Chatino", ["omq-tri-pro"] = "Proto-Trique", ["omq-zap-pro"] = "Proto-Zapotecan", ["omq-zpc-pro"] = "Proto-Zapotec", ["omr"] = "Old Marathi", ["omt"] = "Omotik", ["omu"] = "Omurano", ["omv-aro-pro"] = "Proto-Aroid", ["omv-diz-pro"] = "Proto-Dizoid", ["omv-pro"] = "Proto-Omotic", ["omw"] = "South Tairora", ["omx"] = "Old Mon", ["ona"] = "Selk'nam", ["onb"] = "Lingao", ["one"] = "Oneida", ["ong"] = "Olo", ["oni"] = "Onin", ["onj"] = "Onjob", ["onk"] = "Kabore One", ["onn"] = "Onobasulu", ["ono"] = "Onondaga", ["onp"] = "Sartang", ["onr"] = "Northern One", ["ons"] = "Ono", ["ont"] = "Ontenu", ["onu"] = "Unua", ["onw"] = "Old Nubian", ["onx"] = "Pidgin Onin", ["ood"] = "O'odham", ["oog"] = "Ong", ["oon"] = "Önge", ["oor"] = "Oorlams", ["oos"] = "Old Ossetic", ["opa"] = "Okpamheri", ["opk"] = "Kopkaka", ["opm"] = "Oksapmin", ["opo"] = "Opao", ["opt"] = "Opata", ["opy"] = "Ofayé", ["or"] = "Oriya", ["ora"] = "Oroha", ["ore"] = "Orejón", ["org"] = "Oring", ["orh"] = "Oroqen", ["oro"] = "Orokolo", ["orr"] = "Oruma", ["ort"] = "Adivasi Oriya", ["oru"] = "Ormuri", ["orv"] = "Old East Slavic", ["orw"] = "Oro Win", ["orx"] = "Oro", ["orz"] = "Ormu", ["os"] = "Ossetian", ["os-pro"] = "Proto-Ossetic", ["osa"] = "Osage", ["osc"] = "Oscan", ["osi"] = "Osing", ["osn"] = "Old Sundanese", ["oso"] = "Ososo", ["osp"] = "Old Spanish", ["ost"] = "Osatu", ["osu"] = "Southern One", ["osx"] = "Old Saxon", ["ota"] = "Ottoman Turkish", ["otb"] = "Old Tibetan", ["otd"] = "Ot Danum", ["ote"] = "Mezquital Otomi", ["oti"] = "Oti", ["otk"] = "Old Turkic", ["otl"] = "Tilapa Otomi", ["otm"] = "Eastern Highland Otomi", ["otn"] = "Tenango Otomi", ["oto-otm-pro"] = "Proto-Otomi", ["oto-pro"] = "Proto-Otomian", ["otq"] = "Querétaro Otomi", ["otr"] = "Otoro", ["ots"] = "Estado de México Otomi", ["ott"] = "Temoaya Otomi", ["otu"] = "Otuke", ["otw"] = "Ottawa", ["otx"] = "Texcatepec Otomi", ["oty"] = "Old Tamil", ["otz"] = "Ixtenco Otomi", ["oub"] = "Glio-Oubi", ["oue"] = "Oune", ["oui"] = "Old Uyghur", ["oum"] = "Ouma", ["ovd"] = "Elfdalian", ["owi"] = "Owiniga", ["owl"] = "Old Welsh", ["oyb"] = "Oy", ["oyd"] = "Oyda", ["oym"] = "Wayampi", ["oyy"] = "Oya'oya", ["ozm"] = "Koonzime", ["pa"] = "Punjabi", ["paa-kom"] = "Kómnzo", ["paa-kwn"] = "Kuwani", ["paa-nha-pro"] = "Proto-North Halmahera", ["paa-nun"] = "Nungon", ["pab"] = "Pareci", ["pac"] = "Pacoh", ["pad"] = "Paumarí", ["pae"] = "Pagibete", ["paf"] = "Paranawát", ["pag"] = "Pangasinan", ["pah"] = "Tenharim", ["pai"] = "Pe", ["pak"] = "Parakanã", ["pal"] = "Middle Persian", ["pam"] = "Kapampangan", ["pao"] = "Northern Paiute", ["pap"] = "Papiamentu", ["paq"] = "Parya", ["par"] = "Panamint", ["pas"] = "Papasena", ["pat"] = "Papitalai", ["pau"] = "Palauan", ["pav"] = "Wari'", ["paw"] = "Pawnee", ["pax"] = "Pankararé", ["pay"] = "Pech", ["paz"] = "Pankararú", ["pbb"] = "Páez", ["pbc"] = "Patamona", ["pbe"] = "Mezontla Popoloca", ["pbf"] = "Coyotepec Popoloca", ["pbg"] = "Paraujano", ["pbh"] = "Panare", ["pbi"] = "Podoko", ["pbl"] = "Mak (Nigeria)", ["pbm"] = "Puebla Mazatec", ["pbn"] = "Kpasam", ["pbo"] = "Papel", ["pbp"] = "Badyara", ["pbr"] = "Pangwa", ["pbs"] = "Central Pame", ["pbv"] = "Pnar", ["pby"] = "Pyu", ["pca"] = "Santa Inés Ahuatempan Popoloca", ["pcb"] = "Pear", ["pcc"] = "Bouyei", ["pcd"] = "Picard", ["pce"] = "Ruching Palaung", ["pcf"] = "Paliyan", ["pcg"] = "Paniya", ["pch"] = "Pardhan", ["pci"] = "Duruwa", ["pcj"] = "Parenga", ["pck"] = "Paite", ["pcl"] = "Pardhi", ["pcm"] = "Nigerian Pidgin", ["pcn"] = "Piti", ["pcp"] = "Pacahuara", ["pcw"] = "Pyapun", ["pda"] = "Anam", ["pdc"] = "Pennsylvania German", ["pdi"] = "Pa Di", ["pdn"] = "Fedan", ["pdo"] = "Padoe", ["pdt"] = "Plautdietsch", ["pdu"] = "Kayan", ["pea"] = "Peranakan Indonesian", ["peb"] = "Eastern Pomo", ["ped"] = "Mala (New Guinea)", ["pee"] = "Taje", ["pef"] = "Northeastern Pomo", ["peg"] = "Pengo", ["peh"] = "Bonan", ["pei"] = "Chichimeca-Jonaz", ["pej"] = "Northern Pomo", ["pek"] = "Penchal", ["pel"] = "Pekal", ["pem"] = "Phende", ["peo"] = "Old Persian", ["pep"] = "Kunja", ["peq"] = "Southern Pomo", ["pev"] = "Pémono", ["pex"] = "Petats", ["pey"] = "Petjo", ["pez"] = "Eastern Penan", ["pfa"] = "Pááfang", ["pfe"] = "Peere", ["pga"] = "Juba Arabic", ["pgd"] = "Gandhari", ["pgg"] = "Pangwali", ["pgi"] = "Pagi", ["pgk"] = "Rerep", ["pgl"] = "Primitive Irish", ["pgn"] = "Paelignian", ["pgs"] = "Pangseng", ["pgu"] = "Pagu", ["pgz"] = "Papua New Guinean Sign Language", ["pha"] = "Pa-Hng", ["phd"] = "Phudagi", ["phg"] = "Phuong", ["phh"] = "Phukha", ["phi-din"] = "Dinapigue Agta", ["phi-kal-pro"] = "Proto-Kalamian", ["phi-nag"] = "Nagtipunan Agta", ["phi-pro"] = "Proto-Philippine", ["phk"] = "Phake", ["phl"] = "Phalura", ["phm"] = "Phimbi", ["phn"] = "Phoenician", ["pho"] = "Phunoi", ["phq"] = "Phana'", ["phr"] = "Pahari-Potwari", ["pht"] = "Phu Thai", ["phu"] = "Phuan", ["phv"] = "Pahlavani", ["phw"] = "Phangduwali", ["pi"] = "Pali", ["pia"] = "Pima Bajo", ["pib"] = "Yine", ["pic"] = "Pinji", ["pid"] = "Piaroa", ["pie"] = "Piro", ["pif"] = "Pingelapese", ["pig"] = "Pisabo", ["pih"] = "Pitcairn-Norfolk", ["pii"] = "Pini", ["pij"] = "Pijao", ["pil"] = "Yom", ["pim"] = "Powhatan", ["pin"] = "Piame", ["pio"] = "Piapoco", ["pip"] = "Pero", ["pir"] = "Piratapuyo", ["pis"] = "Pijin", ["pit"] = "Pitta-Pitta", ["piu"] = "Pintupi-Luritja", ["piv"] = "Pileni", ["piw"] = "Pimbwe", ["pix"] = "Piu", ["piy"] = "Piya-Kwonci", ["piz"] = "Pije", ["pjt"] = "Pitjantjatjara", ["pka"] = "Ardhamagadhi Prakrit", ["pkb"] = "Kipfokomo", ["pkc"] = "Baekje", ["pkg"] = "Pak-Tong", ["pkh"] = "Pankhu", ["pkn"] = "Pakanha", ["pko"] = "Pökoot", ["pkp"] = "Pukapukan", ["pkr"] = "Attapady Kurumba", ["pks"] = "Pakistan Sign Language", ["pkt"] = "Maleng", ["pku"] = "Paku", ["pl"] = "Polish", ["pla"] = "Miani", ["plb"] = "Polonombauk", ["plc"] = "Central Palawano", ["ple"] = "Palu'e", ["plg"] = "Pilagá", ["plh"] = "Paulohi", ["plj"] = "Polci", ["plk"] = "Kohistani Shina", ["pll"] = "Shwe Palaung", ["pln"] = "Palenquero", ["plo"] = "Oluta Popoluca", ["plq"] = "Palaic", ["plr"] = "Palaka Senoufo", ["pls"] = "San Marcos Tlalcoyalco Popoloca", ["plu"] = "Palikur", ["plv"] = "Southwest Palawano", ["plw"] = "Brooke's Point Palawano", ["ply"] = "Bolyu", ["plz"] = "Paluan", ["pma"] = "Paama", ["pmb"] = "Pambia", ["pmd"] = "Pallanganmiddang", ["pme"] = "Pwaamei", ["pmf"] = "Pamona", ["pmh"] = "Maharastri Prakrit", ["pmi"] = "Northern Pumi", ["pmj"] = "Southern Pumi", ["pmk"] = "Pamlico", ["pml"] = "Sabir", ["pmm"] = "Pol", ["pmn"] = "Pam", ["pmo"] = "Pom", ["pmq"] = "Northern Pame", ["pmr"] = "Paynamar", ["pms"] = "Piedmontese", ["pmt"] = "Tuamotuan", ["pmu"] = "Mirpur Panjabi", ["pmw"] = "Plains Miwok", ["pmx"] = "Poumei Naga", ["pmy"] = "Papuan Malay", ["pmz"] = "Southern Pame", ["pna"] = "Punan Bah-Biau", ["pnb"] = "Western Panjabi", ["pnc"] = "Pannei", ["pnd"] = "Mpinda", ["pne"] = "Western Penan", ["png"] = "Pongu", ["pnh"] = "Penrhyn", ["pni"] = "Aoheng", ["pnj"] = "Pinjarup", ["pnk"] = "Paunaca", ["pnl"] = "Paleni", ["pnm"] = "Punan Batu", ["pnn"] = "Pinai-Hagahai", ["pno"] = "Panobo", ["pnp"] = "Pancana", ["pnq"] = "Pana (West Africa)", ["pnr"] = "Panim", ["pns"] = "Ponosakan", ["pnt"] = "Pontic Greek", ["pnu"] = "Jiongnai Bunu", ["pnv"] = "Pinigura", ["pnw"] = "Panyjima", ["pnx"] = "Phong-Kniang", ["pny"] = "Pinyin", ["pnz"] = "Pana (Central Africa)", ["poc"] = "Poqomam", ["poe"] = "San Juan Atzingo Popoloca", ["pof"] = "Poke", ["pog"] = "Potiguára", ["poh"] = "Poqomchi'", ["poi"] = "Highland Popoluca", ["pok"] = "Pokangá", ["pom"] = "Southeastern Pomo", ["pon"] = "Pohnpeian", ["poo"] = "Central Pomo", ["pop"] = "Pwapwa", ["poq"] = "Texistepec Popoluca", ["pos"] = "Sayula Popoluca", ["pot"] = "Potawatomi", ["pov"] = "Guinea-Bissau Creole", ["pow"] = "San Felipe Otlaltepec Popoloca", ["pox"] = "Polabian", ["poy"] = "Pogolo", ["poz-abi"] = "Abai", ["poz-bal"] = "Baliledo", ["poz-btk-pro"] = "Proto-Bungku-Tolaki", ["poz-cet-pro"] = "Proto-Central-Eastern Malayo-Polynesian", ["poz-hce-pro"] = "Proto-Halmahera-Cenderawasih", ["poz-lgx-pro"] = "Proto-Lampungic", ["poz-mcm-pro"] = "Proto-Malayo-Chamic", ["poz-mly-pro"] = "Proto-Malayic", ["poz-msa-pro"] = "Proto-Malayo-Sumbawan", ["poz-oce-pro"] = "Proto-Oceanic", ["poz-pep-pro"] = "Proto-Eastern Polynesian", ["poz-pnp-pro"] = "Proto-Nuclear Polynesian", ["poz-pol-pro"] = "Proto-Polynesian", ["poz-pro"] = "Proto-Malayo-Polynesian", ["poz-ssw-pro"] = "Proto-South Sulawesi", ["poz-sus-pro"] = "Proto-Sunda-Sulawesi", ["poz-swa-pro"] = "Proto-North Sarawak", ["ppa"] = "Pao", ["ppe"] = "Papi", ["ppi"] = "Paipai", ["ppk"] = "Uma", ["ppl"] = "Pipil", ["ppm"] = "Papuma", ["ppn"] = "Papapana", ["ppo"] = "Folopa", ["ppq"] = "Pei", ["pps"] = "San Luís Temalacayuca Popoloca", ["ppt"] = "Pa", ["ppu"] = "Papora", ["pqa"] = "Pa'a", ["pqe-pro"] = "Proto-Eastern Malayo-Polynesian", ["pqm"] = "Malecite-Passamaquoddy", ["pra-niy"] = "Niya Prakrit", ["prc"] = "Parachi", ["pre"] = "Principense", ["prf"] = "Paranan", ["prg"] = "Old Prussian", ["prh"] = "Porohanon", ["pri"] = "Paicî", ["prk"] = "Parauk", ["prl"] = "Peruvian Sign Language", ["prm"] = "Kibiri", ["prn"] = "Prasuni", ["pro"] = "Old Occitan", ["prq"] = "Ashéninka Perené", ["prr"] = "Puri", ["prt"] = "Phai", ["pru"] = "Puragi", ["prw"] = "Parawen", ["prx"] = "Purik", ["prz"] = "Providencia Sign Language", ["ps"] = "Pashto", ["psa"] = "Asue Awyu", ["psc"] = "Persian Sign Language", ["psd"] = "Plains Indian Sign Language", ["pse"] = "Central Malay", ["psg"] = "Penang Sign Language", ["psh"] = "Southwest Pashayi", ["psi"] = "Southeast Pashayi", ["psl"] = "Puerto Rican Sign Language", ["psm"] = "Pauserna", ["psn"] = "Panasuan", ["pso"] = "Polish Sign Language", ["psp"] = "Philippine Sign Language", ["psq"] = "Pasi", ["psr"] = "Portuguese Sign Language", ["pss"] = "Kaulong", ["psu"] = "Sauraseni Prakrit", ["psw"] = "Port Sandwich", ["psy"] = "Piscataway", ["pt"] = "Portuguese", ["pta"] = "Pai Tavytera", ["pth"] = "Pataxó Hã-Ha-Hãe", ["pti"] = "Pintiini", ["ptn"] = "Patani", ["pto"] = "Zo'é", ["ptp"] = "Patep", ["ptq"] = "Pattapu", ["ptr"] = "Piamatsina", ["ptt"] = "Enrekang", ["ptu"] = "Bambam", ["ptv"] = "Port Vato", ["ptw"] = "Pentlatch", ["pty"] = "Pathiya", ["pua"] = "Purepecha", ["pub"] = "Purum", ["puc"] = "Punan Merap", ["pud"] = "Punan Aput", ["pue"] = "Puelche", ["puf"] = "Punan Merah", ["pug"] = "Phuie", ["pui"] = "Puinave", ["puj"] = "Punan Tubu", ["pum"] = "Puma", ["puo"] = "Puoc", ["pup"] = "Pulabu", ["puq"] = "Puquina", ["pur"] = "Puruborá", ["put"] = "Putoh", ["puu"] = "Punu", ["puw"] = "Puluwat", ["pux"] = "Puare", ["puy"] = "Purisimeño", ["pwa"] = "Pawaia", ["pwb"] = "Panawa", ["pwg"] = "Gapapaiwa", ["pwi"] = "Patwin", ["pwm"] = "Molbog", ["pwn"] = "Paiwan", ["pwo"] = "Western Pwo", ["pwr"] = "Powari", ["pww"] = "Northern Pwo", ["pxm"] = "Quetzaltepec Mixe", ["pye"] = "Pye Krumen", ["pym"] = "Fyam", ["pyn"] = "Poyanáwa", ["pys"] = "Paraguayan Sign Language", ["pyu"] = "Puyuma", ["pyx"] = "Tircul", ["pyy"] = "Pyen", ["pzh"] = "Pazeh", ["pzn"] = "Para Naga", ["qfa-adm-pro"] = "Proto-Great Andamanese", ["qfa-bet-pro"] = "Proto-Be-Tai", ["qfa-cka-pro"] = "Proto-Chukotko-Kamchatkan", ["qfa-hur-pro"] = "Proto-Hurro-Urartian", ["qfa-kad-pro"] = "Proto-Kadu", ["qfa-kms-pro"] = "Proto-Kam-Sui", ["qfa-kor-pro"] = "Proto-Koreanic", ["qfa-kra-pro"] = "Proto-Kra", ["qfa-lic-pro"] = "Proto-Hlai", ["qfa-onb-pro"] = "Proto-Be", ["qfa-ong-pro"] = "Proto-Ongan", ["qfa-tak-pro"] = "Proto-Kra-Dai", ["qfa-xgx-tuh"] = "Tuyuhun", ["qfa-xgx-tuo"] = "Tuoba", ["qfa-xgx-wuh"] = "Wuhuan", ["qfa-xgx-xbi"] = "Xianbei", ["qfa-yen-pro"] = "Proto-Yeniseian", ["qfa-yuk-pro"] = "Proto-Yukaghir", ["qu"] = "Quechua", ["qua"] = "Quapaw", ["quc"] = "K'iche'", ["qui"] = "Quileute", ["qum"] = "Sipakapense", ["qun"] = "Quinault", ["quq"] = "Quinqui", ["quv"] = "Sacapulteco", ["qvy"] = "Queyu", ["qwc"] = "Classical Quechua", ["qwe-kch"] = "Kichwa", ["qwm"] = "Kipchak", ["qwt"] = "Kwalhioqua-Tlatskanai", ["qxs"] = "Southern Qiang", ["qya"] = "Quenya", ["qyp"] = "Quiripi", ["raa"] = "Dungmali", ["rab"] = "Chamling", ["rac"] = "Rasawa", ["rad"] = "Rade", ["raf"] = "Western Meohang", ["rag"] = "Logooli", ["rah"] = "Rabha", ["rai"] = "Ramoaaina", ["raj"] = "Rajasthani", ["rak"] = "Tulu-Bohuai", ["ral"] = "Ralte", ["ram"] = "Canela", ["ran"] = "Riantana", ["rao"] = "Rao", ["rap"] = "Rapa Nui", ["raq"] = "Saam", ["rar"] = "Rarotongan", ["ras"] = "Tegali", ["rat"] = "Razajerdi", ["rau"] = "Raute", ["rav"] = "Sampang", ["raw"] = "Rawang", ["rax"] = "Rang", ["ray"] = "Rapa", ["raz"] = "Rahambuu", ["rbb"] = "Rumai Palaung", ["rbk"] = "Northern Bontoc", ["rbl"] = "Miraya Bikol", ["rcf"] = "Réunion Creole French", ["rdb"] = "Rudbari", ["rea"] = "Rerau", ["reb"] = "Rembong", ["ree"] = "Rejang Kayan", ["reg"] = "Kara (Tanzania)", ["rei"] = "Reli", ["rej"] = "Rejang", ["rel"] = "Rendille", ["rem"] = "Remo", ["ren"] = "Rengao", ["rer"] = "Rer Bare", ["res"] = "Reshe", ["ret"] = "Retta", ["rey"] = "Reyesano", ["rga"] = "Roria", ["rge"] = "Romani Greek", ["rgk"] = "Rangkas", ["rgn"] = "Romagnol", ["rgr"] = "Resígaro", ["rgs"] = "Southern Roglai", ["rgu"] = "Ringgou", ["rhg"] = "Rohingya", ["rhp"] = "Yahang", ["ria"] = "Reang", ["rif"] = "Tarifit", ["ril"] = "Riang", ["rim"] = "Nyaturu", ["rin"] = "Nungu", ["rir"] = "Ribun", ["rit"] = "Ritarungo", ["riu"] = "Riung", ["rjg"] = "Rajong", ["rji"] = "Raji", ["rjs"] = "Rajbanshi", ["rka"] = "Kraol", ["rkb"] = "Rikbaktsa", ["rkh"] = "Rakahanga-Manihiki", ["rki"] = "Rakhine", ["rkm"] = "Marka", ["rkt"] = "Kamta", ["rkw"] = "Arakwal", ["rm"] = "Romansch", ["rma"] = "Rama", ["rmb"] = "Rembarunga", ["rmc"] = "Carpathian Romani", ["rmd"] = "Traveller Danish", ["rme"] = "Angloromani", ["rmf"] = "Kalo Finnish Romani", ["rmg"] = "Traveller Norwegian", ["rmh"] = "Murkim", ["rmi"] = "Lomavren", ["rmk"] = "Romkun", ["rml"] = "Baltic Romani", ["rmm"] = "Roma", ["rmn"] = "Balkan Romani", ["rmo"] = "Sinte Romani", ["rmp"] = "Rempi", ["rmq"] = "Caló", ["rms"] = "Romanian Sign Language", ["rmt"] = "Domari", ["rmu"] = "Tavringer Romani", ["rmv"] = "Romanova", ["rmw"] = "Welsh Romani", ["rmx"] = "Romam", ["rmy"] = "Vlax Romani", ["rmz"] = "Marma", ["rnd"] = "Ruwund", ["rng"] = "Ronga", ["rnl"] = "Ranglong", ["rnn"] = "Roon", ["rnp"] = "Rongpo", ["rnw"] = "Rungwa", ["ro"] = "Romanian", ["roa-ang"] = "Angevin", ["roa-bbn"] = "Bourbonnais-Berrichon", ["roa-brg"] = "Bourguignon", ["roa-cha"] = "Champenois", ["roa-fcm"] = "Franc-Comtois", ["roa-gal"] = "Gallo", ["roa-leo"] = "Leonese", ["roa-lor"] = "Lorrain", ["roa-oan"] = "Navarro-Aragonese", ["roa-oca"] = "Old Catalan", ["roa-ole"] = "Old Leonese", ["roa-opt"] = "Old Galician-Portuguese", ["roa-orl"] = "Orléanais", ["roa-poi"] = "Poitevin-Saintongeais", ["roa-tar"] = "Tarantino", ["roa-tou"] = "Tourangeau", ["rob"] = "Tae'", ["roc"] = "Cacgia Roglai", ["rod"] = "Rogo", ["roe"] = "Ronji", ["rof"] = "Rombo", ["rog"] = "Northern Roglai", ["rol"] = "Romblomanon", ["rom"] = "Romani", ["roo"] = "Rotokas", ["rop"] = "Kriol", ["ror"] = "Rongga", ["rou"] = "Runga", ["row"] = "Dela-Oenale", ["rpn"] = "Repanbitip", ["rpt"] = "Rapting", ["rri"] = "Ririo", ["rro"] = "Roro", ["rrt"] = "Arritinngithigh", ["rsb"] = "Romano-Serbian", ["rsl"] = "Russian Sign Language", ["rsm"] = "Miriwoong Sign Language", ["rtc"] = "Rungtu", ["rth"] = "Ratahan", ["rtm"] = "Rotuman", ["rtw"] = "Rathawi", ["ru"] = "Russian", ["rub"] = "Gungu", ["ruc"] = "Ruuli", ["rue"] = "Rusyn", ["ruf"] = "Luguru", ["rug"] = "Roviana", ["ruh"] = "Ruga", ["rui"] = "Rufiji", ["ruk"] = "Che", ["ruo"] = "Istro-Romanian", ["rup"] = "Aromanian", ["ruq"] = "Megleno-Romanian", ["rut"] = "Rutul", ["ruu"] = "Lanas Lobu", ["ruy"] = "Mala (Nigeria)", ["ruz"] = "Ruma", ["rw"] = "Rwanda-Rundi", ["rwa"] = "Rawo", ["rwk"] = "Rwa", ["rwm"] = "Amba", ["rwo"] = "Rawa", ["rxd"] = "Ngardi", ["rxw"] = "Karuwali", ["ryn"] = "Northern Amami-Oshima", ["rys"] = "Yaeyama", ["ryu"] = "Okinawan", ["rzh"] = "Razihi", ["sa"] = "संस्कृत", ["saa"] = "Saba", ["sab"] = "Buglere", ["sac"] = "Fox", ["sad"] = "Sandawe", ["sae"] = "Sabanê", ["saf"] = "Safaliba", ["sah"] = "Yakut", ["sai-ajg"] = "Ajagua", ["sai-all"] = "Allentiac", ["sai-and"] = "Andoquero", ["sai-ayo"] = "Ayomán", ["sai-bae"] = "Baenan", ["sai-bag"] = "Bagua", ["sai-bet"] = "Betoi", ["sai-bor-pro"] = "Proto-Boran", ["sai-cac"] = "Cacán", ["sai-caq"] = "Caranqui", ["sai-car-pro"] = "Proto-Cariban", ["sai-cat"] = "Catacao", ["sai-cer-pro"] = "Proto-Cerrado", ["sai-chi"] = "Chirino", ["sai-chn"] = "Chaná", ["sai-chp"] = "Chapacura", ["sai-chr"] = "Charrua", ["sai-chu"] = "Churuya", ["sai-cje-pro"] = "Proto-Central Jê", ["sai-cmg"] = "Comechingon", ["sai-cno"] = "Chono", ["sai-cnr"] = "Cañari", ["sai-coe"] = "Coeruna", ["sai-col"] = "Colán", ["sai-cop"] = "Copallén", ["sai-crd"] = "Coroado Puri", ["sai-ctq"] = "Catuquinaru", ["sai-cul"] = "Culli", ["sai-cva"] = "Cueva", ["sai-esm"] = "Esmeralda", ["sai-ewa"] = "Ewarhuyana", ["sai-gam"] = "Gamela", ["sai-gay"] = "Gayón", ["sai-gmo"] = "Guamo", ["sai-gue"] = "Güenoa", ["sai-hau"] = "Haush", ["sai-hoc-pro"] = "Proto-Huitoto-Ocaina", ["sai-jee-pro"] = "Proto-Jê", ["sai-jko"] = "Jeikó", ["sai-jrj"] = "Jirajara", ["sai-kat"] = "Katembri", ["sai-mal"] = "Malalí", ["sai-mar"] = "Maratino", ["sai-mat"] = "Matanawi", ["sai-mcn"] = "Mocana", ["sai-men"] = "Menien", ["sai-mil"] = "Millcayac", ["sai-mlb"] = "Malibu", ["sai-msk"] = "Masakará", ["sai-muc"] = "Mucuchí", ["sai-mue"] = "Muellama", ["sai-muz"] = "Muzo", ["sai-mys"] = "Maynas", ["sai-nat"] = "Natú", ["sai-nje-pro"] = "Proto-Northern Jê", ["sai-opo"] = "Opón", ["sai-oto"] = "Otomaco", ["sai-pal"] = "Palta", ["sai-pam"] = "Pamigua", ["sai-par"] = "Paratió", ["sai-pnz"] = "Panzaleo", ["sai-prh"] = "Puruhá", ["sai-ptg"] = "Patagón", ["sai-pur"] = "Purukotó", ["sai-pyg"] = "Payaguá", ["sai-pyk"] = "Pykobjê", ["sai-qmb"] = "Quimbaya", ["sai-qtm"] = "Quitemo", ["sai-rab"] = "Rabona", ["sai-ram"] = "Ramanos", ["sai-sac"] = "Sácata", ["sai-san"] = "Sanaviron", ["sai-sap"] = "Sapará", ["sai-sec"] = "Sechura", ["sai-sin"] = "Sinúfana", ["sai-sje-pro"] = "Proto-Southern Jê", ["sai-tab"] = "Tabancale", ["sai-tal"] = "Tallán", ["sai-tap"] = "Tapayuna", ["sai-tar-pro"] = "Proto-Taranoan", ["sai-teu"] = "Teushen", ["sai-tim"] = "Timote", ["sai-tpr"] = "Taparita", ["sai-trr"] = "Tarairiú", ["sai-wai"] = "Waitaká", ["sai-way"] = "Wayumará", ["sai-wit-pro"] = "Proto-Witotoan", ["sai-wnm"] = "Wanham", ["sai-xoc"] = "Xocó", ["sai-yao"] = "Yao (South America)", ["sai-yar"] = "Yarumá", ["sai-yri"] = "Yuri", ["sai-yup"] = "Yupua", ["sai-yur"] = "Yurumanguí", ["saj"] = "Sahu", ["sak"] = "Sake", ["sal-pro"] = "Proto-Salish", ["sam"] = "Samaritan Aramaic", ["sao"] = "Sause", ["saq"] = "Samburu", ["sar"] = "Saraveca", ["sas"] = "Sasak", ["sat"] = "Santali", ["sau"] = "Saleman", ["sav"] = "Saafi-Saafi", ["saw"] = "Sawi", ["sax"] = "Sa", ["say"] = "Saya", ["saz"] = "Saurashtra", ["sba"] = "Ngambay", ["sbb"] = "Simbo", ["sbc"] = "Gele'", ["sbd"] = "Southern Samo", ["sbe"] = "Saliba (New Guinea)", ["sbf"] = "Shabo", ["sbg"] = "Seget", ["sbh"] = "Sori-Harengan", ["sbi"] = "Seti", ["sbj"] = "Surbakhal", ["sbk"] = "Safwa", ["sbl"] = "Botolan Sambal", ["sbm"] = "Sagala", ["sbn"] = "Sindhi Bhil", ["sbo"] = "Sabüm", ["sbp"] = "Sangu (Tanzania)", ["sbq"] = "Sileibi", ["sbr"] = "Sembakung Murut", ["sbs"] = "Subiya", ["sbt"] = "Kimki", ["sbu"] = "Stod Bhoti", ["sbv"] = "Sabine", ["sbw"] = "Simba", ["sbx"] = "Seberuang", ["sby"] = "Soli", ["sbz"] = "Sara Kaba", ["sc"] = "Sardinian", ["scb"] = "Chut", ["sce"] = "Dongxiang", ["scf"] = "San Miguel Creole French", ["scg"] = "Sanggau", ["sch"] = "Sakachep", ["sci"] = "Sri Lankan Creole Malay", ["sck"] = "Sadri", ["scl"] = "Shina", ["scn"] = "Sicilian", ["sco"] = "Scots", ["scp"] = "Yolmo", ["scq"] = "Sa'och", ["scs"] = "North Slavey", ["scu"] = "Shumcho", ["scv"] = "Sheni", ["scw"] = "Sha", ["scx"] = "Sicel", ["sd"] = "Sindhi", ["sda"] = "Toraja-Sa'dan", ["sdb"] = "Shabak", ["sdc"] = "Sassarese", ["sde"] = "Surubu", ["sdf"] = "Sarli", ["sdg"] = "Savi", ["sdh"] = "Southern Kurdish", ["sdj"] = "Suundi", ["sdk"] = "Sos Kundi", ["sdl"] = "Saudi Arabian Sign Language", ["sdm"] = "Semandang", ["sdn"] = "Gallurese", ["sdo"] = "Bukar-Sadung Bidayuh", ["sdp"] = "Sherdukpen", ["sdr"] = "Oraon Sadri", ["sds"] = "Tunisian Berber", ["sdu"] = "Sarudu", ["sdv-daj-pro"] = "Proto-Daju", ["sdv-eje-pro"] = "Proto-Eastern Jebel", ["sdv-nil-pro"] = "Proto-Nilotic", ["sdv-nyi-pro"] = "Proto-Nyima", ["sdv-tmn-pro"] = "Proto-Taman", ["sdx"] = "Sibu Melanau", ["se"] = "Northern Sami", ["sea"] = "Semai", ["sec"] = "Sechelt", ["sed"] = "Sedang", ["see"] = "Seneca", ["sef"] = "Cebaara Senoufo", ["seg"] = "Segeju", ["seh"] = "Sena", ["sei"] = "Seri", ["sej"] = "Sene", ["sek"] = "Sekani", ["sel-nor"] = "Northern Selkup", ["sel-pro"] = "Proto-Selkup", ["sel-sou"] = "Southern Selkup", ["sem-amm"] = "Ammonite", ["sem-amo"] = "Amorite", ["sem-cha"] = "Chaha", ["sem-dad"] = "Dadanitic", ["sem-dum"] = "Dumaitic", ["sem-has"] = "Hasaitic", ["sem-him"] = "Himyaritic", ["sem-his"] = "Hismaic", ["sem-mhr"] = "Muher", ["sem-pro"] = "Proto-Semitic", ["sem-saf"] = "Safaitic", ["sem-srb"] = "Old South Arabian", ["sem-tay"] = "Taymanitic", ["sem-tha"] = "Thamudic", ["sem-wes-pro"] = "Proto-West Semitic", ["sen"] = "Nanerigé Sénoufo", ["seo"] = "Suarmin", ["sep"] = "Sìcìté Sénoufo", ["seq"] = "Senara Sénoufo", ["ser"] = "Serrano", ["ses"] = "Koyraboro Senni", ["set"] = "Sentani", ["seu"] = "Serui-Laut", ["sev"] = "Nyarafolo Senoufo", ["sew"] = "Sewa Bay", ["sey"] = "Secoya", ["sez"] = "Senthang Chin", ["sfb"] = "French Belgian Sign Language", ["sfm"] = "Small Flowery Miao", ["sfs"] = "South African Sign Language", ["sfw"] = "Sehwi", ["sg"] = "Sango", ["sga"] = "Old Irish", ["sgb"] = "Mag-Anchi Ayta", ["sgc"] = "Kipsigis", ["sgd"] = "Surigaonon", ["sge"] = "Segai", ["sgg"] = "Swiss-German Sign Language", ["sgh"] = "Shughni", ["sgi"] = "Suga", ["sgk"] = "Sangkong", ["sgm"] = "Singa", ["sgp"] = "Singpho", ["sgr"] = "Sangisari", ["sgs"] = "Samogitian", ["sgt"] = "Brokpake", ["sgu"] = "Salas", ["sgw"] = "Sebat Bet Gurage", ["sgx"] = "Sierra Leone Sign Language", ["sgy"] = "Sanglechi", ["sgz"] = "Sursurunga", ["sh"] = "Serbo-Croatian", ["sha"] = "Shall-Zwall", ["shb"] = "Ninam", ["shc"] = "Sonde", ["shd"] = "Kundal Shahi", ["she"] = "Sheko", ["shg"] = "Shua", ["shh"] = "Shoshone", ["shi"] = "Tashelhit", ["shj"] = "Shatt", ["shk"] = "Shilluk", ["shl"] = "Shendu", ["shm"] = "Shahrudi", ["shn"] = "Shan", ["sho"] = "Shanga", ["shp"] = "Shipibo-Conibo", ["shq"] = "Sala", ["shr"] = "Shi", ["shs"] = "Shuswap", ["sht"] = "Shasta", ["shu"] = "Chadian Arabic", ["shv"] = "Shehri", ["shw"] = "Shwai", ["shx"] = "She", ["shy"] = "Tachawit", ["shz"] = "Syenara Senoufo", ["si"] = "Sinhalese", ["sia"] = "Akkala Sami", ["sib"] = "Sebop", ["sid"] = "Sidamo", ["sie"] = "Simaa", ["sif"] = "Siamou", ["sig"] = "Paasaal", ["sih"] = "Zire", ["sii"] = "Shom Peng", ["sij"] = "Numbami", ["sik"] = "Sikiana", ["sil"] = "Tumulung Sisaala", ["sim"] = "Seim", ["sio-pro"] = "Proto-Siouan", ["sip"] = "Sikkimese", ["siq"] = "Sonia", ["sir"] = "Siri", ["sis"] = "Siuslaw", ["sit-bok"] = "Bokar", ["sit-cha"] = "Chairel", ["sit-gkh"] = "Gokhy", ["sit-hrs-pro"] = "Proto-Hrusish", ["sit-jap"] = "Japhug", ["sit-kha-pro"] = "Proto-Kham", ["sit-liz"] = "Lizu", ["sit-luu-pro"] = "Proto-Luish", ["sit-mor"] = "Moran", ["sit-prn"] = "Puiron", ["sit-pro"] = "Proto-Sino-Tibetan", ["sit-sit"] = "Situ", ["sit-tan-pro"] = "Proto-Tani", ["sit-tgm"] = "Tangam", ["sit-tos"] = "Tosu", ["sit-tsh"] = "Tshobdun", ["sit-zbu"] = "Zbu", ["siu"] = "Sinagen", ["siv"] = "Sumariup", ["siw"] = "Siwai", ["six"] = "Sumau", ["siy"] = "Sivandi", ["siz"] = "Siwi", ["sja"] = "Epena", ["sjb"] = "Sajau Basap", ["sjd"] = "Kildin Sami", ["sje"] = "Pite Sami", ["sjg"] = "Assangori", ["sjk"] = "Kemi Sami", ["sjl"] = "Miji", ["sjm"] = "Mapun", ["sjn"] = "Sindarin", ["sjo"] = "Xibe", ["sjp"] = "Surjapuri", ["sjr"] = "Siar-Lak", ["sjs"] = "Senhaja De Srair", ["sjt"] = "Ter Sami", ["sju"] = "Ume Sami", ["sjw"] = "Shawnee", ["sk"] = "Slovak", ["ska"] = "Skagit", ["skb"] = "Saek", ["skc"] = "Ma Manda", ["skd"] = "Southern Sierra Miwok", ["ske"] = "Ske", ["skf"] = "Sakirabiá", ["skh"] = "Sikule", ["ski"] = "Sika", ["skj"] = "Seke", ["skk"] = "Sok", ["skm"] = "Sakam", ["skn"] = "Kolibugan Subanon", ["sko"] = "Seko Tengah", ["skp"] = "Sekapan", ["skq"] = "Sininkere", ["skr"] = "Saraiki", ["sks"] = "Maia", ["skt"] = "Sakata", ["sku"] = "Sakao", ["skv"] = "Skou", ["skw"] = "Skepi Creole Dutch", ["skx"] = "Seko Padang", ["sky"] = "Sikaiana", ["skz"] = "Sekar", ["sl"] = "Slovene", ["sla-pro"] = "Proto-Slavic", ["slc"] = "Saliba (Colombia)", ["sld"] = "Sissala", ["sle"] = "Sholaga", ["slf"] = "Swiss-Italian Sign Language", ["slg"] = "Selungai Murut", ["slh"] = "Southern Puget Sound Salish", ["slj"] = "Salumá", ["sll"] = "Salt-Yui", ["slm"] = "Pangutaran Sama", ["sln"] = "Salinan", ["slp"] = "Lamaholot", ["slq"] = "Salchuq", ["slr"] = "Salar", ["sls"] = "Singapore Sign Language", ["slt"] = "Sila", ["slu"] = "Selaru", ["slw"] = "Sialum", ["slx"] = "Salampasu", ["sly"] = "Selayar", ["slz"] = "Ma'ya", ["sm"] = "Samoan", ["sma"] = "Southern Sami", ["smb"] = "Simbari", ["smc"] = "Som", ["smd"] = "Sama", ["smf"] = "Auwe", ["smg"] = "Simbali", ["smh"] = "Samei", ["smi-pro"] = "Proto-Samic", ["smj"] = "Lule Sami", ["smk"] = "Bolinao", ["sml"] = "Central Sama", ["smm"] = "Musasa", ["smn"] = "Inari Sami", ["smp"] = "Samaritan Hebrew", ["smq"] = "Samo", ["smr"] = "Simeulue", ["sms"] = "Skolt Sami", ["smt"] = "Simte", ["smu"] = "Somray", ["smv"] = "Samvedi", ["smw"] = "Sumbawa", ["smx"] = "Samba", ["smy"] = "Semnani", ["smz"] = "Simeku", ["sn"] = "Shona", ["snb"] = "Sebuyau", ["snc"] = "Sinaugoro", ["sne"] = "Bau Bidayuh", ["snf"] = "Noon", ["sng"] = "Sanga (Congo)", ["sni"] = "Sensi", ["snj"] = "Riverain Sango", ["snk"] = "Soninke", ["snl"] = "Sangil", ["snm"] = "Southern Ma'di", ["snn"] = "Siona", ["sno"] = "Snohomish", ["snp"] = "Siane", ["snq"] = "Sangu (Gabon)", ["snr"] = "Sihan", ["sns"] = "Nahavaq", ["snu"] = "Senggi", ["snv"] = "Sa'ban", ["snw"] = "Selee", ["snx"] = "Sam", ["sny"] = "Saniyo-Hiyewe", ["snz"] = "Kou", ["so"] = "Somali", ["soa"] = "Thai Song", ["sob"] = "Sobei", ["soc"] = "Soko", ["sod"] = "Songoora", ["soe"] = "Songomeno", ["sog"] = "Sogdian", ["soh"] = "Aka (Sudan)", ["soi"] = "Sonha", ["sok"] = "Sokoro", ["sol"] = "Solos", ["son-pro"] = "Proto-Songhay", ["soo"] = "Nsong", ["sop"] = "Songe", ["soq"] = "Kanasi", ["sor"] = "Somrai", ["sos"] = "Seenku", ["sou"] = "Southern Thai", ["sov"] = "Sonsorolese", ["sow"] = "Sowanda", ["sox"] = "Swo", ["soy"] = "Miyobe", ["soz"] = "Temi", ["spb"] = "Sepa (Indonesia)", ["spc"] = "Sapé", ["spd"] = "Saep", ["spe"] = "Sepa (New Guinea)", ["spg"] = "Sian", ["spi"] = "Saponi", ["spk"] = "Sengo", ["spl"] = "Selepet", ["spm"] = "Sepen", ["spn"] = "Sanapaná", ["spo"] = "Spokane", ["spp"] = "Supyire", ["spr"] = "Saparua", ["sps"] = "Saposa", ["spt"] = "Spiti Bhoti", ["spu"] = "Sapuan", ["spv"] = "Sambalpuri", ["spx"] = "South Picene", ["spy"] = "Sabaot", ["sq"] = "Albanian", ["sqa"] = "Shama-Sambuga", ["sqh"] = "Shau", ["sqj-pro"] = "Proto-Albanian", ["sqk"] = "Albanian Sign Language", ["sqm"] = "Suma", ["sqn"] = "Susquehannock", ["sqo"] = "Sorkhei", ["sqq"] = "Sou", ["sqr"] = "Siculo-Arabic", ["sqs"] = "Sri Lankan Sign Language", ["sqt"] = "Soqotri", ["squ"] = "Squamish", ["sra"] = "Saruga", ["srb"] = "Sora", ["sre"] = "Sara", ["srf"] = "Nafi", ["srg"] = "Sulod", ["srh"] = "Sarikoli", ["sri"] = "Siriano", ["srk"] = "Serudung Murut", ["srl"] = "Isirawa", ["srm"] = "Saramaccan", ["srn"] = "Sranan Tongo", ["srq"] = "Sirionó", ["srr"] = "Serer", ["srs"] = "Sarcee", ["srt"] = "Sauri", ["sru"] = "Suruí", ["srv"] = "Waray Sorsogon", ["srw"] = "Serua", ["srx"] = "Sirmauri", ["sry"] = "Sera", ["srz"] = "Shahmirzadi", ["ss"] = "Swazi", ["ssa-klk-pro"] = "Proto-Kuliak", ["ssa-kom-pro"] = "Proto-Koman", ["ssa-pro"] = "Proto-Nilo-Saharan", ["ssb"] = "Southern Sama", ["ssc"] = "Suba-Simbiti", ["ssd"] = "Siroi", ["sse"] = "Balangingi", ["ssf"] = "Thao", ["ssg"] = "Seimat", ["ssh"] = "Shihhi Arabic", ["ssi"] = "Sansi", ["ssj"] = "Sausi", ["ssk"] = "Sunam", ["ssl"] = "Western Sisaala", ["ssm"] = "Semnam", ["sso"] = "Sissano", ["ssp"] = "Spanish Sign Language", ["ssq"] = "So'a", ["ssr"] = "Swiss-French Sign Language", ["sss"] = "Sô", ["sst"] = "Sinasina", ["ssu"] = "Susuami", ["ssv"] = "Shark Bay", ["ssx"] = "Samberigi", ["ssy"] = "Saho", ["ssz"] = "Sengseng", ["st"] = "Sotho", ["stb"] = "Northern Subanen", ["std"] = "Sentinelese", ["ste"] = "Liana-Seti", ["stf"] = "Seta", ["stg"] = "Trieng", ["sth"] = "Shelta", ["sti"] = "Bulo Stieng", ["stj"] = "Matya Samo", ["stk"] = "Arammba", ["stm"] = "Setaman", ["stn"] = "Owa", ["sto"] = "Stoney", ["stp"] = "Southeastern Tepehuan", ["stq"] = "Saterland Frisian", ["str"] = "Saanich", ["sts"] = "Shumashti", ["stt"] = "Budeh Stieng", ["stu"] = "Samtao", ["stv"] = "Silt'e", ["stw"] = "Satawalese", ["sty"] = "Siberian Tatar", ["su"] = "Sundanese", ["sua"] = "Sulka", ["sub"] = "Suku", ["suc"] = "Western Subanon", ["sue"] = "Suena", ["sug"] = "Suganga", ["sui"] = "Suki", ["suk"] = "Sukuma", ["suq"] = "Suri", ["sur"] = "Mwaghavul", ["sus"] = "Susu", ["sut"] = "Subtiaba", ["suv"] = "Sulung", ["suw"] = "Sumbwa", ["sux"] = "Sumerian", ["suy"] = "Suyá", ["suz"] = "Sunwar", ["sv"] = "Swedish", ["sva"] = "Svan", ["svb"] = "Ulau-Suain", ["svc"] = "Vincentian Creole English", ["sve"] = "Serili", ["svk"] = "Slovakian Sign Language", ["svm"] = "Slavomolisano", ["svs"] = "Savosavo", ["svx"] = "Skalvian", ["sw"] = "Swahili", ["swb"] = "Maore Comorian", ["swf"] = "Sere", ["swg"] = "Swabian", ["swi"] = "Sui", ["swj"] = "Sira", ["swl"] = "Swedish Sign Language", ["swm"] = "Samosa", ["swn"] = "Sokna", ["swo"] = "Shanenawa", ["swp"] = "Suau", ["swq"] = "Sharwa", ["swr"] = "Saweru", ["sws"] = "Seluwasan", ["swt"] = "Sawila", ["swu"] = "Suwawa", ["sww"] = "Sowa", ["swx"] = "Suruahá", ["swy"] = "Sarua", ["sxb"] = "Suba", ["sxc"] = "Sicanian", ["sxe"] = "Sighu", ["sxg"] = "Shixing", ["sxk"] = "Southern Kalapuya", ["sxl"] = "Selonian", ["sxm"] = "Samre", ["sxn"] = "Sangir", ["sxo"] = "Sorothaptic", ["sxr"] = "Saaroa", ["sxs"] = "Sasaru", ["sxw"] = "Saxwe Gbe", ["sya"] = "Siang", ["syb"] = "Central Subanen", ["syc"] = "Classical Syriac", ["syd-fne"] = "Forest Nenets", ["syd-pro"] = "Proto-Samoyedic", ["syi"] = "Seki", ["syk"] = "Sukur", ["syl"] = "Sylheti", ["sym"] = "Maya Samo", ["syn"] = "Senaya", ["syo"] = "Suoy", ["sys"] = "Sinyar", ["syw"] = "Kagate", ["syx"] = "Osamayi", ["syy"] = "Al-Sayyid Bedouin Sign Language", ["sza"] = "Semelai", ["szb"] = "Ngalum", ["szc"] = "Semaq Beri", ["szd"] = "Seru", ["sze"] = "Seze", ["szg"] = "Sengele", ["szl"] = "Silesian", ["szn"] = "Sula", ["szp"] = "Suabo", ["szv"] = "Isubu", ["szw"] = "Sawai", ["szy"] = "Sakizaya", ["ta"] = "Tamil", ["taa"] = "Lower Tanana", ["tab"] = "Tabasaran", ["tac"] = "Lowland Tarahumara", ["tad"] = "Tause", ["tae"] = "Tariana", ["taf"] = "Tapirapé", ["tag"] = "Tagoi", ["tai-pro"] = "Proto-Tai", ["tai-swe-pro"] = "Proto-Southwestern Tai", ["taj"] = "Eastern Tamang", ["tak"] = "Tala", ["tal"] = "Tal", ["tan"] = "Tangale", ["tao"] = "Yami", ["tap"] = "Taabwa", ["tar"] = "Central Tarahumara", ["tas"] = "Tây Bồi", ["tau"] = "Upper Tanana", ["tav"] = "Tatuyo", ["taw"] = "Tai", ["tax"] = "Tamki", ["tay"] = "Atayal", ["taz"] = "Tocho", ["tba"] = "Aikanã", ["tbb"] = "Tapeba", ["tbc"] = "Takia", ["tbd"] = "Kaki Ae", ["tbe"] = "Tanimbili", ["tbf"] = "Mandara", ["tbg"] = "North Tairora", ["tbh"] = "Thurawal", ["tbi"] = "Gaam", ["tbj"] = "Tiang", ["tbk"] = "Calamian Tagbanwa", ["tbl"] = "Tboli", ["tbm"] = "Tagbu", ["tbn"] = "Barro Negro Tunebo", ["tbo"] = "Tawala", ["tbp"] = "Taworta", ["tbq-bdg-pro"] = "Proto-Bodo-Garo", ["tbq-kuk-pro"] = "Proto-Kuki-Chin", ["tbq-lal-pro"] = "Proto-Lalo", ["tbq-laz"] = "Laze", ["tbq-lob-pro"] = "Proto-Lolo-Burmese", ["tbq-lol-pro"] = "Proto-Loloish", ["tbq-ngo"] = "Ngochang", ["tbq-plg"] = "Pai-lang", ["tbr"] = "Tumtum", ["tbs"] = "Tanguat", ["tbt"] = "Kitembo", ["tbu"] = "Tubar", ["tbv"] = "Tobo", ["tbw"] = "Tagbanwa", ["tbx"] = "Kapin", ["tby"] = "Tabaru", ["tbz"] = "Ditammari", ["tca"] = "Ticuna", ["tcb"] = "Tanacross", ["tcc"] = "Datooga", ["tcd"] = "Tafi", ["tce"] = "Southern Tutchone", ["tcf"] = "Malinaltepec Tlapanec", ["tcg"] = "Tamagario", ["tch"] = "Turks and Caicos Creole English", ["tci"] = "Wára", ["tck"] = "Tchitchege", ["tcl"] = "Taman (Myanmar)", ["tcm"] = "Tanahmerah", ["tco"] = "Taungyo", ["tcp"] = "Tawr Chin", ["tcq"] = "Kaiy", ["tcs"] = "Torres Strait Creole", ["tct"] = "T'en", ["tcu"] = "Southeastern Tarahumara", ["tcw"] = "Tecpatlán Totonac", ["tcx"] = "Toda", ["tcy"] = "Tulu", ["tcz"] = "Thado Chin", ["tda"] = "Tagdal", ["tdb"] = "Panchpargania", ["tdc"] = "Emberá-Tadó", ["tdd"] = "Tai Nüa", ["tde"] = "Tiranige Diga Dogon", ["tdf"] = "Talieng", ["tdg"] = "Western Tamang", ["tdh"] = "Thulung", ["tdi"] = "Tomadino", ["tdj"] = "Tajio", ["tdk"] = "Tambas", ["tdl"] = "Sur", ["tdm"] = "Taruma", ["tdn"] = "Tondano", ["tdo"] = "Teme", ["tdq"] = "Tita", ["tdr"] = "Todrah", ["tds"] = "Doutai", ["tdt"] = "Tetun Dili", ["tdu"] = "Tempasuk Dusun", ["tdv"] = "Toro", ["tdy"] = "Tadyawan", ["te"] = "Telugu", ["tea"] = "Temiar", ["teb"] = "Tetete", ["tec"] = "Terik", ["ted"] = "Tepo Krumen", ["tee"] = "Huehuetla Tepehua", ["tef"] = "Teressa", ["teg"] = "Teke-Tege", ["teh"] = "Tehuelche", ["tei"] = "Torricelli", ["tek"] = "Ibali Teke", ["tem"] = "Temne", ["ten"] = "Tama (Colombia)", ["teo"] = "Ateso", ["tep"] = "Tepecano", ["teq"] = "Temein", ["ter"] = "Tereno", ["tes"] = "Tengger", ["tet"] = "Tetum", ["teu"] = "Soo", ["tev"] = "Teor", ["tew"] = "Tewa", ["tex"] = "Tennet", ["tey"] = "Tulishi", ["tez"] = "Tetserret", ["tfi"] = "Tofin Gbe", ["tfn"] = "Dena'ina", ["tfo"] = "Tefaro", ["tfr"] = "Teribe", ["tft"] = "Ternate", ["tg"] = "Tajik", ["tga"] = "Sagalla", ["tgb"] = "Tobilung", ["tgc"] = "Tigak", ["tgd"] = "Ciwogai", ["tge"] = "Eastern Gorkha Tamang", ["tgf"] = "Chali", ["tgh"] = "Tobagonian Creole English", ["tgi"] = "Lawunuia", ["tgn"] = "Tandaganon", ["tgo"] = "Sudest", ["tgp"] = "Tangoa", ["tgq"] = "Tring", ["tgr"] = "Tareng", ["tgs"] = "Nume", ["tgt"] = "Central Tagbanwa", ["tgu"] = "Tanggu", ["tgv"] = "Tingui-Boto", ["tgw"] = "Tagwana Senoufo", ["tgx"] = "Tagish", ["tgy"] = "Togoyo", ["th"] = "Thai", ["thc"] = "Tai Hang Tong", ["thd"] = "Kuuk Thaayorre", ["the"] = "Chitwania Tharu", ["thf"] = "Thangmi", ["thh"] = "Northern Tarahumara", ["thi"] = "Tai Long", ["thk"] = "Tharaka", ["thl"] = "Dangaura Tharu", ["thm"] = "Thavung", ["thn"] = "Thachanadan", ["thp"] = "Thompson", ["thq"] = "Kochila Tharu", ["thr"] = "Rana Tharu", ["ths"] = "Thakali", ["tht"] = "Tahltan", ["thu"] = "Thuri", ["thy"] = "Tha", ["ti"] = "Tigrinya", ["tic"] = "Tira", ["tif"] = "Tifal", ["tig"] = "Tigre", ["tih"] = "Timugon Murut", ["tii"] = "Tiene", ["tij"] = "Tilung", ["tik"] = "Tikar", ["til"] = "Tillamook", ["tim"] = "Timbe", ["tin"] = "Tindi", ["tio"] = "Teop", ["tip"] = "Trimuris", ["tiq"] = "Tiéfo", ["tis"] = "Masadiit Itneg", ["tit"] = "Tinigua", ["tiu"] = "Adasen", ["tiv"] = "Tiv", ["tiw"] = "Tiwi", ["tix"] = "Southern Tiwa", ["tiy"] = "Tiruray", ["tiz"] = "Tai Hongjin", ["tja"] = "Tajuasohn", ["tjg"] = "Tunjung", ["tji"] = "Northern Tujia", ["tjl"] = "Tai Laing", ["tjm"] = "Timucua", ["tjn"] = "Tonjon", ["tjs"] = "Southern Tujia", ["tju"] = "Tjurruru", ["tjw"] = "Chaap Wuurong", ["tk"] = "Turkmen", ["tka"] = "Truká", ["tkb"] = "Buksa", ["tkd"] = "Tukudede", ["tke"] = "Takwane", ["tkf"] = "Tukumanféd", ["tkl"] = "Tokelauan", ["tkm"] = "Takelma", ["tkn"] = "Toku-No-Shima", ["tkp"] = "Tikopia", ["tkq"] = "Tee", ["tkr"] = "Tsakhur", ["tks"] = "Ramandi", ["tkt"] = "Kathoriya Tharu", ["tku"] = "Upper Necaxa Totonac", ["tkv"] = "Mur Pano", ["tkw"] = "Teanu", ["tkx"] = "Tangko", ["tkz"] = "Takua", ["tl"] = "Tagalog", ["tla"] = "Southwestern Tepehuan", ["tlb"] = "Tobelo", ["tlc"] = "Misantla Totonac", ["tld"] = "Talaud", ["tlf"] = "Telefol", ["tlg"] = "Tofanma", ["tlh"] = "Klingon", ["tli"] = "Tlingit", ["tlj"] = "Talinga-Bwisi", ["tlk"] = "Taloki", ["tll"] = "Tetela", ["tlm"] = "Tolomako", ["tln"] = "Talondo'", ["tlo"] = "Talodi", ["tlp"] = "Filomena Mata-Coahuitlán Totonac", ["tlq"] = "Tai Loi", ["tlr"] = "Talise", ["tls"] = "Tambotalo", ["tlt"] = "Teluti", ["tlu"] = "Tulehu", ["tlv"] = "Taliabu", ["tlx"] = "Khehek", ["tly"] = "Talysh", ["tma"] = "Tama (Chad)", ["tmb"] = "Avava", ["tmc"] = "Tumak", ["tmd"] = "Haruai", ["tme"] = "Tremembé", ["tmf"] = "Toba-Maskoy", ["tmg"] = "Ternateño", ["tmh"] = "Tuareg", ["tmi"] = "Tutuba", ["tmj"] = "Samarokena", ["tmk"] = "Northwestern Tamang", ["tml"] = "Tamnim Citak", ["tmm"] = "Tai Thanh", ["tmn"] = "Taman (Indonesia)", ["tmo"] = "Temoq", ["tmq"] = "Tumleo", ["tms"] = "Tima", ["tmt"] = "Tasmate", ["tmu"] = "Iau", ["tmv"] = "Motembo", ["tmy"] = "Tami", ["tmz"] = "Tamanaku", ["tn"] = "Tswana", ["tna"] = "Tacana", ["tnb"] = "Western Tunebo", ["tnc"] = "Tanimuca-Retuarã", ["tnd"] = "Angosturas Tunebo", ["tne"] = "Tinoc Kallahan", ["tng"] = "Tobanga", ["tnh"] = "Maiani", ["tni"] = "Tandia", ["tnk"] = "Kwamera", ["tnl"] = "Lenakel", ["tnm"] = "Tabla", ["tnn"] = "North Tanna", ["tno"] = "Toromono", ["tnp"] = "Whitesands", ["tnq"] = "Taíno", ["tnr"] = "Bedik", ["tns"] = "Tenis", ["tnt"] = "Tontemboan", ["tnu"] = "Tay Khang", ["tnv"] = "Tangchangya", ["tnw"] = "Tonsawang", ["tnx"] = "Tanema", ["tny"] = "Tongwe", ["tnz"] = "Ten'edn", ["to"] = "Tongan", ["tob"] = "Toba", ["toc"] = "Coyutla Totonac", ["tod"] = "Toma", ["tof"] = "Gizrra", ["tog"] = "Tonga (Malawi)", ["toh"] = "Tonga (Mozambique)", ["toi"] = "Tonga (Zambia)", ["toj"] = "Tojolabal", ["tok"] = "Toki Pona", ["tol"] = "Tolowa", ["tom"] = "Tombulu", ["too"] = "Xicotepec de Juárez Totonac", ["top"] = "Papantla Totonac", ["toq"] = "Toposa", ["tor"] = "Togbo-Vara Banda", ["tos"] = "Highland Totonac", ["tou"] = "Tho", ["tov"] = "Upper Taromi", ["tow"] = "Jemez", ["tox"] = "Tobian", ["toy"] = "Topoiyo", ["toz"] = "To", ["tpa"] = "Taupota", ["tpc"] = "Azoyú Me'phaa", ["tpe"] = "Tippera", ["tpf"] = "Tarpia", ["tpg"] = "Kula", ["tpi"] = "Tok Pisin", ["tpj"] = "Tapieté", ["tpk"] = "Tupinikin", ["tpl"] = "Tlacoapa Me'phaa", ["tpm"] = "Tampulma", ["tpn"] = "Tupinambá", ["tpo"] = "Tai Pao", ["tpp"] = "Pisaflores Tepehua", ["tpq"] = "Tukpa", ["tpr"] = "Tuparí", ["tpt"] = "Tlachichilco Tepehua", ["tpu"] = "Tampuan", ["tpv"] = "Tanapag", ["tpw"] = "Old Tupi", ["tpx"] = "Acatepec Me'phaa", ["tpy"] = "Trumai", ["tpz"] = "Tinputz", ["tqb"] = "Tembé", ["tql"] = "Lehali", ["tqm"] = "Turumsa", ["tqn"] = "Tenino", ["tqo"] = "Toaripi", ["tqp"] = "Tomoip", ["tqq"] = "Tunni", ["tqr"] = "Torona", ["tqt"] = "Western Totonac", ["tqu"] = "Touo", ["tqw"] = "Tonkawa", ["tr"] = "Turkish", ["tra"] = "Tirahi", ["trb"] = "Terebu", ["trc"] = "Copala Triqui", ["trd"] = "Turi", ["tre"] = "East Tarangan", ["trf"] = "Trinidadian Creole English", ["trg"] = "Lishán Didán", ["trh"] = "Turaka", ["tri"] = "Trió", ["trj"] = "Toram", ["trk-dkh"] = "Dukhan", ["trk-oat"] = "Old Anatolian Turkish", ["trk-pro"] = "Proto-Turkic", ["trl"] = "Traveller Scottish", ["trm"] = "Tregami", ["trn"] = "Trinitario", ["tro"] = "Tarao", ["trp"] = "Kokborok", ["trq"] = "San Martín Itunyoso Triqui", ["trr"] = "Taushiro", ["trs"] = "Chicahuaxtla Triqui", ["trt"] = "Tunggare", ["tru"] = "Turoyo", ["trv"] = "Taroko", ["trw"] = "Torwali", ["trx"] = "Tringgus", ["try"] = "Turung", ["trz"] = "Torá", ["ts"] = "Tsonga", ["tsa"] = "Tsaangi", ["tsb"] = "Tsamai", ["tsc"] = "Tswa", ["tsd"] = "Tsakonian", ["tse"] = "Tunisian Sign Language", ["tsf"] = "Southwestern Tamang", ["tsg"] = "Tausug", ["tsh"] = "Tsuvan", ["tsi"] = "Tsimshian", ["tsj"] = "Tshangla", ["tsl"] = "Ts'ün-Lao", ["tsm"] = "Turkish Sign Language", ["tsp"] = "Northern Toussian", ["tsq"] = "Thai Sign Language", ["tsr"] = "Akei", ["tss"] = "Taiwan Sign Language", ["tsu"] = "Tsou", ["tsv"] = "Tsogo", ["tsw"] = "Tsishingini", ["tsx"] = "Mubami", ["tsy"] = "Tebul Sign Language", ["tt"] = "Tatar", ["tta"] = "Tutelo", ["ttb"] = "Gaa", ["ttc"] = "Tektiteko", ["ttd"] = "Tauade", ["tte"] = "Bwanabwana", ["ttf"] = "Tuotomb", ["ttg"] = "Tutong", ["tth"] = "Upper Ta'oih", ["tti"] = "Tobati", ["ttj"] = "Tooro", ["ttk"] = "Totoro", ["ttl"] = "Totela", ["ttm"] = "Northern Tutchone", ["ttn"] = "Towei", ["tto"] = "Lower Ta'oih", ["ttp"] = "Tombelala", ["ttr"] = "Tera", ["tts"] = "Isan", ["ttt"] = "Tat", ["ttu"] = "Torau", ["ttv"] = "Titan", ["ttw"] = "Long Wat", ["tty"] = "Sikaritai", ["ttz"] = "Tsum", ["tua"] = "Wiarumus", ["tub"] = "Tübatulabal", ["tuc"] = "Mutu", ["tud"] = "Tuxá", ["tue"] = "Tuyuca", ["tuf"] = "Central Tunebo", ["tug"] = "Tunia", ["tuh"] = "Taulil", ["tui"] = "Tupuri", ["tuj"] = "Tugutil", ["tul"] = "Tula", ["tum"] = "Tumbuka", ["tun"] = "Tunica", ["tuo"] = "Tucano", ["tup-gua-pro"] = "Proto-Tupi-Guarani", ["tup-kab"] = "Kabishiana", ["tup-pro"] = "Proto-Tupian", ["tuq"] = "Tedaga", ["tus"] = "Tuscarora", ["tuu"] = "Tututni", ["tuv"] = "Turkana", ["tuw-kkl"] = "Kyakala", ["tuw-pro"] = "Proto-Tungusic", ["tuw-sol"] = "Solon", ["tux"] = "Tuxináwa", ["tuy"] = "Tugen", ["tuz"] = "Turka", ["tva"] = "Vaghua", ["tvd"] = "Tsuvadi", ["tve"] = "Te'un", ["tvk"] = "Southeast Ambrym", ["tvl"] = "Tuvaluan", ["tvm"] = "Tela-Masbuar", ["tvn"] = "Tavoyan", ["tvo"] = "Tidore", ["tvs"] = "Taveta", ["tvt"] = "Tutsa Naga", ["tvu"] = "Tunen", ["tvw"] = "Sedoa", ["tvx"] = "Taivoan", ["tvy"] = "Timor Pidgin", ["twa"] = "Twana", ["twb"] = "Western Tawbuid", ["twc"] = "Teshenawa", ["twe"] = "Teiwa", ["twf"] = "Taos", ["twg"] = "Tereweng", ["twh"] = "Tai Dón", ["twm"] = "Tawang Monpa", ["twn"] = "Twendi", ["two"] = "Tswapong", ["twp"] = "Ere", ["twq"] = "Tasawaq", ["twr"] = "Southwestern Tarahumara", ["twt"] = "Turiwára", ["twu"] = "Termanu", ["tww"] = "Tuwari", ["twy"] = "Tawoyan", ["txa"] = "Tombonuo", ["txb"] = "Tocharian B", ["txc"] = "Tsetsaut", ["txe"] = "Totoli", ["txg"] = "Tangut", ["txh"] = "Thracian", ["txi"] = "Ikpeng", ["txj"] = "Tarjumo", ["txm"] = "Tomini", ["txn"] = "West Tarangan", ["txo"] = "Toto", ["txq"] = "Tii", ["txr"] = "Tartessian", ["txs"] = "Tonsea", ["txt"] = "Citak", ["txu"] = "Kayapó", ["txx"] = "Tatana", ["ty"] = "Tahitian", ["tya"] = "Tauya", ["tye"] = "Kyenga", ["tyh"] = "O'du", ["tyi"] = "Teke-Tsaayi", ["tyj"] = "Tai Do", ["tyl"] = "Thu Lao", ["tyn"] = "Kombai", ["typ"] = "Kuku-Thaypan", ["tyr"] = "Tai Daeng", ["tys"] = "Sapa", ["tyt"] = "Tày Tac", ["tyu"] = "Kua", ["tyv"] = "Tuvan", ["tyx"] = "Teke-Tyee", ["tyz"] = "Tày", ["tza"] = "Tanzanian Sign Language", ["tzh"] = "Tzeltal", ["tzj"] = "Tz'utujil", ["tzl"] = "Talossan", ["tzm"] = "Central Atlas Tamazight", ["tzn"] = "Tugun", ["tzo"] = "Tzotzil", ["tzx"] = "Tabriak", ["uam"] = "Uamué", ["uan"] = "Kuan", ["uar"] = "Tairuma", ["uba"] = "Ubang", ["ubi"] = "Ubi", ["ubl"] = "Buhi'non Bikol", ["ubr"] = "Ubir", ["ubu"] = "Umbu-Ungu", ["uby"] = "Ubykh", ["uda"] = "Uda", ["ude"] = "Udihe", ["udg"] = "Muduga", ["udi"] = "Udi", ["udj"] = "Ujir", ["udl"] = "Uldeme", ["udm"] = "Udmurt", ["udu"] = "Uduk", ["ues"] = "Kioko", ["ufi"] = "Ufim", ["ug"] = "Uyghur", ["uga"] = "Ugaritic", ["ugb"] = "Kuku-Ugbanh", ["uge"] = "Ughele", ["ugn"] = "Ugandan Sign Language", ["ugo"] = "Gong", ["ugy"] = "Uruguayan Sign Language", ["uha"] = "Uhami", ["uhn"] = "Damal", ["uis"] = "Uisai", ["uiv"] = "Iyive", ["uji"] = "Tanjijili", ["uk"] = "Ukrainian", ["uka"] = "Kaburi", ["ukg"] = "Ukuriguma", ["ukh"] = "Ukhwejo", ["ukk"] = "Muak Sa-aak", ["ukl"] = "Ukrainian Sign Language", ["ukp"] = "Ukpe-Bayobiri", ["ukq"] = "Ukwa", ["uks"] = "Kaapor Sign Language", ["uku"] = "Ukue", ["ukw"] = "Ukwuani-Aboh-Ndoni", ["uky"] = "Kuuk Yak", ["ula"] = "Fungwa", ["ulb"] = "Olukumi", ["ulc"] = "Ulch", ["ule"] = "Lule", ["ulf"] = "Afra", ["uli"] = "Ulithian", ["ulk"] = "Meriam", ["ull"] = "Ullatan", ["ulm"] = "Ulumanda'", ["uln"] = "Unserdeutsch", ["ulu"] = "Uma' Lung", ["ulw"] = "Ulwa", ["uma"] = "Umatilla", ["umb"] = "Umbundu", ["umc"] = "Marrucinian", ["umd"] = "Umbindhamu", ["umg"] = "Umbuygamu", ["umi"] = "Ukit", ["umm"] = "Umon", ["umn"] = "Makyan Naga", ["umo"] = "Umotína", ["ump"] = "Umpila", ["umr"] = "Umbugarla", ["ums"] = "Pendau", ["umu"] = "Munsee", ["una"] = "North Watut", ["und"] = "Undetermined", ["und-isa"] = "Isaurian", ["und-kas"] = "Kassite", ["und-mil"] = "Milang", ["und-mmd"] = "Mimi of Decorse", ["und-mmn"] = "Mimi of Nachtigal", ["und-phi"] = "Philistine", ["und-wji"] = "Western Jicaque", ["une"] = "Uneme", ["ung"] = "Ngarinyin", ["unk"] = "Enawené-Nawé", ["unm"] = "Unami", ["unn"] = "Kurnai", ["unr"] = "Mundari", ["unu"] = "Unubahe", ["unx"] = "Munda", ["unz"] = "Unde Kaili", ["uok"] = "Uokha", ["uon"] = "Kulon", ["upi"] = "Umeda", ["upv"] = "Uripiv-Wala-Rano-Atchin", ["ur"] = "Urdu", ["ura"] = "Urarina", ["urb"] = "Urubú-Kaapor", ["urc"] = "Urningangg", ["ure"] = "Uru", ["urf"] = "Uradhi", ["urg"] = "Urigina", ["urh"] = "Urhobo", ["uri"] = "Urim", ["urj-fin-pro"] = "Proto-Finnic", ["urj-koo"] = "Old Komi", ["urj-kuk"] = "Kukkuzi", ["urj-kya"] = "Komi-Yazva", ["urj-mdv-pro"] = "Proto-Mordvinic", ["urj-prm-pro"] = "Proto-Permic", ["urj-pro"] = "Proto-Uralic", ["urj-ugr-pro"] = "Proto-Ugric", ["urk"] = "Urak Lawoi'", ["url"] = "Urali", ["urm"] = "Urapmin", ["urn"] = "Uruangnirin", ["uro"] = "Ura (New Guinea)", ["urp"] = "Uru-Pa-In", ["urr"] = "Lehalurup", ["urt"] = "Urat", ["uru"] = "Urumi", ["urv"] = "Uruava", ["urw"] = "Sop", ["urx"] = "Urimo", ["ury"] = "Orya", ["urz"] = "Uru-Eu-Wau-Wau", ["usa"] = "Usarufa", ["ush"] = "Ushojo", ["usi"] = "Usui", ["usk"] = "Usaghade", ["usp"] = "Uspanteco", ["uss"] = "Saare", ["usu"] = "Uya", ["uta"] = "Otank", ["ute"] = "Ute", ["uth"] = "Hun", ["utp"] = "Aba", ["utr"] = "Etulo", ["utu"] = "Utu", ["uum"] = "Urum", ["uun"] = "Kulon-Pazeh", ["uur"] = "Ura (Vanuatu)", ["uuu"] = "U", ["uve"] = "West Uvean", ["uvh"] = "Uri", ["uvl"] = "Lote", ["uwa"] = "Kuku-Uwanh", ["uya"] = "Doko-Uyanga", ["uz"] = "Uzbek", ["vaa"] = "Vaagri Booli", ["vae"] = "Vale", ["vag"] = "Vagla", ["vah"] = "Varhadi", ["vai"] = "Vai", ["vaj"] = "Sekele", ["val"] = "Vehes", ["vam"] = "Vanimo", ["van"] = "Valman", ["vao"] = "Vao", ["vap"] = "Vaiphei", ["var"] = "Huarijio", ["vas"] = "Vasavi", ["vau"] = "Vanuma", ["vav"] = "Varli", ["vay"] = "Vayu", ["vbb"] = "Southeast Babar", ["vbk"] = "Southwestern Bontoc", ["ve"] = "Venda", ["vec"] = "Venetian", ["ved"] = "Veddah", ["vem"] = "Vemgo-Mabas", ["veo"] = "Ventureño", ["vep"] = "Veps", ["ver"] = "Mom Jango", ["vgr"] = "Vaghri", ["vgt"] = "Flemish Sign Language", ["vi"] = "Vietnamese", ["vic"] = "Virgin Islands Creole", ["vid"] = "Vidunda", ["vif"] = "Vili", ["vig"] = "Viemo", ["vil"] = "Vilela", ["vis"] = "Vishavan", ["vit"] = "Viti", ["viv"] = "Iduna", ["vka"] = "Kariyarra", ["vki"] = "Ija-Zuba", ["vkj"] = "Kujarge", ["vkk"] = "Kaur", ["vkl"] = "Kulisusu", ["vkm"] = "Kamakan", ["vko"] = "Kodeoha", ["vkp"] = "Korlai Creole Portuguese", ["vkt"] = "Tenggarong Kutai Malay", ["vku"] = "Kurrama", ["vlp"] = "Valpei", ["vls"] = "West Flemish", ["vma"] = "Martuthunira", ["vmb"] = "Mbabaram", ["vmc"] = "Juxtlahuaca Mixtec", ["vmd"] = "Mudu Koraga", ["vme"] = "East Masela", ["vmf"] = "East Franconian", ["vmg"] = "Minigir", ["vmh"] = "Maraghei", ["vmi"] = "Miwa", ["vmj"] = "Ixtayutla Mixtec", ["vmk"] = "Makhuwa-Shirima", ["vml"] = "Malgana", ["vmm"] = "Mitlatongo Mixtec", ["vmp"] = "Soyaltepec Mazatec", ["vmq"] = "Soyaltepec Mixtec", ["vmr"] = "Marenje", ["vmu"] = "Muluridyi", ["vmv"] = "Valley Maidu", ["vmw"] = "Makhuwa", ["vmx"] = "Tamazola Mixtec", ["vmy"] = "Ayautla Mazatec", ["vmz"] = "Mazatlán Mazatec", ["vnk"] = "Lovono", ["vnm"] = "Neve'ei", ["vnp"] = "Vunapu", ["vo"] = "Volapük", ["vor"] = "Voro", ["vot"] = "Votic", ["vra"] = "Vera'a", ["vro"] = "Võro", ["vrs"] = "Varisi", ["vrt"] = "Banam Bay", ["vsi"] = "Moldova Sign Language", ["vsl"] = "Venezuelan Sign Language", ["vsv"] = "Valencian Sign Language", ["vto"] = "Vitou", ["vum"] = "Vumbu", ["vun"] = "Vunjo", ["vut"] = "Vute", ["vwa"] = "Awa (China)", ["wa"] = "Walloon", ["waa"] = "Walla Walla", ["wab"] = "Wab", ["wac"] = "Wasco-Wishram", ["wad"] = "Wandamen", ["waf"] = "Wakoná", ["wag"] = "Wa'ema", ["wah"] = "Watubela", ["waj"] = "Waffa", ["wal"] = "Wolaytta", ["wam"] = "Massachusett", ["wan"] = "Wan", ["wao"] = "Wappo", ["wap"] = "Wapishana", ["waq"] = "Wageman", ["war"] = "Waray-Waray", ["was"] = "Washo", ["wat"] = "Kaninuwa", ["wau"] = "Wauja", ["wav"] = "Waka", ["waw"] = "Waiwai", ["wax"] = "Watam", ["way"] = "Wayana", ["waz"] = "Wampur", ["wba"] = "Warao", ["wbb"] = "Wabo", ["wbe"] = "Waritai", ["wbf"] = "Wara", ["wbh"] = "Wanda", ["wbi"] = "Wanji", ["wbj"] = "Alagwa", ["wbk"] = "Waigali", ["wbl"] = "Wakhi", ["wbm"] = "Wa", ["wbp"] = "Warlpiri", ["wbq"] = "Waddar", ["wbr"] = "Wagdi", ["wbt"] = "Wanman", ["wbv"] = "Wajarri", ["wbw"] = "Woi", ["wca"] = "Yanomámi", ["wci"] = "Waci Gbe", ["wdd"] = "Wandji", ["wdg"] = "Wadaginam", ["wdj"] = "Wadjiginy", ["wdt"] = "Wendat", ["wdu"] = "Wadjigu", ["wdy"] = "Wadjabangayi", ["wea"] = "Wewaw", ["wec"] = "Wè Western", ["wed"] = "Wedau", ["weh"] = "Weh", ["wei"] = "Kiunum", ["wem"] = "Weme Gbe", ["weo"] = "Wemale", ["wer"] = "Weri", ["wes"] = "Cameroon Pidgin", ["wet"] = "Perai", ["weu"] = "Welaung", ["wew"] = "Weyewa", ["wfg"] = "Yafi", ["wga"] = "Wagaya", ["wgb"] = "Wagawaga", ["wgg"] = "Wangganguru", ["wgi"] = "Wahgi", ["wgo"] = "Waigeo", ["wgu"] = "Wirangu", ["wgy"] = "Warrgamay", ["wha"] = "Manusela", ["whg"] = "North Wahgi", ["whk"] = "Wahau Kenyah", ["whu"] = "Wahau Kayan", ["wib"] = "Southern Toussian", ["wic"] = "Wichita", ["wie"] = "Wik-Epa", ["wif"] = "Wik-Keyangan", ["wig"] = "Wik-Ngathana", ["wih"] = "Wik-Me'anha", ["wii"] = "Minidien", ["wij"] = "Wik-Iiyanh", ["wik"] = "Wikalkan", ["wil"] = "Wilawila", ["wim"] = "Wik-Mungkan", ["win"] = "Winnebago", ["wir"] = "Wiraféd", ["wiu"] = "Wiru", ["wiv"] = "Muduapa", ["wiy"] = "Wiyot", ["wja"] = "Waja", ["wji"] = "Warji", ["wka"] = "Kw'adza", ["wkb"] = "Kumbaran", ["wkd"] = "Mo", ["wkl"] = "Kalanadi", ["wku"] = "Kunduvadi", ["wkw"] = "Wakawaka", ["wky"] = "Wangkayutyuru", ["wla"] = "Walio", ["wlc"] = "Mwali Comorian", ["wle"] = "Wolane", ["wlg"] = "Kunbarlang", ["wli"] = "Waioli", ["wlk"] = "Wailaki", ["wll"] = "Wali (Sudan)", ["wlm"] = "Middle Welsh", ["wlo"] = "Wolio", ["wlr"] = "Wailapa", ["wls"] = "Wallisian", ["wlu"] = "Wuliwuli", ["wlv"] = "Wichí Lhamtés Vejoz", ["wlw"] = "Walak", ["wlx"] = "Wali (Ghana)", ["wly"] = "Waling", ["wmb"] = "Wambaya", ["wmc"] = "Wamas", ["wmd"] = "Mamaindé", ["wme"] = "Wambule", ["wmh"] = "Waima'a", ["wmi"] = "Wamin", ["wmm"] = "Maiwa (Indonesia)", ["wmn"] = "Waamwang", ["wmo"] = "Wam", ["wms"] = "Wambon", ["wmt"] = "Walmajarri", ["wmw"] = "Mwani", ["wmx"] = "Womo", ["wnb"] = "Wanambre", ["wnc"] = "Wantoat", ["wnd"] = "Wandarang", ["wne"] = "Waneci", ["wng"] = "Wanggom", ["wni"] = "Ndzwani Comorian", ["wnk"] = "Wanukaka", ["wnm"] = "Wanggamala", ["wno"] = "Wano", ["wnp"] = "Wanap", ["wnu"] = "Usan", ["wnw"] = "Wintu", ["wny"] = "Wanyi", ["wo"] = "Wolof", ["woa"] = "Tyaraity", ["wob"] = "Wè Northern", ["woc"] = "Wogeo", ["wod"] = "Wolani", ["woe"] = "Woleaian", ["wog"] = "Wogamusin", ["woi"] = "Kamang", ["wok"] = "Longto", ["wom"] = "Perema", ["won"] = "Wongo", ["woo"] = "Manombai", ["wor"] = "Woria", ["wos"] = "Hanga Hundi", ["wow"] = "Wawonii", ["wpc"] = "Wirö", ["wra"] = "Warapu", ["wrb"] = "Warluwara", ["wrg"] = "Warungu", ["wrh"] = "Wiradhuri", ["wri"] = "Wariyangga", ["wrk"] = "Garawa", ["wrl"] = "Warlmanpa", ["wrm"] = "Warumungu", ["wrn"] = "Warnang", ["wro"] = "Worora", ["wrp"] = "Waropen", ["wrr"] = "Wardaman", ["wrs"] = "Waris", ["wru"] = "Waru", ["wrv"] = "Waruna", ["wrw"] = "Gugu Warra", ["wrx"] = "Wae Rana", ["wrz"] = "Warray", ["wsa"] = "Warembori", ["wsi"] = "Wusi", ["wsk"] = "Waskia", ["wsr"] = "Owenia", ["wss"] = "Wasa", ["wsu"] = "Wasu", ["wsv"] = "Wotapuri-Katarqalai", ["wtf"] = "Watiwa", ["wth"] = "Wathaurong", ["wti"] = "Berta", ["wtk"] = "Watakataui", ["wtm"] = "Mewati", ["wtw"] = "Wotu", ["wua"] = "Wikngenchera", ["wub"] = "Wunambal", ["wud"] = "Wudu", ["wuh"] = "Wutunhua", ["wul"] = "Silimo", ["wum"] = "Wumbvu", ["wun"] = "Bungu", ["wur"] = "Wurrugu", ["wut"] = "Wutung", ["wuu"] = "Wu", ["wuv"] = "Wuvulu-Aua", ["wux"] = "Wulna", ["wuy"] = "Wauyai", ["wwa"] = "Waama", ["wwo"] = "Dorig", ["wwr"] = "Warrwa", ["www"] = "Wawa", ["wxa"] = "Waxianghua", ["wxw"] = "Wardandi", ["wya"] = "Wyandot", ["wyb"] = "Ngiyambaa", ["wyi"] = "Woiwurrung", ["wym"] = "Vilamovian", ["wyr"] = "Wayoró", ["wyy"] = "Western Fijian", ["xaa"] = "Andalusian Arabic", ["xab"] = "Sambe", ["xac"] = "Kachari", ["xad"] = "Adai", ["xae"] = "Aequian", ["xag"] = "Aghwan", ["xai"] = "Kaimbé", ["xaj"] = "Ararandewára", ["xak"] = "Maku", ["xal"] = "Kalmyk", ["xam"] = "ǀXam", ["xan"] = "Xamtanga", ["xao"] = "Khao", ["xap"] = "Apalachee", ["xaq"] = "Aquitanian", ["xar"] = "Karami", ["xas"] = "Kamassian", ["xat"] = "Katawixi", ["xau"] = "Kauwera", ["xav"] = "Xavante", ["xaw"] = "Kawaiisu", ["xay"] = "Kayan Mahakam", ["xbb"] = "Lower Burdekin", ["xbc"] = "Bactrian", ["xbd"] = "Bindal", ["xbe"] = "Bigambal", ["xbg"] = "Bunganditj", ["xbi"] = "Kombio", ["xbj"] = "Birrpayi", ["xbm"] = "Middle Breton", ["xbn"] = "Kenaboi", ["xbo"] = "Bulgar", ["xbp"] = "Bibbulman", ["xbr"] = "Kambera", ["xbw"] = "Kambiwá", ["xby"] = "Butchulla", ["xcb"] = "Cumbric", ["xcc"] = "Camunic", ["xce"] = "Celtiberian", ["xch"] = "Chemakum", ["xcl"] = "Old Armenian", ["xcm"] = "Comecrudo", ["xcn"] = "Cotoname", ["xco"] = "Khwarezmian", ["xcr"] = "Carian", ["xct"] = "Classical Tibetan", ["xcu"] = "Curonian", ["xcv"] = "Chuvan", ["xcw"] = "Coahuilteco", ["xcy"] = "Cayuse", ["xda"] = "Darkinjung", ["xdc"] = "Dacian", ["xdk"] = "Dharug", ["xdm"] = "Edomite", ["xdy"] = "Malayic Dayak", ["xeb"] = "Eblaite", ["xed"] = "Hdi", ["xeg"] = "ǁXegwi", ["xel"] = "Kelo", ["xem"] = "Kembayan", ["xep"] = "Epi-Olmec", ["xer"] = "Xerénte", ["xes"] = "Kesawai", ["xet"] = "Xetá", ["xeu"] = "Keoru-Ahia", ["xfa"] = "Faliscan", ["xga"] = "Galatian", ["xgb"] = "Gbin", ["xgd"] = "Gudang", ["xgf"] = "Gabrielino-Fernandeño", ["xgg"] = "Goreng", ["xgi"] = "Garingbal", ["xgl"] = "Galindan", ["xgm"] = "Darumbal", ["xgn-mgl"] = "Mongghul", ["xgn-mgr"] = "Mangghuer", ["xgn-pro"] = "Proto-Mongolic", ["xgn-rou"] = "Rouran", ["xgr"] = "Garza", ["xgu"] = "Unggumi", ["xgw"] = "Guwa", ["xh"] = "Xhosa", ["xha"] = "Harami", ["xhc"] = "Hunnic", ["xhd"] = "Hadrami", ["xhe"] = "Khetrani", ["xhm"] = "Middle Khmer", ["xhr"] = "Hernican", ["xht"] = "Hattic", ["xhu"] = "Hurrian", ["xhv"] = "Khua", ["xib"] = "Iberian", ["xii"] = "Xiri", ["xil"] = "Illyrian", ["xin"] = "Xinca", ["xir"] = "Xiriâna", ["xis"] = "Kisan", ["xiv"] = "Indus Valley Language", ["xiy"] = "Xipaya", ["xjb"] = "Minjungbal", ["xka"] = "Kalkoti", ["xkb"] = "Manigri-Kambolé Ede Nago", ["xkc"] = "Khoini", ["xkd"] = "Mendalam Kayan", ["xke"] = "Kereho", ["xkf"] = "Khengkha", ["xkg"] = "Kagoro", ["xki"] = "Kenyan Sign Language", ["xkj"] = "Kajali", ["xkk"] = "Kaco'", ["xkl"] = "Bakung", ["xkn"] = "Kayan River Kayan", ["xko"] = "Kiorr", ["xkp"] = "Kabatei", ["xkq"] = "Koroni", ["xkr"] = "Xakriabá", ["xks"] = "Kumbewaha", ["xkt"] = "Kantosi", ["xku"] = "Kaamba", ["xkv"] = "Kgalagadi", ["xkw"] = "Kembra", ["xkx"] = "Karore", ["xky"] = "Uma' Lasan", ["xkz"] = "Kurtöp", ["xla"] = "Kamula", ["xlb"] = "Loup B", ["xlc"] = "Lycian", ["xld"] = "Lydian", ["xle"] = "Lemnian", ["xlg"] = "Ancient Ligurian", ["xli"] = "Liburnian", ["xlo"] = "Loup A", ["xlp"] = "Lepontic", ["xls"] = "Lusitanian", ["xlu"] = "Luwian", ["xly"] = "Elymian", ["xmb"] = "Mbonga", ["xmc"] = "Makhuwa-Marrevone", ["xmd"] = "Mbudum", ["xme-ker"] = "Kermanic", ["xme-kls"] = "Kalasuri", ["xme-klt"] = "Kilit", ["xme-mid"] = "Middle Median", ["xme-old"] = "Old Median", ["xme-ott"] = "Old Tati", ["xme-taf"] = "Tafreshi", ["xme-ttc-pro"] = "Proto-Tatic", ["xmf"] = "Mingrelian", ["xmg"] = "Mengaka", ["xmh"] = "Kugu-Muminh", ["xmj"] = "Majera", ["xmk"] = "Ancient Macedonian", ["xml"] = "Malaysian Sign Language", ["xmm"] = "Manado Malay", ["xmo"] = "Morerebi", ["xmp"] = "Kuku-Mu'inh", ["xmq"] = "Kuku-Mangk", ["xmr"] = "Meroitic", ["xms"] = "Moroccan Sign Language", ["xmt"] = "Matbat", ["xmu"] = "Kamu", ["xmx"] = "Maden", ["xmy"] = "Mayaguduna", ["xmz"] = "Mori Bawah", ["xna"] = "Ancient North Arabian", ["xnb"] = "Kanakanabu", ["xnd-pro"] = "Proto-Na-Dene", ["xng"] = "Middle Mongol", ["xnh"] = "Kuanhua", ["xni"] = "Ngarigu", ["xnk"] = "Nganakarti", ["xnn"] = "Northern Kankanay", ["xnr"] = "Kangri", ["xns"] = "Kanashi", ["xnt"] = "Narragansett", ["xnu"] = "Nukunul", ["xny"] = "Nyiyaparli", ["xoc"] = "O'chi'chi'", ["xod"] = "Kokoda", ["xog"] = "Soga", ["xoi"] = "Kominimung", ["xok"] = "Xokleng", ["xom"] = "Komo", ["xon"] = "Konkomba", ["xoo"] = "Xukurú", ["xop"] = "Kopar", ["xor"] = "Korubo", ["xow"] = "Kowaki", ["xpa"] = "Pirriya", ["xpb"] = "Pyemmairre", ["xpc"] = "Pecheneg", ["xpd"] = "Paredarerme", ["xpe"] = "Liberia Kpelle", ["xpf"] = "Southeast Tasmanian", ["xpg"] = "Phrygian", ["xph"] = "Tyerrernotepanner", ["xpi"] = "Pictish", ["xpj"] = "Mpalitjanh", ["xpk"] = "Kulina", ["xpl"] = "Port Sorell", ["xpm"] = "Pumpokol", ["xpn"] = "Kapinawá", ["xpo"] = "Pochutec", ["xpp"] = "Puyo-Paekche", ["xpq"] = "Mohegan-Pequot", ["xpr"] = "Parthian", ["xps"] = "Pisidian", ["xpu"] = "Punic", ["xpv"] = "Tommeginne", ["xpw"] = "Peerapper", ["xpx"] = "Toogee", ["xpy"] = "Buyeo", ["xpz"] = "Bruny Island", ["xqa"] = "Karakhanid", ["xqt"] = "Qatabanian", ["xra"] = "Krahô", ["xrb"] = "Eastern Karaboro", ["xrd"] = "Gundungurra", ["xre"] = "Kreye", ["xrg"] = "Minang", ["xri"] = "Krikati-Timbira", ["xrm"] = "Armazic", ["xrn"] = "Arin", ["xrq"] = "Karranga", ["xrr"] = "Raetic", ["xrt"] = "Aranama-Tamique", ["xru"] = "Marriammu", ["xrw"] = "Karawa", ["xsa"] = "Sabaean", ["xsb"] = "Sambali", ["xsc-pro"] = "Proto-Scythian", ["xsc-sak-pro"] = "Proto-Saka", ["xsc-skw-pro"] = "Proto-Saka-Wakhi", ["xsd"] = "Sidetic", ["xse"] = "Sempan", ["xsh"] = "Shamang", ["xsi"] = "Sio", ["xsj"] = "Subi", ["xsl"] = "South Slavey", ["xsm"] = "Kasem", ["xsn"] = "Sanga (Nigeria)", ["xso"] = "Solano", ["xsp"] = "Silopi", ["xsq"] = "Makhuwa-Saka", ["xsr"] = "Sherpa", ["xss"] = "Assan", ["xsu"] = "Sanumá", ["xsv"] = "Sudovian", ["xsy"] = "Saisiyat", ["xta"] = "Alcozauca Mixtec", ["xtb"] = "Chazumba Mixtec", ["xtc"] = "Kadugli", ["xtd"] = "Diuxi-Tilantongo Mixtec", ["xte"] = "Ketengban", ["xth"] = "Yitha Yitha", ["xti"] = "Sinicahua Mixtec", ["xtj"] = "San Juan Teita Mixtec", ["xtl"] = "Tijaltepec Mixtec", ["xtm"] = "Magdalena Peñasco Mixtec", ["xtn"] = "Northern Tlaxiaco Mixtec", ["xto"] = "Tocharian A", ["xtp"] = "San Miguel Piedras Mixtec", ["xtq"] = "Tumshuqese", ["xtr"] = "Early Tripuri", ["xts"] = "Sindihui Mixtec", ["xtt"] = "Tacahua Mixtec", ["xtu"] = "Cuyamecalco Mixtec", ["xtv"] = "Thawa", ["xtw"] = "Tawandê", ["xty"] = "Yoloxochitl Mixtec", ["xtz"] = "Tasmanian", ["xua"] = "Alu Kurumba", ["xub"] = "Betta Kurumba", ["xud"] = "Umiida", ["xug"] = "Kunigami", ["xuj"] = "Jennu Kurumba", ["xul"] = "Ngunawal", ["xum"] = "Umbrian", ["xun"] = "Unggaranggu", ["xuo"] = "Kuo", ["xup"] = "Upper Umpqua", ["xur"] = "Urartian", ["xut"] = "Kuthant", ["xuu"] = "Khwe", ["xve"] = "Venetic", ["xvn"] = "Vandalic", ["xvo"] = "Volscian", ["xvs"] = "Vestinian", ["xwa"] = "Kwaza", ["xwc"] = "Woccon", ["xwd"] = "Wadi Wadi", ["xwe"] = "Xwela Gbe", ["xwg"] = "Kwegu", ["xwj"] = "Wajuk", ["xwk"] = "Wangkumara", ["xwl"] = "Western Xwla Gbe", ["xwo"] = "Written Oirat", ["xwr"] = "Kwerba Mamberamo", ["xww"] = "Wemba-Wemba", ["xxb"] = "Boro", ["xxk"] = "Ke'o", ["xxm"] = "Minkin", ["xxr"] = "Koropó", ["xxt"] = "Tambora", ["xya"] = "Yaygir", ["xyb"] = "Yandjibara", ["xyl"] = "Yalakalore", ["xyt"] = "Mayi-Thakurti", ["xyy"] = "Yorta Yorta", ["xzh"] = "Zhang-Zhung", ["xzm"] = "Zemgalian", ["xzp"] = "Ancient Zapotec", ["yaa"] = "Yaminahua", ["yab"] = "Yuhup", ["yac"] = "Pass Valley Yali", ["yad"] = "Yagua", ["yae"] = "Pumé", ["yaf"] = "Yaka", ["yag"] = "Yámana", ["yah"] = "Yazghulami", ["yai"] = "Yagnobi", ["yaj"] = "Banda-Yangere", ["yak"] = "Yakima", ["yal"] = "Yalunka", ["yam"] = "Yamba", ["yan"] = "Mayangna", ["yao"] = "Yao", ["yap"] = "Yapese", ["yaq"] = "Yaqui", ["yar"] = "Yabarana", ["yas"] = "Gunu", ["yat"] = "Yambeta", ["yau"] = "Yuwana", ["yav"] = "Yangben", ["yaw"] = "Yawalapití", ["yay"] = "Agwagwune", ["yaz"] = "Lokaa", ["yba"] = "Yala", ["ybb"] = "Yemba", ["ybe"] = "Western Yugur", ["ybh"] = "Yakkha", ["ybi"] = "Yamphu", ["ybj"] = "Hasha", ["ybk"] = "Bokha", ["ybl"] = "Yukuben", ["ybm"] = "Yaben", ["ybn"] = "Yabaâna", ["ybo"] = "Yabong", ["ybx"] = "Yawiyo", ["yby"] = "Yaweyuha", ["ych"] = "Chesu", ["ycl"] = "Lolopo", ["ycn"] = "Yucuna", ["ycp"] = "Chepya", ["ycr"] = "Yilan Creole", ["yda"] = "Yanda", ["yde"] = "Yangum Dey", ["ydg"] = "Yidgha", ["ydk"] = "Yoidik", ["yea"] = "Ravula", ["yec"] = "Yeniche", ["yee"] = "Yimas", ["yei"] = "Yeni", ["yej"] = "Yevanic", ["yen"] = "Yendang", ["yer"] = "Tarok", ["yes"] = "Yeskwa", ["yet"] = "Yetfa", ["yeu"] = "Yerukula", ["yev"] = "Yapunda", ["yey"] = "Yeyi", ["ygi"] = "Yiningayi", ["ygl"] = "Yangum Gel", ["ygm"] = "Yagomi", ["ygp"] = "Gepo", ["ygr"] = "Yagaria", ["ygs"] = "Yolngu Sign Language", ["ygu"] = "Yugul", ["ygw"] = "Yagwoia", ["yha"] = "Baha", ["yhl"] = "Hlepho Phowa", ["yi"] = "Yiddish", ["yia"] = "Yinggarda", ["yif"] = "Ache", ["yig"] = "Wusa Nasu", ["yii"] = "Yidiny", ["yij"] = "Yindjibarndi", ["yik"] = "Dongshanba Lalo", ["yil"] = "Yindjilandji", ["yim"] = "Yimchungru Naga", ["yin"] = "Yinchia", ["yip"] = "Pholo", ["yiq"] = "Miqie", ["yir"] = "North Awyu", ["yis"] = "Yis", ["yit"] = "Eastern Lalu", ["yiu"] = "Awu", ["yiv"] = "Northern Nisu", ["yix"] = "Axi Yi", ["yiy"] = "Yir-Yoront", ["yiz"] = "Azhe", ["yka"] = "Yakan", ["ykg"] = "Northern Yukaghir", ["ykh"] = "Khamnigan Mongol", ["yki"] = "Yoke", ["ykk"] = "Yakaikeke", ["ykl"] = "Khlula", ["ykm"] = "Kap", ["ykn"] = "Kua-nsi", ["yko"] = "Yasa", ["ykr"] = "Yekora", ["ykt"] = "Kathu", ["yku"] = "Kuamasi", ["yky"] = "Yakoma", ["yla"] = "Yaul", ["ylb"] = "Yaleba", ["yle"] = "Yele", ["ylg"] = "Yelogu", ["yli"] = "Angguruk Yali", ["yll"] = "Yil", ["ylm"] = "Limi", ["yln"] = "Langnian Buyang", ["ylo"] = "Naluo Yi", ["ylr"] = "Yalarnnga", ["ylu"] = "Aribwaung", ["yly"] = "Nyâlayu", ["ymb"] = "Yambes", ["ymc"] = "Southern Muji", ["ymd"] = "Muda", ["yme"] = "Yameo", ["ymg"] = "Yamongeri", ["ymh"] = "Mili", ["ymi"] = "Moji", ["ymk"] = "Makwe", ["yml"] = "Iamalele", ["ymm"] = "Maay", ["ymn"] = "Sunum", ["ymo"] = "Yangum Mon", ["ymp"] = "Yamap", ["ymq"] = "Qila Muji", ["ymr"] = "Malasar", ["yms"] = "Mysian", ["ymx"] = "Northern Muji", ["ymz"] = "Muzi", ["yna"] = "Aluo", ["ynd"] = "Yandruwandha", ["yne"] = "Lang'e", ["yng"] = "Yango", ["ynk"] = "Naukanski", ["ynl"] = "Yangulam", ["ynn"] = "Yana", ["yno"] = "Yong", ["yns"] = "Yansi", ["ynu"] = "Yahuna", ["yo"] = "Yoruba", ["yob"] = "Yoba", ["yog"] = "Yogad", ["yoi"] = "Yonaguni", ["yol"] = "Yola", ["yom"] = "Yombe", ["yon"] = "Yongkom", ["yox"] = "Yoron", ["yoy"] = "Yoy", ["ypa"] = "Phala", ["ypb"] = "Labo Phowa", ["ypg"] = "Phola", ["yph"] = "Phupha", ["ypk-pro"] = "Proto-Yupik", ["ypm"] = "Phuma", ["ypn"] = "Ani Phowa", ["ypo"] = "Alo Phola", ["ypp"] = "Phupa", ["ypz"] = "Phuza", ["yra"] = "Yerakai", ["yrb"] = "Yareba", ["yre"] = "Yaouré", ["yri"] = "Yarí", ["yrk"] = "Tundra Nenets", ["yrl"] = "Nheengatu", ["yrn"] = "Yerong", ["yro"] = "Yaroamë", ["yrw"] = "Yarawata", ["yry"] = "Yarluyandi", ["ysc"] = "Jassic", ["ysd"] = "Samatao", ["ysg"] = "Sonaga", ["ysl"] = "Yugoslavian Sign Language", ["ysn"] = "Sani", ["yso"] = "Nisi", ["ysp"] = "Southern Lolopo", ["ysr"] = "Sirenik", ["yss"] = "Yessan-Mayo", ["ysy"] = "Sanie", ["yta"] = "Talu", ["ytl"] = "Tanglang", ["ytp"] = "Thopho", ["ytw"] = "Yout Wam", ["yty"] = "Yatay", ["yua"] = "Yucatec Maya", ["yub"] = "Yugambal", ["yuc"] = "Yuchi", ["yue"] = "Cantonese", ["yuf"] = "Havasupai-Walapai-Yavapai", ["yug"] = "Yug", ["yui"] = "Yurutí", ["yuj"] = "Karkar-Yuri", ["yuk"] = "Yuki", ["yul"] = "Yulu", ["yum"] = "Yuma", ["yun"] = "Bena", ["yup"] = "Yukpa", ["yuq"] = "Yuqui", ["yur"] = "Yurok", ["yut"] = "Yopno", ["yuw"] = "Finisterre Yau", ["yux"] = "Southern Yukaghir", ["yuy"] = "East Yugur", ["yuz"] = "Yuracare", ["yva"] = "Yawa", ["yvt"] = "Yavitero", ["ywa"] = "Kalou", ["ywg"] = "Yinhawangka", ["ywl"] = "Western Lalu", ["ywn"] = "Yawanawa", ["ywq"] = "Nasu", ["ywr"] = "Yawuru", ["ywt"] = "Xishanba Lalo", ["ywu"] = "Wumeng Nasu", ["yww"] = "Yawarawarga", ["yxa"] = "Mayawali", ["yxg"] = "Yagara", ["yxl"] = "Yarli", ["yxm"] = "Yinwum", ["yxu"] = "Yuyu", ["yxy"] = "Yabula Yabula", ["yyu"] = "Torricelli Yau", ["yyz"] = "Ayizi", ["yzg"] = "E'ma Buyang", ["yzk"] = "Zokhuo", ["za"] = "Zhuang", ["zaa"] = "Sierra de Juárez Zapotec", ["zab"] = "San Juan Guelavía Zapotec", ["zac"] = "Ocotlán Zapotec", ["zad"] = "Cajonos Zapotec", ["zae"] = "Yareni Zapotec", ["zaf"] = "Ayoquesco Zapotec", ["zag"] = "Zaghawa", ["zah"] = "Zangwal", ["zai"] = "Isthmus Zapotec", ["zaj"] = "Zaramo", ["zak"] = "Zanaki", ["zal"] = "Zauzou", ["zam"] = "Central Mahuatlán Zapoteco", ["zao"] = "Ozolotepec Zapotec", ["zap"] = "Zapotec", ["zaq"] = "Aloápam Zapotec", ["zar"] = "Rincón Zapotec", ["zas"] = "Santo Domingo Albarradas Zapotec", ["zat"] = "Tabaa Zapotec", ["zau"] = "Zangskari", ["zav"] = "Yatzachi Zapotec", ["zaw"] = "Mitla Zapotec", ["zax"] = "Xadani Zapotec", ["zay"] = "Zayse-Zergulla", ["zaz"] = "Zari", ["zbt"] = "Batui", ["zca"] = "Coatecas Altas Zapotec", ["zdj"] = "Ngazidja Comorian", ["zea"] = "Zealandic", ["zeg"] = "Zenag", ["zen"] = "Zenaga", ["zga"] = "Kinga", ["zgh"] = "Moroccan Amazigh", ["zgr"] = "Magori", ["zh"] = "Chinese", ["zhb"] = "Zhaba", ["zhi"] = "Zhire", ["zhn"] = "Nong Zhuang", ["zhw"] = "Zhoa", ["zhx-min-pro"] = "Proto-Min", ["zhx-sht"] = "Shaozhou Tuhua", ["zhx-tai"] = "Taishanese", ["zhx-teo"] = "Teochew", ["zia"] = "Zia", ["zib"] = "Zimbabwe Sign Language", ["zik"] = "Zimakani", ["zil"] = "Zialo", ["zim"] = "Mesme", ["zin"] = "Zinza", ["zir"] = "Ziriya", ["ziw"] = "Zigula", ["ziz"] = "Zizilivakan", ["zka"] = "Kaimbulawa", ["zkb"] = "Koibal", ["zkg"] = "Goguryeo", ["zkh"] = "Khorezmian Turkic", ["zkk"] = "Karankawa", ["zko"] = "Kott", ["zkp"] = "São Paulo Kaingáng", ["zkr"] = "Zakhring", ["zkt"] = "Khitan", ["zku"] = "Kaurna", ["zkv"] = "Krevinian", ["zkz"] = "Khazar", ["zle-ono"] = "Old Novgorodian", ["zle-ort"] = "Old Ruthenian", ["zlw-ocs"] = "Old Czech", ["zlw-opl"] = "Old Polish", ["zlw-pom-pro"] = "Proto-Pomeranian", ["zlw-slv"] = "Slovincian", ["zma"] = "Manda (Australia)", ["zmb"] = "Zimba", ["zmc"] = "Margany", ["zmd"] = "Maridan", ["zme"] = "Mangerr", ["zmf"] = "Mfinu", ["zmg"] = "Marti Ke", ["zmh"] = "Makolkol", ["zmi"] = "Negeri Sembilan Malay", ["zmj"] = "Maridjabin", ["zmk"] = "Mandandanyi", ["zml"] = "Madngele", ["zmm"] = "Marimanindji", ["zmn"] = "Mbangwe", ["zmo"] = "Molo", ["zmp"] = "Mbuun", ["zmq"] = "Mituku", ["zmr"] = "Maranungku", ["zms"] = "Mbesa", ["zmt"] = "Maringarr", ["zmu"] = "Muruwari", ["zmv"] = "Mbariman-Gudhinma", ["zmw"] = "Mbo (Congo)", ["zmx"] = "Bomitaba", ["zmy"] = "Mariyedi", ["zmz"] = "Mbandja", ["zna"] = "Zan Gula", ["zne"] = "Zande", ["zng"] = "Mang", ["znk"] = "Manangkari", ["zns"] = "Mangas", ["zoc"] = "Copainalá Zoque", ["zoh"] = "Chimalapa Zoque", ["zom"] = "Zou", ["zoo"] = "Asunción Mixtepec Zapotec", ["zoq"] = "Tabasco Zoque", ["zor"] = "Rayón Zoque", ["zos"] = "Francisco León Zoque", ["zpa"] = "Lachiguiri Zapotec", ["zpb"] = "Yautepec Zapotec", ["zpc"] = "Choapan Zapotec", ["zpd"] = "Southeastern Ixtlán Zapotec", ["zpe"] = "Petapa Zapotec", ["zpf"] = "San Pedro Quiatoni Zapotec", ["zpg"] = "Guevea de Humboldt Zapotec", ["zph"] = "Totomachapan Zapotec", ["zpi"] = "Santa María Quiegolani Zapotec", ["zpj"] = "Quiavicuzas Zapotec", ["zpk"] = "Tlacolulita Zapotec", ["zpl"] = "Lachixío Zapotec", ["zpm"] = "Mixtepec Zapotec", ["zpn"] = "Santa Inés Yatzechi Zapotec", ["zpo"] = "Amatlán Zapotec", ["zpp"] = "El Alto Zapotec", ["zpq"] = "Zoogocho Zapotec", ["zpr"] = "Santiago Xanica Zapotec", ["zps"] = "Coatlán Zapotec", ["zpt"] = "San Vicente Coatlán Zapotec", ["zpu"] = "Yalálag Zapotec", ["zpv"] = "Chichicapan Zapotec", ["zpw"] = "Zaniza Zapotec", ["zpx"] = "San Baltazar Loxicha Zapotec", ["zpy"] = "Mazaltepec Zapotec", ["zpz"] = "Texmelucan Zapotec", ["zra"] = "Kaya", ["zrg"] = "Mirgan", ["zrn"] = "Zirenkel", ["zro"] = "Záparo", ["zrs"] = "Mairasi", ["zsa"] = "Sarasira", ["zsk"] = "Kaskean", ["zsl"] = "Zambian Sign Language", ["zsr"] = "Southern Rincon Zapotec", ["zsu"] = "Sukurum", ["zte"] = "Elotepec Zapotec", ["ztg"] = "Xanaguía Zapotec", ["ztl"] = "Lapaguía-Guivini Zapotec", ["ztm"] = "San Agustín Mixtepec Zapotec", ["ztn"] = "Santa Catarina Albarradas Zapotec", ["ztp"] = "Loxicha Zapotec", ["ztq"] = "Quioquitani-Quierí Zapotec", ["zts"] = "Tilquiapan Zapotec", ["ztt"] = "Tejalapan Zapotec", ["ztu"] = "San Pablo Güilá Zapotec", ["ztx"] = "Zaachila Zapotec", ["zty"] = "Yatee Zapotec", ["zu"] = "Zulu", ["zua"] = "Zeem", ["zuh"] = "Tokano", ["zum"] = "Kumzari", ["zun"] = "Zuni", ["zuy"] = "Zumaya", ["zwa"] = "Zay", ["zyp"] = "Zyphe", ["zza"] = "Zazaki", ["zzj"] = "Zuojiang Zhuang", } 2sq0odi4zgtaayxndy9woi1kpccjn37 487555 487554 2026-09-01T15:30:25Z SM7 6218 कुछ अनुबाद और लोकलाइजेशन 487555 Scribunto text/plain return { ["aa"] = "Afar", ["aaa"] = "Ghotuo", ["aab"] = "Alumu-Tesu", ["aac"] = "Ari", ["aad"] = "Amal", ["aaf"] = "Aranadan", ["aag"] = "Ambrak", ["aah"] = "Abu' Arapesh", ["aai"] = "Arifama-Miniafia", ["aak"] = "Ankave", ["aal"] = "Afade", ["aan"] = "Anambé", ["aap"] = "Pará Arára", ["aaq"] = "Penobscot", ["aas"] = "Aasax", ["aau"] = "Abau", ["aav-khs-pro"] = "Proto-Khasian", ["aav-nic-pro"] = "Proto-Nicobarese", ["aav-pkl-pro"] = "Proto-Pnar-Khasi-Lyngngam", ["aav-pro"] = "Proto-Austroasiatic", ["aaw"] = "Solong", ["aax"] = "Mandobo Atas", ["aaz"] = "Amarasi", ["ab"] = "Abkhaz", ["aba"] = "Abé", ["abb"] = "Bankon", ["abc"] = "Ambala Ayta", ["abd"] = "Camarines Norte Agta", ["abe"] = "Abenaki", ["abf"] = "Abai Sungai", ["abg"] = "Abaga", ["abh"] = "Tajiki Arabic", ["abi"] = "Abidji", ["abj"] = "Aka-Bea", ["abl"] = "Abung", ["abm"] = "Abanyom", ["abn"] = "Abua", ["abo"] = "Abon", ["abp"] = "Abenlen Ayta", ["abq"] = "Abaza", ["abr"] = "Abron", ["abs"] = "Ambonese Malay", ["abt"] = "Ambulas", ["abu"] = "Abure", ["abv"] = "Baharna Arabic", ["abw"] = "Pal", ["abx"] = "Inabaknon", ["aby"] = "Aneme Wake", ["abz"] = "Abui", ["aca"] = "Achagua", ["acb"] = "Áncá", ["acd"] = "Gikyode", ["ace"] = "Acehnese", ["ach"] = "Acholi", ["aci"] = "Aka-Cari", ["ack"] = "Aka-Kora", ["acl"] = "Akar-Bale", ["acm"] = "Iraqi Arabic", ["acn"] = "Achang", ["acp"] = "Eastern Acipa", ["acr"] = "Achi", ["acs"] = "Acroá", ["acu"] = "Achuar", ["acv"] = "Achumawi", ["acw"] = "Hijazi Arabic", ["acx"] = "Omani Arabic", ["acy"] = "Cypriot Arabic", ["acz"] = "Acheron", ["ada"] = "Adangme", ["adb"] = "Adabe", ["add"] = "Dzodinka", ["ade"] = "Adele", ["adf"] = "Dhofari Arabic", ["adg"] = "Andegerebinha", ["adh"] = "Adhola", ["adi"] = "Adi", ["adj"] = "Adioukrou", ["adl"] = "Galo", ["adn"] = "Adang", ["ado"] = "Abu", ["adp"] = "Adap", ["adq"] = "Adangbe", ["adr"] = "Adonara", ["ads"] = "Adamorobe Sign Language", ["adt"] = "Adnyamathanha", ["adu"] = "Aduge", ["adw"] = "Amondawa", ["ady"] = "Adyghe", ["adz"] = "Adzera", ["ae"] = "Avestan", ["aea"] = "Areba", ["aeb"] = "Tunisian Arabic", ["aed"] = "Argentine Sign Language", ["aee"] = "Northeast Pashayi", ["aek"] = "Haeke", ["ael"] = "Ambele", ["aem"] = "Arem", ["aen"] = "Armenian Sign Language", ["aeq"] = "Aer", ["aer"] = "Eastern Arrernte", ["aes"] = "Alsea", ["aeu"] = "Akeu", ["aew"] = "Ambakich", ["aey"] = "Amele", ["aez"] = "Aeka", ["af"] = "Afrikaans", ["afa-pro"] = "Proto-Afroasiatic", ["afb"] = "Gulf Arabic", ["afd"] = "Andai", ["afe"] = "Putukwam", ["afg"] = "Afghan Sign Language", ["afh"] = "Afrihili", ["afi"] = "Akrukay", ["afk"] = "Nanubae", ["afn"] = "Defaka", ["afo"] = "Eloyi", ["afp"] = "Tapei", ["afs"] = "Afro-Seminole Creole", ["aft"] = "Afitti", ["afu"] = "Awutu", ["afz"] = "Obokuitai", ["aga"] = "Aguano", ["agb"] = "Legbo", ["agc"] = "Agatu", ["agd"] = "Agarabi", ["age"] = "Angal", ["agf"] = "Arguni", ["agg"] = "Angor", ["agh"] = "Ngelima", ["agi"] = "Agariya", ["agj"] = "Argobba", ["agk"] = "Isarog Agta", ["agl"] = "Fembe", ["agm"] = "Angaataha", ["agn"] = "Agutaynen", ["ago"] = "Tainae", ["agq"] = "Aghem", ["agr"] = "Aguaruna", ["ags"] = "Esimbi", ["agt"] = "Central Cagayan Agta", ["agu"] = "Aguacateca", ["agv"] = "Remontado Agta", ["agw"] = "Kahua", ["agx"] = "Aghul", ["agy"] = "Southern Alta", ["agz"] = "Mount Iriga Agta", ["aha"] = "Ahanta", ["ahb"] = "Axamb", ["ahg"] = "Qimant", ["ahh"] = "Aghu", ["ahi"] = "Tiagbamrin Aizi", ["ahk"] = "Akha", ["ahl"] = "Igo", ["ahm"] = "Mobumrin Aizi", ["ahn"] = "Àhàn", ["aho"] = "Ahom", ["ahp"] = "Aproumu Aizi", ["ahr"] = "Ahirani", ["ahs"] = "Ashe", ["aht"] = "Ahtna", ["aia"] = "Arosi", ["aib"] = "Aynu", ["aic"] = "Ainbai", ["aid"] = "Alngith", ["aie"] = "Amara", ["aif"] = "Agi", ["aig"] = "Antigua and Barbuda Creole English", ["aih"] = "Ai-Cham", ["aii"] = "Assyrian Neo-Aramaic", ["aij"] = "Lishanid Noshan", ["aik"] = "Ake", ["ail"] = "Aimele", ["aim"] = "Aimol", ["ain"] = "Ainu", ["aio"] = "Aiton", ["aip"] = "Burumakok", ["air"] = "Airoran", ["ait"] = "Arikem", ["aiw"] = "Aari", ["aix"] = "Aighon", ["aiy"] = "Ali", ["aja"] = "Aja", ["ajg"] = "Adja", ["aji"] = "Ajië", ["ajn"] = "Andajin", ["ajp"] = "South Levantine Arabic", ["ajw"] = "Ajawa", ["ajz"] = "Amri Karbi", ["ak"] = "Akan", ["akb"] = "Angkola Batak", ["akc"] = "Mpur", ["akd"] = "Ukpet-Ehom", ["ake"] = "Akawaio", ["akf"] = "Akpa", ["akg"] = "Anakalangu", ["akh"] = "Angal Heneng", ["aki"] = "Aiome", ["akj"] = "Jeru", ["akk"] = "Akkadian", ["akl"] = "Aklanon", ["akm"] = "Aka-Bo", ["ako"] = "Akurio", ["akp"] = "Siwu", ["akq"] = "Ak", ["akr"] = "Araki", ["aks"] = "Akaselem", ["akt"] = "Akolet", ["aku"] = "Akum", ["akv"] = "Akhvakh", ["akw"] = "Akwa", ["akx"] = "Aka-Kede", ["aky"] = "Aka-Kol", ["akz"] = "Alabama", ["ala"] = "Alago", ["alc"] = "Kawésqar", ["ald"] = "Alladian", ["ale"] = "Aleut", ["alf"] = "Alege", ["alg-aga"] = "Agawam", ["alg-pro"] = "Proto-Algonquian", ["alh"] = "Alawa", ["ali"] = "Amaimon", ["alj"] = "Alangan", ["alk"] = "Alak", ["all"] = "Allar", ["alm"] = "Amblong", ["alo"] = "Larike-Wakasihu", ["alp"] = "Alune", ["alq"] = "Algonquin", ["alr"] = "Alutor", ["alt"] = "Southern Altai", ["alu"] = "'Are'are", ["alv-ama"] = "Amasi", ["alv-bgu"] = "Baïnounk Gubëeher", ["alv-bua-pro"] = "Proto-Bua", ["alv-cng-pro"] = "Proto-Cangin", ["alv-edk-pro"] = "Proto-Edekiri", ["alv-edo-pro"] = "Proto-Edoid", ["alv-fli-pro"] = "Proto-Fali", ["alv-gbe-pro"] = "Proto-Gbe", ["alv-gng-pro"] = "Proto-Guang", ["alv-gtm-pro"] = "Proto-Central Togo", ["alv-gwa"] = "Gwara", ["alv-hei-pro"] = "Proto-Heiban", ["alv-ido-pro"] = "Proto-Idomoid", ["alv-igb-pro"] = "Proto-Igboid", ["alv-kwa-pro"] = "Proto-Kwa", ["alv-mum-pro"] = "Proto-Mumuye", ["alv-nup-pro"] = "Proto-Nupoid", ["alv-pro"] = "Proto-Atlantic-Congo", ["alv-von-pro"] = "Proto-Volta-Niger", ["alv-yor-pro"] = "Proto-Yoruba", ["alv-yrd-pro"] = "Proto-Yoruboid", ["alw"] = "Alaba", ["alx"] = "Amol", ["aly"] = "Alyawarr", ["alz"] = "Alur", ["am"] = "Amharic", ["ama"] = "Amanayé", ["amb"] = "Ambo", ["amc"] = "Amahuaca", ["ame"] = "Yanesha'", ["amf"] = "Hamer-Banna", ["amg"] = "Amurdag", ["ami"] = "Amis", ["amj"] = "Amdang", ["amk"] = "Ambai", ["aml"] = "War-Jaintia", ["amm"] = "Ama", ["amn"] = "Amanab", ["amo"] = "Amo", ["amp"] = "Alamblak", ["amq"] = "Amahai", ["amr"] = "Amarakaeri", ["ams"] = "Southern Amami-Oshima", ["amt"] = "Amto", ["amu"] = "Guerrero Amuzgo", ["amv"] = "Ambelau", ["amw"] = "Western Neo-Aramaic", ["amx"] = "Anmatyerre", ["amy"] = "Ami", ["amz"] = "Atampaya", ["an"] = "Aragonese", ["ana"] = "Andaqui", ["anb"] = "Andoa", ["anc"] = "Ngas", ["and"] = "Ansus", ["ane"] = "Xârâcùù", ["anf"] = "Animere", ["ang"] = "Old English", ["anh"] = "Nend", ["ani"] = "Andi", ["anj"] = "Anor", ["ank"] = "Goemai", ["anl"] = "Anu", ["anm"] = "Anal", ["ann"] = "Obolo", ["ano"] = "Andoque", ["anp"] = "Angika", ["anq"] = "Jarawa", ["anr"] = "Andh", ["ans"] = "Anserma", ["ant"] = "Antakarinya", ["anu"] = "Anuak", ["anv"] = "Denya", ["anw"] = "Anaang", ["anx"] = "Andra-Hus", ["any"] = "Anyi", ["anz"] = "Anem", ["aoa"] = "Angolar", ["aob"] = "Abom", ["aoc"] = "Pemon", ["aod"] = "Andarum", ["aoe"] = "Angal Enen", ["aof"] = "Bragat", ["aog"] = "Angoram", ["aoi"] = "Anindilyakwa", ["aoj"] = "Mufian", ["aok"] = "Arhö", ["aol"] = "Alor", ["aom"] = "Ömie", ["aon"] = "Bumbita Arapesh", ["aor"] = "Aore", ["aos"] = "Taikat", ["aot"] = "Atong (India)", ["aou"] = "A'ou", ["aox"] = "Atorada", ["aoz"] = "Uab Meto", ["apa-pro"] = "Proto-Apachean", ["apb"] = "Sa'a", ["apc"] = "North Levantine Arabic", ["apd"] = "Sudanese Arabic", ["ape"] = "Bukiyip", ["apf"] = "Pahanan Agta", ["apg"] = "Ampanang", ["aph"] = "Athpare", ["api"] = "Apiaká", ["apj"] = "Jicarilla", ["apk"] = "Plains Apache", ["apl"] = "Lipan", ["apm"] = "Chiricahua", ["apn"] = "Apinayé", ["apo"] = "Ambul", ["app"] = "Apma", ["apq"] = "A-Pucikwar", ["apr"] = "Arop-Lokep", ["aps"] = "Arop-Sissano", ["apt"] = "Apatani", ["apu"] = "Apurinã", ["apv"] = "Alapmunte", ["apw"] = "Western Apache", ["apx"] = "Aputai", ["apy"] = "Apalaí", ["apz"] = "Safeyoka", ["aqc"] = "Archi", ["aqd"] = "Ampari Dogon", ["aqg"] = "Arigidi", ["aql-pro"] = "Proto-Algic", ["aqm"] = "Atohwaim", ["aqn"] = "Northern Alta", ["aqp"] = "Atakapa", ["aqr"] = "Arhâ", ["aqt"] = "Angaité", ["aqz"] = "Akuntsu", ["ar"] = "Arabic", ["arc"] = "Aramaic", ["ard"] = "Arabana", ["are"] = "Western Arrernte", ["arh"] = "Arhuaco", ["ari"] = "Arikara", ["arj"] = "Arapaso", ["ark"] = "Arikapú", ["arl"] = "Arabela", ["arn"] = "Mapudungun", ["aro"] = "Araona", ["arp"] = "Arapaho", ["arq"] = "Algerian Arabic", ["arr"] = "Arara-Karo", ["ars"] = "Najdi Arabic", ["art-blk"] = "Bolak", ["art-bsp"] = "Black Speech", ["art-com"] = "Communicationssprache", ["art-dtk"] = "Dothraki", ["art-elo"] = "Eloi", ["art-gld"] = "Goa'uld", ["art-lap"] = "Lapine", ["art-man"] = "Mandalorian", ["art-mun"] = "Mundolinco", ["art-nav"] = "Na'vi", ["art-nox"] = "Noxilo", ["art-una"] = "Unas", ["aru"] = "Arua", ["arv"] = "Arbore", ["arw"] = "Arawak", ["arx"] = "Aruá", ["ary"] = "Moroccan Arabic", ["arz"] = "Egyptian Arabic", ["as"] = "असमिया", ["asa"] = "Pare", ["asb"] = "Assiniboine", ["asc"] = "Casuarina Coast Asmat", ["ase"] = "American Sign Language", ["asf"] = "Auslan", ["asg"] = "Cishingini", ["ash"] = "Abishira", ["asi"] = "Buruwai", ["asj"] = "Nsari", ["ask"] = "Ashkun", ["asl"] = "Asilulu", ["asn"] = "Xingú Asuriní", ["aso"] = "Dano", ["asp"] = "Algerian Sign Language", ["asq"] = "Austrian Sign Language", ["asr"] = "Asuri", ["ass"] = "Ipulo", ["ast"] = "Asturian", ["asu"] = "Tocantins Asurini", ["asv"] = "Asoa", ["asw"] = "Australian Aboriginal Sign Language", ["asx"] = "Muratayak", ["asy"] = "Yaosakor Asmat", ["asz"] = "As", ["ata"] = "Pele-Ata", ["atb"] = "Zaiwa", ["atc"] = "Atsahuaca", ["atd"] = "Ata Manobo", ["ate"] = "Atemble", ["atg"] = "Okpela", ["ath-nic"] = "Nicola", ["ath-pro"] = "Proto-Athabaskan", ["ati"] = "Attié", ["atj"] = "Atikamekw", ["atk"] = "Ati", ["atl"] = "Mount Iraya Agta", ["atm"] = "Ata", ["ato"] = "Atong (Cameroon)", ["atp"] = "Pudtol Atta", ["atq"] = "Aralle-Tabulahan", ["atr"] = "Waimiri-Atroari", ["ats"] = "Gros Ventre", ["att"] = "Pamplona Atta", ["atu"] = "Reel", ["atv"] = "Northern Altai", ["atw"] = "Atsugewi", ["atx"] = "Arutani", ["aty"] = "Aneityum", ["atz"] = "Arta", ["aua"] = "Asumboa", ["aub"] = "Alugu", ["auc"] = "Huaorani", ["aud"] = "Anuta", ["auf-pro"] = "Proto-Arawa", ["aug"] = "Aguna", ["auh"] = "Aushi", ["aui"] = "Anuki", ["auj"] = "Awjila", ["auk"] = "Heyo", ["aul"] = "Aulua", ["aum"] = "Asu", ["aun"] = "Molmo One", ["auo"] = "Auyokawa", ["aup"] = "Makayam", ["auq"] = "Anus", ["aur"] = "Aruek", ["aus-alu"] = "Alungul", ["aus-and"] = "Andjingith", ["aus-ang"] = "Angkula", ["aus-arn-pro"] = "Proto-Arnhem", ["aus-bra"] = "Barranbinya", ["aus-brm"] = "Barunggam", ["aus-cww-pro"] = "Proto-Central New South Wales", ["aus-dal-pro"] = "Proto-Daly", ["aus-guw"] = "Guwar", ["aus-lsw"] = "Little Swanport", ["aus-mbi"] = "Mbiywom", ["aus-ngk"] = "Ngkoth", ["aus-nyu-pro"] = "Proto-Nyulnyulan", ["aus-pam-pro"] = "Proto-Pama-Nyungan", ["aus-tul"] = "Tulua", ["aus-uwi"] = "Uwinymil", ["aus-wdj-pro"] = "Proto-Iwaidjan", ["aus-won"] = "Wong-gie", ["aus-wul"] = "Wulguru", ["aus-ynk"] = "Yangkaal", ["aut"] = "Austral", ["auu"] = "Auye", ["auw"] = "Awyi", ["aux"] = "Aurá", ["auy"] = "Auyana", ["auz"] = "Uzbeki Arabic", ["av"] = "Avar", ["avb"] = "Avau", ["avd"] = "Alviri-Vidari", ["avi"] = "Avikam", ["avk"] = "Kotava", ["avm"] = "Angkamuthi", ["avn"] = "Avatime", ["avo"] = "Agavotaguerra", ["avs"] = "Aushiri", ["avt"] = "Au", ["avu"] = "Avokaya", ["avv"] = "Avá-Canoeiro", ["awa"] = "Awadhi", ["awb"] = "Awa (New Guinea)", ["awc"] = "Cicipu", ["awd-ama"] = "Amarizana", ["awd-amc-pro"] = "Proto-Amuesha-Chamicuro", ["awd-ana"] = "Anauyá", ["awd-apo"] = "Apolista", ["awd-cav"] = "Cavere", ["awd-gnu"] = "Guinau", ["awd-kar"] = "Cariay", ["awd-kaw"] = "Kawishana", ["awd-kmp-pro"] = "Proto-Kampa", ["awd-kus"] = "Kustenau", ["awd-man"] = "Manao", ["awd-mar"] = "Marawan", ["awd-mpr"] = "Maypure", ["awd-mrt"] = "Mariaté", ["awd-nwk-pro"] = "Proto-Nawiki", ["awd-pai"] = "Paikoneka", ["awd-pas"] = "Passé", ["awd-pro"] = "Proto-Arawak", ["awd-prw-pro"] = "Proto-Paresi-Waura", ["awd-she"] = "Shebayo", ["awd-taa-pro"] = "Proto-Ta-Arawak", ["awd-wai"] = "Wainumá", ["awd-yum"] = "Yumana", ["awe"] = "Awetí", ["awg"] = "Anguthimri", ["awh"] = "Awbono", ["awi"] = "Aekyom", ["awk"] = "Awabakal", ["awm"] = "Arawum", ["awn"] = "Awngi", ["awo"] = "Awak", ["awr"] = "Awera", ["aws"] = "South Awyu", ["awt"] = "Araweté", ["awu"] = "Central Awyu", ["awv"] = "Jair Awyu", ["aww"] = "Awun", ["awx"] = "Awara", ["awy"] = "Edera Awyu", ["axb"] = "Abipon", ["axe"] = "Ayerrerenge", ["axg"] = "Mato Grosso Arára", ["axk"] = "Aka (Central Africa)", ["axl"] = "Lower Southern Aranda", ["axm"] = "Middle Armenian", ["axx"] = "Xaragure", ["ay"] = "Aymara", ["aya"] = "Awar", ["ayb"] = "Ayizo", ["ayd"] = "Ayabadhu", ["aye"] = "Ayere", ["ayg"] = "Nyanga (Togo)", ["ayi"] = "Leyigha", ["ayk"] = "Akuku", ["ayl"] = "Libyan Arabic", ["ayn"] = "Yemeni Arabic", ["ayo"] = "Ayoreo", ["ayp"] = "North Mesopotamian Arabic", ["ayq"] = "Ayi", ["ays"] = "Sorsogon Ayta", ["ayt"] = "Bataan Ayta", ["ayu"] = "Ayu", ["ayy"] = "Tayabas Ayta", ["ayz"] = "Maybrat", ["az"] = "Azerbaijani", ["aza"] = "Azha", ["azc-caz"] = "Cazcan", ["azc-cup-pro"] = "Proto-Cupan", ["azc-ktn"] = "Kitanemuk", ["azc-nah-pro"] = "Proto-Nahuan", ["azc-num-pro"] = "Proto-Numic", ["azc-pro"] = "Proto-Uto-Aztecan", ["azc-tak-pro"] = "Proto-Takic", ["azc-tat"] = "Tataviam", ["azd"] = "Eastern Durango Nahuatl", ["azg"] = "San Pedro Amuzgos Amuzgo", ["azm"] = "Ipalapa Amuzgo", ["azn"] = "Western Durango Nahuatl", ["azo"] = "Awing", ["azt"] = "Faire Atta", ["azz"] = "Highland Puebla Nahuatl", ["ba"] = "Bashkir", ["baa"] = "Babatana", ["bab"] = "Bainouk-Gunyuño", ["bac"] = "Badui", ["bae"] = "Baré", ["baf"] = "Nubaca", ["bag"] = "Tuki", ["bah"] = "Bahamian Creole", ["baj"] = "Barakai", ["bal"] = "Baluchi", ["ban"] = "Balinese", ["bao"] = "Waimaha", ["bap"] = "Bantawa", ["bar"] = "Bavarian", ["bas"] = "Basaa", ["bau"] = "Badanchi", ["bav"] = "Babungo", ["baw"] = "Bambili-Bambui", ["bax"] = "Bamum", ["bay"] = "Batuley", ["bba"] = "Baatonum", ["bbb"] = "Barai", ["bbc"] = "Toba Batak", ["bbd"] = "Bau", ["bbe"] = "Bangba", ["bbf"] = "Baibai", ["bbg"] = "Barama", ["bbh"] = "Bugan", ["bbi"] = "Barombi", ["bbj"] = "Ghomala'", ["bbk"] = "Babanki", ["bbl"] = "Bats", ["bbm"] = "Babango", ["bbn"] = "Uneapa", ["bbo"] = "Konabéré", ["bbp"] = "West Central Banda", ["bbq"] = "Bamali", ["bbr"] = "Girawa", ["bbs"] = "Bakpinka", ["bbt"] = "Mburku", ["bbu"] = "Bakulung", ["bbv"] = "Karnai", ["bbw"] = "Baba", ["bbx"] = "Bubia", ["bby"] = "Befang", ["bca"] = "Central Bai", ["bcb"] = "Bainouk-Samik", ["bcd"] = "North Babar", ["bce"] = "Bamenyam", ["bcf"] = "Bamu", ["bcg"] = "Baga Pokur", ["bch"] = "Bariai", ["bci"] = "Baoule", ["bcj"] = "Bardi", ["bck"] = "Bunaba", ["bcl"] = "Bikol Central", ["bcm"] = "Banoni", ["bcn"] = "Bibaali", ["bco"] = "Kaluli", ["bcp"] = "Bali", ["bcq"] = "Bench", ["bcr"] = "Babine-Witsuwit'en", ["bcs"] = "Kohumono", ["bct"] = "Bendi", ["bcu"] = "Biliau", ["bcv"] = "Shoo-Minda-Nye", ["bcw"] = "Bana", ["bcy"] = "Bacama", ["bcz"] = "Bainouk-Gunyaamolo", ["bda"] = "Bayot", ["bdb"] = "Basap", ["bdc"] = "Emberá-Baudó", ["bdd"] = "Bunama", ["bde"] = "Bade", ["bdf"] = "Biage", ["bdg"] = "Bonggi", ["bdh"] = "Tara Baka", ["bdi"] = "Burun", ["bdj"] = "Bai", ["bdk"] = "Budukh", ["bdl"] = "Indonesian Bajau", ["bdm"] = "Buduma", ["bdn"] = "Baldemu", ["bdo"] = "Morom", ["bdp"] = "Bende", ["bdq"] = "Bahnar", ["bdr"] = "West Coast Bajau", ["bds"] = "Burunge", ["bdt"] = "Bokoto", ["bdu"] = "Oroko", ["bdv"] = "Bodo Parja", ["bdw"] = "Baham", ["bdx"] = "Budong-Budong", ["bdy"] = "Bandjalang", ["bdz"] = "Badeshi", ["be"] = "Belarusian", ["bea"] = "Beaver", ["beb"] = "Bebele", ["bec"] = "Iceve-Maci", ["bed"] = "Bedoanas", ["bee"] = "Byangsi", ["bef"] = "Benabena", ["beg"] = "Belait", ["beh"] = "Biali", ["bei"] = "Bekati'", ["bej"] = "Beja", ["bek"] = "Bebeli", ["bem"] = "Bemba", ["beo"] = "Beami", ["bep"] = "Besoa", ["beq"] = "Beembe", ["ber-fog"] = "Fogaha", ["ber-pro"] = "Proto-Berber", ["ber-zuw"] = "Zuwara", ["bes"] = "Besme", ["bet"] = "Guiberoua Bété", ["beu"] = "Blagar", ["bev"] = "Daloa Bété", ["bew"] = "Betawi", ["bex"] = "Jur Modo", ["bey"] = "Akuwagel", ["bez"] = "Kibena", ["bfa"] = "Bari", ["bfb"] = "Pauri Bareli", ["bfc"] = "Northern Bai", ["bfd"] = "Bafut", ["bfe"] = "Betaf", ["bff"] = "Bofi", ["bfg"] = "Busang Kayan", ["bfh"] = "Blafe", ["bfi"] = "British Sign Language", ["bfj"] = "Bafanji", ["bfk"] = "Ban Khor Sign Language", ["bfl"] = "Banda-Ndélé", ["bfm"] = "Mmen", ["bfn"] = "Bunak", ["bfo"] = "Malba Birifor", ["bfp"] = "Beba", ["bfq"] = "Badaga", ["bfr"] = "Bazigar", ["bfs"] = "Southern Bai", ["bft"] = "Balti", ["bfu"] = "Gahri", ["bfw"] = "Bondo", ["bfx"] = "Bantayanon", ["bfy"] = "Bagheli", ["bfz"] = "Mahasu Pahari", ["bg"] = "Bulgarian", ["bga"] = "Gwamhi-Wuri", ["bgb"] = "Bobongko", ["bgc"] = "Haryanvi", ["bgd"] = "Rathwi Bareli", ["bge"] = "Bauria", ["bgf"] = "Bangandu", ["bgg"] = "Bugun", ["bgi"] = "Giangan", ["bgj"] = "Bangolan", ["bgk"] = "Bit", ["bgl"] = "Bo", ["bgo"] = "Baga Koga", ["bgq"] = "Bagri", ["bgr"] = "Bawm Chin", ["bgs"] = "Tagabawa", ["bgt"] = "Bughotu", ["bgu"] = "Mbongno", ["bgv"] = "Warkay-Bipim", ["bgw"] = "Bhatri", ["bgx"] = "Balkan Gagauz Turkish", ["bgy"] = "Benggoi", ["bgz"] = "Banggai", ["bh"] = "Bihari", ["bha"] = "Bharia", ["bhb"] = "Bhili", ["bhc"] = "Biga", ["bhd"] = "Bhadrawahi", ["bhe"] = "Bhaya", ["bhf"] = "Odiai", ["bhg"] = "Binandere", ["bhh"] = "Bukhari", ["bhi"] = "Bhilali", ["bhj"] = "Bahing", ["bhl"] = "Bimin", ["bhm"] = "Bathari", ["bhn"] = "Bohtan Neo-Aramaic", ["bho"] = "भोजपुरी", ["bhp"] = "Bima", ["bhq"] = "Tukang Besi South", ["bhs"] = "Buwal", ["bht"] = "Bhattiyali", ["bhu"] = "Bhunjia", ["bhv"] = "Bahau", ["bhw"] = "Biak", ["bhx"] = "Bhalay", ["bhy"] = "Bhele", ["bhz"] = "Bada", ["bi"] = "Bislama", ["bia"] = "Badimaya", ["bib"] = "Bissa", ["bic"] = "Bikaru", ["bid"] = "Bidiyo", ["bie"] = "Bepour", ["bif"] = "Biafada", ["big"] = "Biangai", ["bij"] = "Kwanka", ["bil"] = "Bile", ["bim"] = "Bimoba", ["bin"] = "Edo", ["bio"] = "Nai", ["bip"] = "Bila", ["biq"] = "Bipi", ["bir"] = "Bisorio", ["bit"] = "Berinomo", ["biu"] = "Biete", ["biv"] = "Southern Birifor", ["biw"] = "Kol (Cameroon)", ["bix"] = "Bijori", ["biy"] = "Birhor", ["biz"] = "Baloi", ["bja"] = "Budza", ["bjb"] = "Barngarla", ["bjc"] = "Bariji", ["bje"] = "Biao-Jiao Mien", ["bjf"] = "Barzani Jewish Neo-Aramaic", ["bjg"] = "Bidyogo", ["bjh"] = "Bahinemo", ["bji"] = "Burji", ["bjj"] = "Kannauji", ["bjk"] = "Barok", ["bjl"] = "Bulu (New Guinea)", ["bjm"] = "Bajelani", ["bjn"] = "Banjarese", ["bjo"] = "Mid-Southern Banda", ["bjp"] = "Fanamaket", ["bjr"] = "Binumarien", ["bjs"] = "Bajan", ["bjt"] = "Balanta-Ganja", ["bju"] = "Busuu", ["bjv"] = "Bedjond", ["bjw"] = "Bakwé", ["bjx"] = "Banao Itneg", ["bjy"] = "Bayali", ["bjz"] = "Baruga", ["bka"] = "Kyak", ["bkc"] = "Baka", ["bkd"] = "Binukid", ["bkf"] = "Beeke", ["bkg"] = "Buraka", ["bkh"] = "Bakoko", ["bki"] = "Baki", ["bkj"] = "Pande", ["bkk"] = "Brokskat", ["bkl"] = "Berik", ["bkm"] = "Kom (Cameroon)", ["bkn"] = "Bukitan", ["bko"] = "Kwa'", ["bkp"] = "Iboko", ["bkq"] = "Bakairí", ["bkr"] = "Bakumpai", ["bks"] = "Masbate Sorsogon", ["bkt"] = "Boloki", ["bku"] = "Buhid", ["bkv"] = "Bekwarra", ["bkw"] = "Bekwel", ["bkx"] = "Baikeno", ["bky"] = "Bokyi", ["bkz"] = "Bungku", ["bla"] = "Blackfoot", ["blb"] = "Bilua", ["blc"] = "Bella Coola", ["bld"] = "Bolango", ["ble"] = "Balanta-Kentohe", ["blf"] = "Buol", ["blg"] = "Balau", ["blh"] = "Kuwaa", ["bli"] = "Bolia", ["blj"] = "Bolongan", ["blk"] = "Pa'o Karen", ["bll"] = "Biloxi", ["blm"] = "Beli", ["bln"] = "Southern Catanduanes Bicolano", ["blo"] = "Anii", ["blp"] = "Blablanga", ["blq"] = "Baluan-Pam", ["blr"] = "Blang", ["bls"] = "Balaesang", ["blt"] = "Tai Dam", ["blv"] = "Kibala", ["blw"] = "Balangao", ["blx"] = "Mag-Indi Ayta", ["bly"] = "Notre", ["blz"] = "Balantak", ["bm"] = "Bambara", ["bma"] = "Lame", ["bmb"] = "Bembe", ["bmc"] = "Biem", ["bmd"] = "Baga Manduri", ["bme"] = "Limassa", ["bmf"] = "Bom", ["bmg"] = "Bamwe", ["bmh"] = "Kein", ["bmi"] = "Bagirmi", ["bmj"] = "Bote-Majhi", ["bmk"] = "Ghayavi", ["bml"] = "Bomboli", ["bmn"] = "Bina", ["bmo"] = "Bambalang", ["bmp"] = "Bulgebi", ["bmq"] = "Bomu", ["bmr"] = "Muinane", ["bmt"] = "Biao Mon", ["bmu"] = "Somba-Siawari", ["bmv"] = "Bum", ["bmw"] = "Bomwali", ["bmx"] = "Baimak", ["bmz"] = "Baramu", ["bn"] = "बंगाली", ["bna"] = "Bonerate", ["bnb"] = "Bookan", ["bnd"] = "Banda", ["bne"] = "Bintauna", ["bnf"] = "Masiwang", ["bng"] = "Benga", ["bni"] = "Bangi", ["bnj"] = "Eastern Tawbuid", ["bnk"] = "Bierebo", ["bnl"] = "Boon", ["bnm"] = "Batanga", ["bnn"] = "Bunun", ["bno"] = "Asi", ["bnp"] = "Bola", ["bnq"] = "Bantik", ["bnr"] = "Butmas-Tur", ["bns"] = "Bundeli", ["bnt-bal"] = "Balong", ["bnt-bon"] = "Boma Nkuu", ["bnt-boy"] = "Boma Yumu", ["bnt-bwa"] = "Bwala", ["bnt-cmw"] = "Chimwiini", ["bnt-ind"] = "Indanga", ["bnt-lal"] = "Lala (South Africa)", ["bnt-lwl"] = "Lwel", ["bnt-mpi"] = "Mpiin", ["bnt-mpu"] = "Mpuono", ["bnt-ngu-pro"] = "Proto-Nguni", ["bnt-phu"] = "Phuthi", ["bnt-pro"] = "Proto-Bantu", ["bnt-sbo"] = "South Boma", ["bnt-sts-pro"] = "Proto-Sotho-Tswana", ["bnu"] = "Bentong", ["bnv"] = "Beneraf", ["bnw"] = "Bisis", ["bnx"] = "Bangubangu", ["bny"] = "Bintulu", ["bnz"] = "Beezen", ["bo"] = "Tibetan", ["boa"] = "Bora", ["bob"] = "Aweer", ["boe"] = "Mundabli", ["bof"] = "Bolon", ["bog"] = "Bamako Sign Language", ["boh"] = "North Boma", ["boi"] = "Barbareño", ["boj"] = "Anjam", ["bok"] = "Bonjo", ["bol"] = "Bole", ["bom"] = "Berom", ["bon"] = "Bine", ["boo"] = "Tiemacèwè Bozo", ["bop"] = "Bonkiman", ["boq"] = "Bogaya", ["bor"] = "Borôro", ["bot"] = "Bongo", ["bou"] = "Bondei", ["bov"] = "Tuwuli", ["bow"] = "Rema", ["box"] = "Buamu", ["boy"] = "Bodo (Central Africa)", ["boz"] = "Tiéyaxo Bozo", ["bpa"] = "Dakaka", ["bpd"] = "Banda-Banda", ["bpg"] = "Bonggo", ["bph"] = "Botlikh", ["bpi"] = "Bagupi", ["bpj"] = "Binji", ["bpk"] = "Orowe", ["bpl"] = "Broome Pearling Lugger Pidgin", ["bpm"] = "Biyom", ["bpn"] = "Dzao Min", ["bpo"] = "Anasi", ["bpp"] = "Kaure", ["bpq"] = "Banda Malay", ["bpr"] = "Koronadal Blaan", ["bps"] = "Sarangani Blaan", ["bpt"] = "Barrow Point", ["bpu"] = "Bongu", ["bpv"] = "Bian Marind", ["bpx"] = "Palya Bareli", ["bpy"] = "Bishnupriya Manipuri", ["bpz"] = "Bilba", ["bqa"] = "Tchumbuli", ["bqb"] = "Bagusa", ["bqc"] = "Boko", ["bqd"] = "Bung", ["bqf"] = "Baga Kaloum", ["bqg"] = "Bago-Kusuntu", ["bqh"] = "Baima", ["bqi"] = "Bakhtiari", ["bqj"] = "Bandial", ["bqk"] = "Banda-Mbrès", ["bql"] = "Bilakura", ["bqm"] = "Wumboko", ["bqn"] = "Bulgarian Sign Language", ["bqo"] = "Balo", ["bqp"] = "Busa", ["bqq"] = "Biritai", ["bqr"] = "Burusu", ["bqs"] = "Bosngun", ["bqt"] = "Bamukumbit", ["bqu"] = "Boguru", ["bqv"] = "Begbere-Ejar", ["bqw"] = "Buru (Nigeria)", ["bqx"] = "Baangi", ["bqy"] = "Bengkala Sign Language", ["bqz"] = "Bakaka", ["br"] = "Breton", ["bra"] = "Braj", ["brb"] = "Lave", ["brc"] = "Berbice Creole Dutch", ["brd"] = "Baraamu", ["brf"] = "Bera", ["brg"] = "Baure", ["brh"] = "Brahui", ["bri"] = "Mokpwe", ["brj"] = "Bieria", ["brk"] = "Birgid", ["brl"] = "Birwa", ["brm"] = "Barambu", ["brn"] = "Boruca", ["bro"] = "Brokkat", ["brp"] = "Barapasi", ["brq"] = "Breri", ["brr"] = "Birao", ["brs"] = "Baras", ["brt"] = "Bitare", ["bru"] = "Eastern Bru", ["brv"] = "Western Bru", ["brw"] = "Bellari", ["brx"] = "Bodo (India)", ["bry"] = "Burui", ["brz"] = "Bilbil", ["bsa"] = "Abinomn", ["bsb"] = "Brunei Bisaya", ["bsc"] = "Bassari", ["bse"] = "Wushi", ["bsf"] = "Bauchi", ["bsg"] = "Bashkardi", ["bsh"] = "Kamkata-viri", ["bsi"] = "Bassossi", ["bsj"] = "Bangwinji", ["bsk"] = "Burushaski", ["bsl"] = "Basa-Gumna", ["bsm"] = "Busami", ["bsn"] = "Barasana", ["bso"] = "Buso", ["bsp"] = "Baga Sitemu", ["bsq"] = "Bassa", ["bsr"] = "Bassa-Kontagora", ["bss"] = "Akoose", ["bst"] = "Basketo", ["bsu"] = "Bahonsuai", ["bsv"] = "Baga Sobané", ["bsw"] = "Baiso", ["bsx"] = "Yangkam", ["bsy"] = "Sabah Bisaya", ["bta"] = "Bata", ["btc"] = "Bati (Cameroon)", ["btd"] = "Dairi Batak", ["bte"] = "Gamo-Ningi", ["btf"] = "Birgit", ["btg"] = "Gagnoa Bété", ["bth"] = "Biatah Bidayuh", ["bti"] = "Burate", ["btj"] = "Bacanese Malay", ["btk-pro"] = "Proto-Batak", ["btm"] = "Mandailing Batak", ["btn"] = "Ratagnon", ["bto"] = "Iriga Bicolano", ["btp"] = "Budibud", ["btq"] = "Batek", ["btr"] = "Baetora", ["bts"] = "Simalungun Batak", ["btt"] = "Bete-Bendi", ["btu"] = "Batu", ["btv"] = "Bateri", ["btw"] = "Butuanon", ["btx"] = "Karo Batak", ["bty"] = "Bobot", ["btz"] = "Alas-Kluet Batak", ["bua"] = "Buryat", ["bub"] = "Bua", ["bud"] = "Ntcham", ["bue"] = "Beothuk", ["buf"] = "Bushoong", ["bug"] = "Buginese", ["buh"] = "Younuo Bunu", ["bui"] = "Bongili", ["buj"] = "Basa-Gurmana", ["buk"] = "Bukawa", ["bum"] = "Bulu (Cameroon)", ["bun"] = "Sherbro", ["buo"] = "Terei", ["bup"] = "Busoa", ["buq"] = "Brem", ["bus"] = "Bokobaru", ["but"] = "Bungain", ["buu"] = "Budu", ["buv"] = "Bun", ["buw"] = "Bubi", ["bux"] = "Boghom", ["buy"] = "Mmani", ["bva"] = "Barein", ["bvb"] = "Bube", ["bvc"] = "Baelelea", ["bvd"] = "Baeggu", ["bve"] = "Berau Malay", ["bvf"] = "Boor", ["bvg"] = "Bonkeng", ["bvh"] = "Bure", ["bvi"] = "Belanda Viri", ["bvj"] = "Baan", ["bvk"] = "Bukat", ["bvl"] = "Bolivian Sign Language", ["bvm"] = "Bamunka", ["bvn"] = "Buna", ["bvo"] = "Bolgo", ["bvp"] = "Bumang", ["bvq"] = "Birri", ["bvr"] = "Burarra", ["bvt"] = "Bati (Indonesia)", ["bvu"] = "Bukit Malay", ["bvv"] = "Baniva", ["bvw"] = "Boga", ["bvx"] = "Babole", ["bvy"] = "Baybayanon", ["bvz"] = "Bauzi", ["bwa"] = "Bwatoo", ["bwb"] = "Namosi-Naitasiri-Serua", ["bwc"] = "Bwile", ["bwd"] = "Bwaidoka", ["bwe"] = "Bwe Karen", ["bwf"] = "Boselewa", ["bwg"] = "Barwe", ["bwh"] = "Bishuo", ["bwi"] = "Baniwa", ["bwj"] = "Láá Láá Bwamu", ["bwk"] = "Bauwaki", ["bwl"] = "Bwela", ["bwm"] = "Biwat", ["bwn"] = "Wunai Bunu", ["bwo"] = "Shinasha", ["bwp"] = "Mandobo Bawah", ["bwq"] = "Southern Bobo", ["bwr"] = "Bura", ["bws"] = "Bomboma", ["bwt"] = "Bafaw", ["bwu"] = "Buli (Ghana)", ["bww"] = "Bwa", ["bwx"] = "Bu-Nao Bunu", ["bwy"] = "Cwi Bwamu", ["bwz"] = "Bwisi", ["bxa"] = "Bauro", ["bxb"] = "Belanda Bor", ["bxc"] = "Molengue", ["bxd"] = "Pela", ["bxe"] = "Ongota", ["bxf"] = "Bilur", ["bxg"] = "Bangala", ["bxh"] = "Buhutu", ["bxi"] = "Pirlatapa", ["bxj"] = "Bayungu", ["bxk"] = "Bukusu", ["bxl"] = "Jalkunan", ["bxn"] = "Burduna", ["bxo"] = "Barikanchi", ["bxp"] = "Bebil", ["bxq"] = "Beele", ["bxs"] = "Busam", ["bxv"] = "Berakou", ["bxw"] = "Banka", ["bxz"] = "Binahari", ["bya"] = "Palawan Batak", ["byb"] = "Bikya", ["byc"] = "Ubaghara", ["byd"] = "Benyadu'", ["bye"] = "Pouye", ["byf"] = "Bete", ["byg"] = "Baygo", ["byh"] = "Bujhyal", ["byi"] = "Buyu", ["byj"] = "Binawa", ["byk"] = "Biao", ["byl"] = "Bayono", ["bym"] = "Bidyara", ["byn"] = "Blin", ["byo"] = "Biyo", ["byp"] = "Bumaji", ["byq"] = "Basay", ["byr"] = "Baruya", ["bys"] = "Burak", ["byt"] = "Berti", ["byv"] = "Medumba", ["byw"] = "Belhariya", ["byx"] = "Qaqet", ["byz"] = "Banaro", ["bza"] = "Bandi", ["bzb"] = "Andio", ["bzd"] = "Bribri", ["bze"] = "Jenaama Bozo", ["bzf"] = "Boikin", ["bzg"] = "Babuza", ["bzh"] = "Mapos Buang", ["bzi"] = "Bisu", ["bzj"] = "Belizean Creole", ["bzk"] = "Nicaraguan Creole", ["bzl"] = "Boano (Sulawesi)", ["bzm"] = "Bolondo", ["bzn"] = "Boano (Maluku)", ["bzo"] = "Bozaba", ["bzp"] = "Kemberano", ["bzq"] = "Buli (Indonesia)", ["bzr"] = "Biri", ["bzs"] = "Brazilian Sign Language", ["bzu"] = "Burmeso", ["bzv"] = "Bebe", ["bzw"] = "Basa", ["bzx"] = "Hainyaxo Bozo", ["bzy"] = "Obanliku", ["bzz"] = "Evant", ["ca"] = "Catalan", ["caa"] = "Ch'orti'", ["cab"] = "Garifuna", ["cac"] = "Chuj", ["cad"] = "Caddo", ["cae"] = "Laalaa", ["caf"] = "Southern Carrier", ["cag"] = "Nivaclé", ["cah"] = "Cahuarano", ["caj"] = "Chané", ["cak"] = "Kaqchikel", ["cal"] = "Carolinian", ["cam"] = "Cemuhî", ["can"] = "Chambri", ["cao"] = "Chácobo", ["cap"] = "Chipaya", ["caq"] = "Car Nicobarese", ["car"] = "Galibi Carib", ["cas"] = "Tsimané", ["cau-abz-pro"] = "Proto-Abkhaz-Abaza", ["cau-ava-pro"] = "Proto-Avaro-Andian", ["cau-cir-pro"] = "Proto-Circassian", ["cau-drg-pro"] = "Proto-Dargwa", ["cau-lzg-pro"] = "Proto-Lezghian", ["cau-nec-pro"] = "Proto-Northeast Caucasian", ["cau-nkh-pro"] = "Proto-Nakh", ["cau-nwc-pro"] = "Proto-Northwest Caucasian", ["cau-tsz-pro"] = "Proto-Tsezian", ["cav"] = "Cavineña", ["caw"] = "Callawalla", ["cax"] = "Chiquitano", ["cay"] = "Cayuga", ["caz"] = "Canichana", ["cba-ata"] = "Atanques", ["cba-cat"] = "Catío Chibcha", ["cba-dor"] = "Dorasque", ["cba-dui"] = "Duit", ["cba-hue"] = "Huetar", ["cba-nut"] = "Nutabe", ["cba-pro"] = "Proto-Chibchan", ["cbb"] = "Cabiyarí", ["cbc"] = "Carapana", ["cbd"] = "Carijona", ["cbg"] = "Chimila", ["cbi"] = "Chachi", ["cbj"] = "Ede Cabe", ["cbk"] = "Chavacano", ["cbl"] = "Bualkhaw Chin", ["cbn"] = "Nyah Kur", ["cbo"] = "Izora", ["cbq"] = "Shuba", ["cbr"] = "Cashibo-Cacataibo", ["cbs"] = "Cashinahua", ["cbt"] = "Chayahuita", ["cbu"] = "Candoshi-Shapra", ["cbv"] = "Cacua", ["cbw"] = "Kinabalian", ["cby"] = "Carabayo", ["cca"] = "Cauca", ["ccc"] = "Chamicuro", ["ccd"] = "Cafundó", ["cce"] = "Chopi", ["ccg"] = "Chamba Daka", ["cch"] = "Atsam", ["ccj"] = "Kasanga", ["ccl"] = "Cutchi-Swahili", ["ccm"] = "Malaccan Creole Malay", ["ccn-pro"] = "Proto-North Caucasian", ["cco"] = "Comaltepec Chinantec", ["ccp"] = "Chakma", ["ccr"] = "Cacaopera", ["ccs-gzn-pro"] = "Proto-Georgian-Zan", ["ccs-pro"] = "Proto-Kartvelian", ["cda"] = "Choni", ["cdc-cbm-pro"] = "Proto-Central Chadic", ["cdc-mas-pro"] = "Proto-Masa", ["cdc-pro"] = "Proto-Chadic", ["cdd-pro"] = "Proto-Caddoan", ["cde"] = "Chenchu", ["cdf"] = "Chiru", ["cdh"] = "Chambeali", ["cdi"] = "Chodri", ["cdj"] = "Churahi", ["cdm"] = "Chepang", ["cdn"] = "Chaudangsi", ["cdo"] = "Min Dong", ["cdr"] = "Cinda-Regi-Tiyal", ["cds"] = "Chadian Sign Language", ["cdy"] = "Chadong", ["cdz"] = "Koda", ["ce"] = "Chechen", ["cea"] = "Lower Chehalis", ["ceb"] = "Cebuano", ["ceg"] = "Chamacoco", ["cel-bry-pro"] = "Proto-Brythonic", ["cel-gal"] = "Gallaecian", ["cel-gau"] = "Gaulish", ["cel-pro"] = "Proto-Celtic", ["cen"] = "Cen", ["cet"] = "Centúúm", ["cfa"] = "Dijim-Bwilim", ["cfd"] = "Cara", ["cfg"] = "Como Karim", ["cfm"] = "Falam Chin", ["cga"] = "Changriwa", ["cgc"] = "Kagayanen", ["cgg"] = "Rukiga", ["cgk"] = "Chocangaca", ["ch"] = "Chamorro", ["chb"] = "Chibcha", ["chc"] = "Catawba", ["chd"] = "Highland Oaxaca Chontal", ["chf"] = "Tabasco Chontal", ["chg"] = "Chagatai", ["chh"] = "Chinook", ["chi-pro"] = "Proto-Chimakuan", ["chj"] = "Ojitlán Chinantec", ["chk"] = "Chuukese", ["chl"] = "Cahuilla", ["chm-pro"] = "Proto-Mari", ["chn"] = "Chinook Jargon", ["cho"] = "Choctaw", ["chp"] = "Chipewyan", ["chq"] = "Quiotepec Chinantec", ["chr"] = "Cherokee", ["cht"] = "Cholón", ["chw"] = "Chuabo", ["chx"] = "Chantyal", ["chy"] = "Cheyenne", ["chz"] = "Ozumacín Chinantec", ["cia"] = "Cia-Cia", ["cib"] = "Ci Gbe", ["cic"] = "Chickasaw", ["cid"] = "Chimariko", ["cie"] = "Cineni", ["cih"] = "Chinali", ["cik"] = "Chitkuli Kinnauri", ["cim"] = "Cimbrian", ["cin"] = "Cinta Larga", ["cip"] = "Chiapanec", ["cir"] = "Tiri", ["ciy"] = "Chaima", ["cja"] = "Western Cham", ["cje"] = "Chru", ["cjh"] = "Upper Chehalis", ["cji"] = "Chamalal", ["cjk"] = "Chokwe", ["cjm"] = "Eastern Cham", ["cjn"] = "Chenapian", ["cjo"] = "Ashéninka Pajonal", ["cjp"] = "Cabécar", ["cjs"] = "Shor", ["cjv"] = "Chuave", ["cjy"] = "Jin", ["ckb"] = "Central Kurdish", ["ckh"] = "Chak", ["ckl"] = "Cibak", ["ckn"] = "Kaang Chin", ["cko"] = "Anufo", ["ckq"] = "Kajakse", ["ckr"] = "Kairak", ["cks"] = "Tayo", ["ckt"] = "Chukchi", ["cku"] = "Koasati", ["ckv"] = "Kavalan", ["ckx"] = "Caka", ["cky"] = "Cakfem-Mushere", ["ckz"] = "Cakchiquel-Quiché Mixed Language", ["cla"] = "Ron", ["clc"] = "Chilcotin", ["cld"] = "Chaldean Neo-Aramaic", ["cle"] = "Lealao Chinantec", ["clh"] = "Chilisso", ["cli"] = "Chakali", ["clj"] = "Laitu Chin", ["clk"] = "Idu", ["cll"] = "Chala", ["clm"] = "Klallam", ["clo"] = "Lowland Oaxaca Chontal", ["clt"] = "Lautu Chin", ["clu"] = "Caluyanun", ["clw"] = "Chulym", ["cly"] = "Eastern Highland Chatino", ["cma"] = "Maa", ["cmc-pro"] = "Proto-Chamic", ["cme"] = "Cerma", ["cmg"] = "Classical Mongolian", ["cmi"] = "Emberá-Chamí", ["cml"] = "Campalagian", ["cmm"] = "Michigamea", ["cmn"] = "Mandarin", ["cmo"] = "Central Mnong", ["cmr"] = "Mro Chin", ["cms"] = "Messapic", ["cmt"] = "Camtho", ["cna"] = "Changthang", ["cnb"] = "Chinbon Chin", ["cnc"] = "Côông", ["cng"] = "Northern Qiang", ["cnh"] = "Lai", ["cni"] = "Asháninka", ["cnk"] = "Khumi Chin", ["cnl"] = "Lalana Chinantec", ["cno"] = "Con", ["cns"] = "Central Asmat", ["cnt"] = "Tepetotutla Chinantec", ["cnu"] = "Chenoua", ["cnw"] = "Ngawn Chin", ["cnx"] = "Middle Cornish", ["co"] = "Corsican", ["coa"] = "Cocos Islands Malay", ["cob"] = "Chicomuceltec", ["coc"] = "Cocopa", ["cod"] = "Cocama", ["coe"] = "Koreguaje", ["cof"] = "Tsafiki", ["cog"] = "Chong", ["coh"] = "Chichonyi-Chidzihana-Chikauma", ["coj"] = "Cochimi", ["cok"] = "Santa Teresa Cora", ["col"] = "Columbia-Wenatchi", ["com"] = "Comanche", ["con"] = "Cofán", ["coo"] = "Comox", ["cop"] = "Coptic", ["coq"] = "Coquille", ["cot"] = "Caquinte", ["cou"] = "Wamey", ["cov"] = "Cao Miao", ["cow"] = "Cowlitz", ["cox"] = "Nanti", ["coy"] = "Coyaima", ["coz"] = "Chochotec", ["cpa"] = "Palantla Chinantec", ["cpb"] = "Ucayali-Yurúa Ashéninka", ["cpc"] = "Ajyíninka Apurucayali", ["cpe-mar"] = "Maroon Spirit Language", ["cpe-spp"] = "Samoan Plantation Pidgin", ["cpg"] = "Cappadocian Greek", ["cpi"] = "Chinese Pidgin English", ["cpn"] = "Cherepon", ["cpo"] = "Kpee", ["cps"] = "Capiznon", ["cpu"] = "Pichis Ashéninka", ["cpx"] = "Puxian", ["cpy"] = "South Ucayali Ashéninka", ["cqd"] = "Chuanqiandian Cluster Miao", ["cr"] = "Cree", ["cra"] = "Chara", ["crb"] = "Island Carib", ["crc"] = "Lonwolwol", ["crd"] = "Coeur d'Alene", ["crf"] = "Caramanta", ["crg"] = "Michif", ["crh"] = "Crimean Tatar", ["cri"] = "Sãotomense", ["crj"] = "Southern East Cree", ["crk"] = "Plains Cree", ["crl"] = "Northern East Cree", ["crm"] = "Moose Cree", ["crn"] = "Cora", ["cro"] = "Crow", ["crp-gep"] = "West Greenlandic Pidgin", ["crp-mpp"] = "Macau Pidgin Portuguese", ["crp-rsn"] = "Russenorsk", ["crp-tnw"] = "Tangwang", ["crp-tpr"] = "Taimyr Pidgin Russian", ["crq"] = "Iyo'wujwa Chorote", ["crr"] = "Carolina Algonquian", ["crs"] = "Seychellois Creole", ["crt"] = "Iyojwa'ja Chorote", ["crv"] = "Chaura", ["crw"] = "Chrau", ["crx"] = "Carrier", ["cry"] = "Cori", ["crz"] = "Cruzeño", ["cs"] = "Czech", ["csa"] = "Chiltepec Chinantec", ["csb"] = "Kashubian", ["csc"] = "Catalan Sign Language", ["csd"] = "Chiangmai Sign Language", ["cse"] = "Czech Sign Language", ["csf"] = "Cuban Sign Language", ["csg"] = "Chilean Sign Language", ["csh"] = "Asho Chin", ["csi"] = "Coast Miwok", ["csj"] = "Songlai Chin", ["csk"] = "Jola-Kasa", ["csl"] = "Chinese Sign Language", ["csm"] = "Central Sierra Miwok", ["csn"] = "Colombian Sign Language", ["cso"] = "Sochiapam Chinantec", ["csq"] = "Croatian Sign Language", ["csr"] = "Costa Rican Sign Language", ["css"] = "Southern Ohlone", ["cst"] = "Northern Ohlone", ["csu-bba-pro"] = "Proto-Bongo-Bagirmi", ["csu-maa-pro"] = "Proto-Mangbetu", ["csu-pro"] = "Proto-Central Sudanic", ["csu-sar-pro"] = "Proto-Sara", ["csv"] = "Sumtu Chin", ["csw"] = "Swampy Cree", ["csy"] = "Siyin Chin", ["csz"] = "Coos", ["cta"] = "Tataltepec Chatino", ["ctc"] = "Chetco-Tolowa", ["ctd"] = "Tedim Chin", ["cte"] = "Tepinapa Chinantec", ["ctg"] = "Chittagonian", ["cth"] = "Thaiphum Chin", ["ctl"] = "Tlacoatzintepec Chinantec", ["ctm"] = "Chitimacha", ["ctn"] = "Chhintange", ["cto"] = "Emberá-Catío", ["ctp"] = "Western Highland Chatino", ["ctp-san"] = "San Juan Quiahije Chatino", ["cts"] = "Northern Catanduanes Bicolano", ["ctt"] = "Wayanad Chetti", ["ctu"] = "Chol", ["ctz"] = "Zacatepec Chatino", ["cu"] = "Old Church Slavonic", ["cua"] = "Cua", ["cub"] = "Cubeo", ["cuc"] = "Usila Chinantec", ["cug"] = "Cung", ["cuh"] = "Chuka", ["cui"] = "Cuiba", ["cuj"] = "Mashco Piro", ["cuk"] = "Kuna", ["cul"] = "Culina", ["cuo"] = "Cumanagoto", ["cup"] = "Cupeño", ["cuq"] = "Cun", ["cur"] = "Chhulung", ["cus-ash"] = "Ashraaf", ["cus-hec-pro"] = "Proto-Highland East Cushitic", ["cus-pro"] = "Proto-Cushitic", ["cus-som-pro"] = "Proto-Somaloid", ["cus-sou-pro"] = "Proto-South Cushitic", ["cut"] = "Teutila Cuicatec", ["cuu"] = "Tai Ya", ["cuv"] = "Cuvok", ["cuw"] = "Chukwa", ["cux"] = "Tepeuxila Cuicatec", ["cuy"] = "Cuitlatec", ["cv"] = "Chuvash", ["cvg"] = "Chug", ["cvn"] = "Valle Nacional Chinantec", ["cwa"] = "Kabwa", ["cwb"] = "Maindo", ["cwd"] = "Woods Cree", ["cwe"] = "Kwere", ["cwg"] = "Chewong", ["cwt"] = "Kuwaataay", ["cy"] = "Welsh", ["cya"] = "Nopala Chatino", ["cyb"] = "Cayubaba", ["cyo"] = "Cuyunon", ["czh"] = "Huizhou", ["czk"] = "Knaanic", ["czn"] = "Zenzontepec Chatino", ["czo"] = "Min Zhong", ["czt"] = "Zotung Chin", ["da"] = "Danish", ["daa"] = "Dangaléat", ["dac"] = "Dambi", ["dad"] = "Marik", ["dae"] = "Duupa", ["dag"] = "Dagbani", ["dah"] = "Gwahatike", ["dai"] = "Day", ["daj"] = "Dar Fur Daju", ["dak"] = "Dakota", ["dal"] = "Dahalo", ["dam"] = "Damakawa", ["dao"] = "Daai Chin", ["daq"] = "Dandami Maria", ["dar"] = "Dargwa", ["das"] = "Daho-Doo", ["dau"] = "Dar Sila Daju", ["dav"] = "Taita", ["daw"] = "Davawenyo", ["dax"] = "Dayi", ["daz"] = "Dao", ["dba"] = "Bangime", ["dbb"] = "Deno", ["dbd"] = "Dadiya", ["dbe"] = "Dabe", ["dbf"] = "Edopi", ["dbg"] = "Dogul Dom", ["dbi"] = "Doka", ["dbj"] = "Ida'an", ["dbl"] = "Dyirbal", ["dbm"] = "Duguri", ["dbn"] = "Duriankere", ["dbo"] = "Dulbu", ["dbp"] = "Duwai", ["dbq"] = "Daba", ["dbr"] = "Dabarre", ["dbt"] = "Ben Tey", ["dbu"] = "Bondum Dom Dogon", ["dbv"] = "Dungu", ["dbw"] = "Bankan Tey Dogon", ["dby"] = "Dibiyaso", ["dcc"] = "Deccani", ["dcr"] = "Negerhollands", ["dda"] = "Dadi Dadi", ["ddd"] = "Dongotono", ["dde"] = "Doondo", ["ddg"] = "Fataluku", ["ddi"] = "Diodio", ["ddj"] = "Jaru", ["ddn"] = "Dendi", ["ddo"] = "Tsez", ["ddr"] = "Dhudhuroa", ["dds"] = "Donno So Dogon", ["ddw"] = "Dawera-Daweloor", ["de"] = "जर्मन", ["dec"] = "Dagik", ["ded"] = "Dedua", ["dee"] = "Dewoin", ["def"] = "Dezfuli", ["deg"] = "Degema", ["deh"] = "Dehwari", ["dei"] = "Demisa", ["dek"] = "Dek", ["dem"] = "Dem", ["den"] = "Slavey", ["dep"] = "Pidgin Delaware", ["der"] = "Deori", ["des"] = "Desano", ["dev"] = "Domung", ["dez"] = "Dengese", ["dga"] = "Southern Dagaare", ["dgb"] = "Bunoge", ["dgc"] = "Casiguran Dumagat Agta", ["dgd"] = "Dagaari Dioula", ["dge"] = "Degenan", ["dgg"] = "Doga", ["dgh"] = "Dghwede", ["dgi"] = "Northern Dagara", ["dgk"] = "Dagba", ["dgn"] = "Dagoman", ["dgo"] = "हिंदी डोगरी", ["dgr"] = "Dogrib", ["dgs"] = "Dogoso", ["dgt"] = "Ntra'ngith", ["dgw"] = "Daungwurrung", ["dgx"] = "Doghoro", ["dgz"] = "Daga", ["dhg"] = "Dhangu", ["dhi"] = "Dhimal", ["dhl"] = "Dhalandji", ["dhm"] = "Zemba", ["dhn"] = "Dhanki", ["dho"] = "Dhodia", ["dhr"] = "Tharrgari", ["dhs"] = "Dhaiso", ["dhu"] = "Dhurga", ["dhv"] = "Drehu", ["dhw"] = "Danuwar", ["dhx"] = "Dhungaloo", ["dia"] = "Dia", ["dib"] = "South Central Dinka", ["dic"] = "Lakota Dida", ["did"] = "Didinga", ["dif"] = "Dieri", ["dig"] = "Digo", ["dii"] = "Dimbong", ["dij"] = "Dai", ["dik"] = "Southwestern Dinka", ["dil"] = "Dilling", ["dim"] = "Dime", ["din"] = "Dinka", ["dio"] = "Dibo", ["dip"] = "Northeastern Dinka", ["dir"] = "Dirim", ["dis"] = "Dimasa", ["diu"] = "Gciriku", ["diw"] = "Northwestern Dinka", ["dix"] = "Dixon Reef", ["diy"] = "Diuwe", ["diz"] = "Ding", ["dja"] = "Djadjawurrung", ["djb"] = "Djinba", ["djc"] = "Dar Daju Daju", ["djd"] = "Jaminjung", ["dje"] = "Zarma", ["djf"] = "Djangun", ["dji"] = "Djinang", ["djj"] = "Ndjébbana", ["djk"] = "Aukan", ["djl"] = "Djiwarli", ["djm"] = "Jamsay", ["djn"] = "Djauan", ["djo"] = "Jangkang", ["djr"] = "Djambarrpuyngu", ["dju"] = "Kapriman", ["djw"] = "Djawi", ["dka"] = "Dakpa", ["dkk"] = "Dakka", ["dkr"] = "Kuijau", ["dks"] = "Southeastern Dinka", ["dkx"] = "Mazagway", ["dlg"] = "Dolgan", ["dlk"] = "Dahalik", ["dlm"] = "Dalmatian", ["dln"] = "Darlong", ["dma"] = "Duma", ["dmb"] = "Mombo Dogon", ["dmc"] = "Gavak", ["dmd"] = "Madhi Madhi", ["dme"] = "Dugwor", ["dmf"] = "Medefaidrin", ["dmg"] = "Upper Kinabatangan", ["dmk"] = "Domaaki", ["dml"] = "Dameli", ["dmm"] = "Dama (Nigeria)", ["dmn-dam"] = "Dama (Sierra Leone)", ["dmn-mdw-pro"] = "Proto-Western Mande", ["dmn-pro"] = "Proto-Mande", ["dmo"] = "Kemezung", ["dmr"] = "East Damar", ["dms"] = "Dampelas", ["dmu"] = "Dubu", ["dmv"] = "Dumpas", ["dmw"] = "Mudburra", ["dmx"] = "Dema", ["dmy"] = "Demta", ["dna"] = "Upper Grand Valley Dani", ["dnd"] = "Daonda", ["dne"] = "Ndendeule", ["dng"] = "Dungan", ["dni"] = "Lower Grand Valley Dani", ["dnj"] = "Dan", ["dnk"] = "Dengka", ["dnn"] = "Dzuun", ["dno"] = "Ndrulo", ["dnr"] = "Danaru", ["dnt"] = "Mid Grand Valley Dani", ["dnu"] = "Danau", ["dnv"] = "Danu", ["dnw"] = "Western Dani", ["dny"] = "Dení", ["doa"] = "Dom", ["dob"] = "Dobu", ["doc"] = "Northern Kam", ["doe"] = "Doe", ["dof"] = "Domu", ["doh"] = "Dong", ["doi"] = "Dogri", ["dok"] = "Dondo", ["dol"] = "Doso", ["don"] = "Doura", ["doo"] = "Dongo", ["dop"] = "Lukpa", ["doq"] = "Dominican Sign Language", ["dor"] = "Dori'o", ["dos"] = "Dogosé", ["dot"] = "Dass", ["dov"] = "Toka-Leya", ["dow"] = "Doyayo", ["dox"] = "Bussa", ["doy"] = "Dompo", ["doz"] = "Dorze", ["dpp"] = "Papar", ["dra-mkn"] = "Middle Kannada", ["dra-okn"] = "Old Kannada", ["dra-ote"] = "Old Telugu", ["dra-pro"] = "Proto-Dravidian", ["drb"] = "Dair", ["drc"] = "Minderico", ["drd"] = "Darmiya", ["drg"] = "Rungus", ["dri"] = "Lela", ["drl"] = "Baagandji", ["drn"] = "West Damar", ["dro"] = "Daro-Matu Melanau", ["drq"] = "Dura", ["drs"] = "Gedeo", ["dru"] = "Rukai", ["dru-pro"] = "Proto-Rukai", ["dry"] = "Darai", ["dsb"] = "Lower Sorbian", ["dse"] = "Dutch Sign Language", ["dsh"] = "Daasanach", ["dsi"] = "Disa", ["dsl"] = "Danish Sign Language", ["dsn"] = "Dusner", ["dso"] = "Desiya", ["dsq"] = "Tadaksahak", ["dta"] = "Daur", ["dtb"] = "Labuk-Kinabatangan Kadazan", ["dtd"] = "Ditidaht", ["dth"] = "Adithinngithigh", ["dti"] = "Ana Tinga Dogon", ["dtk"] = "Tene Kan Dogon", ["dtm"] = "Tomo Kan Dogon", ["dto"] = "Tommo So", ["dtp"] = "Central Dusun", ["dtr"] = "Lotud", ["dts"] = "Toro So Dogon", ["dtt"] = "Toro Tegu Dogon", ["dtu"] = "Tebul Ure Dogon", ["dty"] = "Doteli", ["dua"] = "Duala", ["dub"] = "Dubli", ["duc"] = "Duna", ["due"] = "Umiray Dumaget Agta", ["duf"] = "Dumbea", ["dug"] = "Chiduruma", ["duh"] = "Dungra Bhil", ["dui"] = "Dumun", ["duk"] = "Uyajitaya", ["dul"] = "Alabat Island Agta", ["dum"] = "Middle Dutch", ["dun"] = "Dusun Deyah", ["duo"] = "Dupaningan Agta", ["dup"] = "Duano", ["duq"] = "Dusun Malang", ["dur"] = "Dii", ["dus"] = "Dumi", ["duu"] = "Drung", ["duv"] = "Duvle", ["duw"] = "Dusun Witu", ["dux"] = "Duun", ["duy"] = "Dicamay Agta", ["duz"] = "Duli", ["dv"] = "Dhivehi", ["dva"] = "Duau", ["dwa"] = "Diri", ["dwr"] = "Dawro", ["dwu"] = "Dhuwal", ["dww"] = "Dawawa", ["dwy"] = "Dhuwaya", ["dwz"] = "Dewas Rai", ["dya"] = "Dyan", ["dyb"] = "Dyaberdyaber", ["dyd"] = "Dyugun", ["dyg"] = "Villa Viciosa Agta", ["dyi"] = "Djimini", ["dym"] = "Yanda Dogon", ["dyn"] = "Dyangadi", ["dyo"] = "Jola-Fonyi", ["dyu"] = "Dyula", ["dyy"] = "Dyaabugay", ["dz"] = "Dzongkha", ["dza"] = "Tunzu", ["dzg"] = "Dazaga", ["dzl"] = "Dzala", ["dzn"] = "Dzando", ["ebg"] = "Ebughu", ["ebk"] = "Eastern Bontoc", ["ebr"] = "Ebrié", ["ebu"] = "Embu", ["ecr"] = "Eteocretan", ["ecs"] = "Ecuadorian Sign Language", ["ecy"] = "Eteocypriot", ["ee"] = "Ewe", ["eee"] = "E", ["efa"] = "Efai", ["efe"] = "Efe", ["efi"] = "Efik", ["ega"] = "Ega", ["egl"] = "Emilian", ["ego"] = "Eggon", ["egx-dem"] = "Demotic", ["egy"] = "Egyptian", ["ehu"] = "Ehueun", ["eip"] = "Eipomek", ["eit"] = "Eitiep", ["eiv"] = "Askopan", ["eja"] = "Ejamat", ["eka"] = "Ekajuk", ["eke"] = "Ekit", ["ekg"] = "Ekari", ["eki"] = "Eki", ["ekl"] = "Kolhe", ["ekm"] = "Elip", ["eko"] = "Koti", ["ekp"] = "Ekpeye", ["ekr"] = "Yace", ["eky"] = "Eastern Kayah", ["el"] = "Greek", ["ele"] = "Elepi", ["elh"] = "El Hugeirat", ["eli"] = "Nding", ["elk"] = "Elkei", ["elm"] = "Eleme", ["elo"] = "El Molo", ["elu"] = "Elu", ["elu-prk"] = "Helu", ["elx"] = "Elamite", ["ema"] = "Emai", ["emb"] = "Embaloh", ["eme"] = "Emerillon", ["emg"] = "Eastern Meohang", ["emi"] = "Mussau-Emira", ["emk"] = "Eastern Maninkakan", ["emm"] = "Mamulique", ["emn"] = "Eman", ["emp"] = "Northern Emberá", ["ems"] = "Alutiiq", ["emu"] = "Eastern Muria", ["emw"] = "Emplawas", ["emx"] = "Erromintxela", ["emy"] = "Epigraphic Mayan", ["en"] = "अंग्रेज़ी", ["ena"] = "Apali", ["enb"] = "Markweeta", ["enc"] = "En", ["end"] = "Ende", ["enf"] = "Forest Enets", ["enh"] = "Tundra Enets", ["enl"] = "Enlhet", ["enm"] = "Middle English", ["enn"] = "Engenni", ["eno"] = "Enggano", ["enq"] = "Enga", ["enr"] = "Emem", ["enu"] = "Enu", ["env"] = "Enwan", ["enw"] = "Enwang", ["enx"] = "Enxet", ["eo"] = "Esperanto", ["eot"] = "Eotile", ["epi"] = "Epie", ["era"] = "Eravallan", ["erg"] = "Sie", ["erh"] = "Eruwa", ["eri"] = "Ogea", ["erk"] = "South Efate", ["ero"] = "Horpa", ["err"] = "Erre", ["ers"] = "Ersu", ["ert"] = "Eritai", ["erw"] = "Erokwanas", ["es"] = "Spanish", ["ese"] = "Ese Ejja", ["esh"] = "Eshtehardi", ["esi"] = "North Alaskan Inupiatun", ["esk"] = "Northwest Alaska Inupiatun", ["esl"] = "Egyptian Sign Language", ["esm"] = "Esuma", ["esn"] = "Salvadoran Sign Language", ["eso"] = "Estonian Sign Language", ["esq"] = "Esselen", ["ess"] = "Central Siberian Yupik", ["esu"] = "Yup'ik", ["esx-esk-pro"] = "Proto-Eskimo", ["esx-ink"] = "Inuktun", ["esx-inq"] = "Inuinnaqtun", ["esx-inu-pro"] = "Proto-Inuit", ["esx-pro"] = "Proto-Eskimo-Aleut", ["esx-tut"] = "Tunumiisut", ["esy"] = "Eskayan", ["et"] = "Estonian", ["etb"] = "Etebi", ["etc"] = "Etchemin", ["eth"] = "Ethiopian Sign Language", ["etn"] = "Eton (Vanuatu)", ["eto"] = "Eton (Cameroon)", ["etr"] = "Edolo", ["ets"] = "Yekhee", ["ett"] = "Etruscan", ["etu"] = "Ejagham", ["etx"] = "Eten", ["etz"] = "Semimi", ["eu"] = "Basque", ["euq-pro"] = "Proto-Basque", ["eve"] = "Even", ["evh"] = "Uvbie", ["evn"] = "Evenki", ["ewo"] = "Ewondo", ["ext"] = "Extremaduran", ["eya"] = "Eyak", ["eyo"] = "Keiyo", ["eza"] = "Ezaa", ["eze"] = "Uzekwe", ["fa"] = "फ़ारसी", ["faa"] = "Fasu", ["fab"] = "Annobonese", ["fad"] = "Wagi", ["faf"] = "Fagani", ["fag"] = "Finongan", ["fah"] = "Baissa Fali", ["fai"] = "Faiwol", ["faj"] = "Faita", ["fak"] = "Fang (Beboid)", ["fal"] = "South Fali", ["fam"] = "Fam", ["fan"] = "Fang (Bantu)", ["fap"] = "Palor", ["far"] = "Fataleka", ["fau"] = "Fayu", ["fax"] = "Fala", ["fay"] = "Southwestern Fars", ["faz"] = "Northwestern Fars", ["fbl"] = "West Albay Bikol", ["fcs"] = "Quebec Sign Language", ["fer"] = "Feroge", ["ff"] = "Fula", ["ffi"] = "Foia Foia", ["fgr"] = "Fongoro", ["fi"] = "Finnish", ["fia"] = "Nobiin", ["fie"] = "Fyer", ["fip"] = "Fipa", ["fir"] = "Firan", ["fit"] = "Meänkieli", ["fiw"] = "Fiwaga", ["fj"] = "Fijian", ["fkk"] = "Kirya-Konzel", ["fkv"] = "Kven", ["fla"] = "Montana Salish", ["flh"] = "Foau", ["fli"] = "Fali", ["fll"] = "North Fali", ["fln"] = "Flinders Island", ["flr"] = "Fuliiru", ["fly"] = "Tsotsitaal", ["fmp"] = "Fe'fe'", ["fmu"] = "Far Western Muria", ["fng"] = "Fanagalo", ["fni"] = "Fania", ["fo"] = "Faroese", ["fod"] = "Foodo", ["foi"] = "Foi", ["fom"] = "Foma", ["fon"] = "Fon", ["for"] = "Fore", ["fos"] = "Siraya", ["fpe"] = "Pichinglis", ["fqs"] = "Fas", ["fr"] = "French", ["frd"] = "Fordata", ["frm"] = "Middle French", ["fro"] = "Old French", ["frp"] = "Franco-Provençal", ["frq"] = "Forak", ["frr"] = "North Frisian", ["frt"] = "Fortsenal", ["fse"] = "Finnish Sign Language", ["fsl"] = "French Sign Language", ["fss"] = "Finnish-Swedish Sign Language", ["fud"] = "East Futuna", ["fuj"] = "Ko", ["fum"] = "Fum", ["fun"] = "Fulniô", ["fur"] = "Friulian", ["fut"] = "Futuna-Aniwa", ["fuu"] = "Furu", ["fuy"] = "Fuyug", ["fvr"] = "Fur", ["fwa"] = "Fwâi", ["fwe"] = "Fwe", ["fy"] = "West Frisian", ["ga"] = "Irish", ["gaa"] = "Ga", ["gab"] = "Gabri", ["gac"] = "Mixed Great Andamanese", ["gad"] = "Gaddang", ["gae"] = "Warekena", ["gaf"] = "Gende", ["gag"] = "Gagauz", ["gah"] = "Alekano", ["gai"] = "Borei", ["gaj"] = "Gadsup", ["gak"] = "Gamkonora", ["gal"] = "Galoli", ["gam"] = "Kandawo", ["gan"] = "Gan", ["gao"] = "Gants", ["gap"] = "Gal", ["gaq"] = "Gata'", ["gar"] = "Galeya", ["gas"] = "Adiwasi Garasia", ["gat"] = "Kenati", ["gau"] = "Kondekor", ["gaw"] = "Nobonob", ["gay"] = "Gayo", ["gba"] = "Gbaya", ["gbb"] = "Kaytetye", ["gbd"] = "Karadjeri", ["gbe"] = "Niksek", ["gbf"] = "Gaikundi", ["gbg"] = "Gbanziri", ["gbh"] = "Defi Gbe", ["gbi"] = "Galela", ["gbj"] = "Bodo Gadaba", ["gbk"] = "Gaddi", ["gbl"] = "Gamit", ["gbm"] = "Garhwali", ["gbn"] = "Mo'da", ["gbo"] = "Northern Grebo", ["gbp"] = "Gbaya-Bossangoa", ["gbq"] = "Gbaya-Bozoum", ["gbr"] = "Gbagyi", ["gbs"] = "Gbesi Gbe", ["gbu"] = "Gagadu", ["gbv"] = "Gbanu", ["gbw"] = "Gabi", ["gbx"] = "Eastern Xwla Gbe", ["gby"] = "Gbari", ["gcc"] = "Mali", ["gcd"] = "Ganggalida", ["gce"] = "Galice", ["gcf"] = "Antillean Creole", ["gcl"] = "Grenadian Creole English", ["gcn"] = "Gaina", ["gcr"] = "Guianese Creole", ["gct"] = "Colonia Tovar German", ["gd"] = "Scottish Gaelic", ["gdb"] = "Ollari", ["gdc"] = "Gugu Badhun", ["gdd"] = "Gedaged", ["gde"] = "Gude", ["gdf"] = "Guduf-Gava", ["gdg"] = "Ga'dang", ["gdh"] = "Gadjerawang", ["gdi"] = "Gundi", ["gdj"] = "Kurtjar", ["gdk"] = "Gadang", ["gdl"] = "Dirasha", ["gdm"] = "Laal", ["gdn"] = "Umanakaina", ["gdo"] = "Godoberi", ["gdq"] = "Mehri", ["gdr"] = "Wipi", ["gds"] = "Ghandruk Sign Language", ["gdt"] = "Kungardutyi", ["gdu"] = "Gudu", ["gdx"] = "Godwari", ["gea"] = "Geruma", ["geb"] = "Kire", ["gec"] = "Gboloo Grebo", ["ged"] = "Gade", ["geg"] = "Gengle", ["geh"] = "Hutterisch", ["gei"] = "Gebe", ["gej"] = "Gen", ["gek"] = "Gerka", ["gel"] = "Fakkanci", ["gem-bur"] = "Burgundian", ["gem-pro"] = "Proto-Germanic", ["geq"] = "Geme", ["ges"] = "Geser-Gorom", ["gev"] = "Viya", ["gew"] = "Gera", ["gex"] = "Garre", ["gey"] = "Enya", ["gez"] = "Ge'ez", ["gfk"] = "Patpatar", ["gft"] = "Gafat", ["gga"] = "Gao", ["ggb"] = "Gbii", ["ggd"] = "Gugadj", ["gge"] = "Guragone", ["ggg"] = "Gurgula", ["ggk"] = "Kungarakany", ["ggl"] = "Ganglau", ["ggn"] = "Eastern Gurung", ["ggt"] = "Gitua", ["ggu"] = "Gban", ["ggw"] = "Gogodala", ["gha"] = "Ghadames", ["ghe"] = "Southern Ghale", ["ghh"] = "Northern Ghale", ["ghk"] = "Geko Karen", ["ghl"] = "Ghulfan", ["ghn"] = "Ghanongga", ["gho"] = "Ghomara", ["ghr"] = "Ghera", ["ghs"] = "Guhu-Samane", ["ght"] = "Kutang Ghale", ["gia"] = "Kitja", ["gib"] = "Gibanawa", ["gid"] = "Gidar", ["gie"] = "Guébie", ["gig"] = "Goaria", ["gih"] = "Githabul", ["gii"] = "Girirra", ["gil"] = "Gilbertese", ["gim"] = "Gimi (Goroka)", ["gin"] = "Hinukh", ["gio"] = "Gelao", ["gip"] = "Gimi (Austronesian)", ["giq"] = "Green Gelao", ["gir"] = "Red Gelao", ["gis"] = "North Giziga", ["git"] = "Gitxsan", ["giu"] = "Mulao", ["giw"] = "White Gelao", ["gix"] = "Gilima", ["giy"] = "Giyug", ["giz"] = "South Giziga", ["gji"] = "Geji", ["gjk"] = "Kachi Koli", ["gjm"] = "Gunditjmara", ["gjn"] = "Gonja", ["gju"] = "Gojri", ["gka"] = "Guya", ["gkd"] = "Magɨ", ["gke"] = "Ndai", ["gkn"] = "Gokana", ["gko"] = "Kok-Nar", ["gkp"] = "Guinea Kpelle", ["gl"] = "Galician", ["glc"] = "Bon Gula", ["gld"] = "Nanai", ["glh"] = "Northwest Pashayi", ["glj"] = "Kulaal", ["glk"] = "Gilaki", ["glo"] = "Galambu", ["glr"] = "Glaro-Twabo", ["glu"] = "Gula", ["glw"] = "Glavda", ["gly"] = "Gule", ["gma"] = "Gambera", ["gmb"] = "Gula'alaa", ["gmd"] = "Mághdì", ["gme-cgo"] = "Crimean Gothic", ["gmg"] = "Magiyi", ["gmh"] = "Middle High German", ["gml"] = "Middle Low German", ["gmm"] = "Gbaya-Mbodomo", ["gmn"] = "Gimnime", ["gmq-gut"] = "Gutnish", ["gmq-jmk"] = "Jamtish", ["gmq-mno"] = "Middle Norwegian", ["gmq-oda"] = "Old Danish", ["gmq-osw"] = "Old Swedish", ["gmq-pro"] = "Proto-Norse", ["gmq-scy"] = "Scanian", ["gmu"] = "Gumalu", ["gmv"] = "Gamo", ["gmw-bgh"] = "Bergish", ["gmw-cfr"] = "Central Franconian", ["gmw-ecg"] = "East Central German", ["gmw-gts"] = "Gottscheerish", ["gmw-jdt"] = "Jersey Dutch", ["gmw-pro"] = "Proto-West Germanic", ["gmw-rfr"] = "Rhine Franconian", ["gmw-stm"] = "Sathmar Swabian", ["gmw-tsx"] = "Transylvanian Saxon", ["gmw-vog"] = "Volga German", ["gmw-zps"] = "Zipser German", ["gmx"] = "Magoma", ["gmy"] = "Mycenaean Greek", ["gmz"] = "Mgbo", ["gn"] = "Guaraní", ["gn-cls"] = "Classical Guaraní", ["gna"] = "Kaansa", ["gnb"] = "Gangte", ["gnc"] = "Guanche", ["gnd"] = "Zulgo-Gemzek", ["gne"] = "Ganang", ["gng"] = "Ngangam", ["gnh"] = "Lere", ["gni"] = "Gooniyandi", ["gnj"] = "Ngen", ["gnk"] = "ǁGana", ["gnl"] = "Gangulu", ["gnm"] = "Ginuman", ["gnn"] = "Gumatj", ["gnq"] = "Gana", ["gnr"] = "Gureng Gureng", ["gnt"] = "Guntai", ["gnu"] = "Gnau", ["gnw"] = "Western Bolivian Guaraní", ["gnz"] = "Ganzi", ["goa"] = "Guro", ["gob"] = "Playero", ["goc"] = "Gorakor", ["god"] = "Godié", ["goe"] = "Gongduk", ["gof"] = "Gofa", ["gog"] = "Gogo", ["goh"] = "Old High German", ["goi"] = "Gobasi", ["goj"] = "Gowlan", ["gol"] = "Gola", ["gon"] = "Gondi", ["goo"] = "Gone Dau", ["gop"] = "Yeretuar", ["goq"] = "Gorap", ["gor"] = "Gorontalo", ["got"] = "Gothic", ["gou"] = "Gavar", ["gov"] = "Goo", ["gow"] = "Gorowa", ["gox"] = "Gobu", ["goy"] = "Goundo", ["goz"] = "Gozarkhani", ["gpa"] = "Gupa-Abawa", ["gpn"] = "Taiap", ["gqa"] = "Ga'anda", ["gqi"] = "Guiqiong", ["gqn"] = "Kinikinao", ["gqr"] = "Gor", ["gqu"] = "Qau", ["gra"] = "Rajput Garasia", ["grb"] = "Grebo", ["grc"] = "Ancient Greek", ["grd"] = "Guruntum", ["grg"] = "Madi", ["grh"] = "Gbiri-Niragu", ["gri"] = "Ghari", ["grj"] = "Southern Grebo", ["grk-cal"] = "Calabrian Greek", ["grk-ita"] = "Italiot Greek", ["grk-mar"] = "Mariupol Greek", ["grk-pro"] = "Proto-Hellenic", ["grm"] = "Kota Marudu Talantang", ["gro"] = "Groma", ["grq"] = "Gorovu", ["grs"] = "Gresi", ["grt"] = "Garo", ["gru"] = "Kistane", ["grv"] = "Central Grebo", ["grw"] = "Gweda", ["grx"] = "Guriaso", ["gry"] = "Barclayville Grebo", ["grz"] = "Guramalum", ["gse"] = "Ghanaian Sign Language", ["gsg"] = "German Sign Language", ["gsl"] = "Gusilay", ["gsm"] = "Guatemalan Sign Language", ["gsn"] = "Gusan", ["gso"] = "Southwest Gbaya", ["gsp"] = "Wasembo", ["gss"] = "Greek Sign Language", ["gsw"] = "Alemannic German", ["gta"] = "Guató", ["gtu"] = "Aghu Tharrnggala", ["gu"] = "Gujarati", ["gua"] = "Shiki", ["gub"] = "Guajajára", ["guc"] = "Wayuu", ["gud"] = "Yocoboué Dida", ["gue"] = "Gurindji", ["guf"] = "Gupapuyngu", ["gug"] = "Paraguayan Guaraní", ["guh"] = "Guahibo", ["gui"] = "Eastern Bolivian Guaraní", ["guk"] = "Gumuz", ["gul"] = "Gullah", ["gum"] = "Guambiano", ["gun"] = "Mbyá Guaraní", ["guo"] = "Guayabero", ["gup"] = "Gunwinggu", ["guq"] = "Aché", ["gur"] = "Farefare", ["gus"] = "Guinean Sign Language", ["gut"] = "Maléku Jaíka", ["guu"] = "Yanomamö", ["guv"] = "Gey", ["guw"] = "Gun", ["gux"] = "Gourmanchéma", ["guz"] = "Gusii", ["gv"] = "Manx", ["gva"] = "Kaskihá", ["gvc"] = "Guanano", ["gve"] = "Duwet", ["gvf"] = "Golin", ["gvj"] = "Guajá", ["gvl"] = "Gulay", ["gvm"] = "Gurmana", ["gvn"] = "Kuku-Yalanji", ["gvo"] = "Gavião do Jiparaná", ["gvp"] = "Pará Gavião", ["gvr"] = "Western Gurung", ["gvs"] = "Gumawana", ["gvy"] = "Guyani", ["gwa"] = "Mbato", ["gwb"] = "Gwa", ["gwc"] = "Kalami", ["gwd"] = "Gawwada", ["gwe"] = "Gweno", ["gwf"] = "Gowro", ["gwg"] = "Moo", ["gwi"] = "Gwich'in", ["gwj"] = "Gcwi", ["gwm"] = "Awngthim", ["gwn"] = "Gwandara", ["gwr"] = "Gwere", ["gwt"] = "Gawar-Bati", ["gwu"] = "Guwamu", ["gww"] = "Kwini", ["gwx"] = "Gua", ["gxx"] = "Wè Southern", ["gya"] = "Northwest Gbaya", ["gyb"] = "Garus", ["gyd"] = "Kayardild", ["gye"] = "Gyem", ["gyf"] = "Gungabula", ["gyg"] = "Gbayi", ["gyi"] = "Gyele", ["gyl"] = "Gayil", ["gym"] = "Ngäbere", ["gyn"] = "Guyanese Creole English", ["gyo"] = "Gyalsumdo", ["gyr"] = "Guarayu", ["gyy"] = "Gunya", ["gza"] = "Ganza", ["gzn"] = "Gane", ["ha"] = "Hausa", ["haa"] = "Hän", ["hab"] = "Hanoi Sign Language", ["hac"] = "Gurani", ["had"] = "Hatam", ["haf"] = "Haiphong Sign Language", ["hag"] = "Hanga", ["hah"] = "Hahon", ["hai"] = "Haida", ["haj"] = "Hajong", ["hak"] = "Hakka", ["hal"] = "Halang", ["ham"] = "Hewa", ["hao"] = "Hakö", ["hap"] = "Hupla", ["har"] = "Harari", ["has"] = "Haisla", ["hav"] = "Havu", ["haw"] = "Hawaiian", ["hax"] = "Southern Haida", ["hay"] = "Haya", ["haz"] = "Hazaragi", ["hba"] = "Hamba", ["hbb"] = "Huba", ["hbn"] = "Heiban", ["hbu"] = "Habu", ["hca"] = "अंडमान क्रियोल हिंदी", ["hch"] = "Huichol", ["hdn"] = "Northern Haida", ["hds"] = "Honduras Sign Language", ["hdy"] = "Hadiyya", ["he"] = "Hebrew", ["hea"] = "Northern Qiandong Miao", ["hed"] = "Herdé", ["heg"] = "Helong", ["heh"] = "Hehe", ["hei"] = "Heiltsuk", ["hem"] = "Hemba", ["hgm"] = "Haiǁom", ["hgw"] = "Haigwai", ["hhi"] = "Hoia Hoia", ["hhr"] = "Kerak", ["hhy"] = "Hoyahoya", ["hi"] = "हिंदी", ["hia"] = "Lamang", ["hib"] = "Hibito", ["hid"] = "Hidatsa", ["hif"] = "फीजी हिंदी", ["hig"] = "Kamwe", ["hih"] = "Pamosu", ["hii"] = "Hinduri", ["hij"] = "Hijuk", ["hik"] = "Seit-Kaitetu", ["hil"] = "Hiligaynon", ["hio"] = "Tshwa", ["hir"] = "Himarimã", ["hit"] = "Hittite", ["hiw"] = "Hiw", ["hix"] = "Hixkaryana", ["hji"] = "Haji", ["hka"] = "Kahe", ["hke"] = "Hunde", ["hkk"] = "Hunjara-Kaina Ke", ["hkn"] = "Mel-Khaonh", ["hks"] = "Hong Kong Sign Language", ["hla"] = "Halia", ["hlb"] = "Halbi", ["hld"] = "Halang Doan", ["hle"] = "Hlersu", ["hlt"] = "Nga La", ["hma"] = "Southern Mashan Hmong", ["hmb"] = "Humburi Senni", ["hmc"] = "Central Huishui Hmong", ["hmd"] = "A-Hmao", ["hme"] = "Eastern Huishui Hmong", ["hmf"] = "Hmong Don", ["hmg"] = "Southwestern Guiyang Hmong", ["hmh"] = "Southwestern Huishui Hmong", ["hmi"] = "Northern Huishui Hmong", ["hmj"] = "Ge", ["hmk"] = "Maek", ["hml"] = "Luopohe Hmong", ["hmm"] = "Central Mashan Hmong", ["hmn-pro"] = "Proto-Hmong", ["hmp"] = "Northern Mashan Hmong", ["hmq"] = "Eastern Qiandong Miao", ["hmr"] = "Hmar", ["hms"] = "Southern Qiandong Miao", ["hmt"] = "Hamtai", ["hmu"] = "Hamap", ["hmv"] = "Hmong Dô", ["hmw"] = "Western Mashan Hmong", ["hmx-mie-pro"] = "Proto-Mien", ["hmx-pro"] = "Proto-Hmong-Mien", ["hmy"] = "Southern Guiyang Hmong", ["hmz"] = "Hmong Shua", ["hna"] = "Mina", ["hnd"] = "Southern Hindko", ["hne"] = "Chhattisgarhi", ["hnh"] = "ǁAni", ["hni"] = "Hani", ["hnj"] = "Green Hmong", ["hnn"] = "Hanunoo", ["hno"] = "Northern Hindko", ["hns"] = "Caribbean Hindustani", ["hnu"] = "Hung", ["ho"] = "Hiri Motu", ["hoa"] = "Hoava", ["hob"] = "Austronesian Mari", ["hoc"] = "Ho", ["hod"] = "Holma", ["hoe"] = "Horom", ["hoh"] = "Hobyót", ["hoi"] = "Holikachuk", ["hoj"] = "Hadothi", ["hol"] = "Holu", ["hom"] = "Homa", ["hoo"] = "Holoholo", ["hop"] = "Hopi", ["hor"] = "Horo", ["hos"] = "Ho Chi Minh City Sign Language", ["hot"] = "Hote", ["hov"] = "Hovongan", ["how"] = "Honi", ["hoy"] = "Holiya", ["hoz"] = "Hozo", ["hpo"] = "Hpon", ["hps"] = "Hawai'i Pidgin Sign Language", ["hra"] = "Hrangkhol", ["hrc"] = "Niwer Mil", ["hre"] = "Hre", ["hrk"] = "Haruku", ["hrm"] = "Horned Miao", ["hro"] = "Haroi", ["hrp"] = "Nhirrpi", ["hrt"] = "Hértevin", ["hru"] = "Hruso", ["hrw"] = "Warwar Feni", ["hrx"] = "Hunsrik", ["hrz"] = "Harzani", ["hsb"] = "Upper Sorbian", ["hsh"] = "Hungarian Sign Language", ["hsl"] = "Hausa Sign Language", ["hsn"] = "Xiang", ["hss"] = "Harsusi", ["ht"] = "Haitian Creole", ["hti"] = "Hoti", ["hto"] = "Minica Huitoto", ["hts"] = "Hadza", ["htu"] = "Hitu", ["hu"] = "Hungarian", ["hub"] = "Huambisa", ["huc"] = "ǂHoan", ["hud"] = "Huaulu", ["huf"] = "Humene", ["hug"] = "Huachipaeri", ["huh"] = "Huilliche", ["hui"] = "Huli", ["huj"] = "Northern Guiyang Hmong", ["huk"] = "Hulung", ["hul"] = "Hula", ["hum"] = "Hungana", ["huo"] = "Hu", ["hup"] = "Hupa", ["huq"] = "Tsat", ["hur"] = "Halkomelem", ["hus"] = "Wastek", ["huu"] = "Murui Huitoto", ["huv"] = "Huave", ["huw"] = "Hukumina", ["hux"] = "Nüpode Huitoto", ["huy"] = "Hulaulá", ["huz"] = "Hunzib", ["hvc"] = "Haitian Vodoun Culture Language", ["hvk"] = "Haveke", ["hvn"] = "Sabu", ["hwa"] = "Wané", ["hwc"] = "Hawaiian Creole", ["hwo"] = "Hwana", ["hy"] = "Armenian", ["hya"] = "Hya", ["hyx-pro"] = "Proto-Armenian", ["hz"] = "Herero", ["ia"] = "Interlingua", ["iai"] = "Iaai", ["ian"] = "Iatmul", ["iar"] = "Purari", ["iba"] = "Iban", ["ibb"] = "Ibibio", ["ibd"] = "Iwaidja", ["ibe"] = "Akpes", ["ibg"] = "Ibanag", ["ibh"] = "Bih", ["ibl"] = "Ibaloi", ["ibm"] = "Agoi", ["ibn"] = "Ibino", ["ibr"] = "Ibuoro", ["ibu"] = "Ibu", ["iby"] = "Ibani", ["ica"] = "Ede Ica", ["ich"] = "Etkywan", ["icl"] = "Icelandic Sign Language", ["icr"] = "Islander Creole English", ["id"] = "Indonesian", ["ida"] = "Idakho-Isukha-Tiriki", ["idb"] = "Indo-Portuguese", ["idc"] = "Idon", ["idd"] = "Ede Idaca", ["ide"] = "Idere", ["idi"] = "Idi", ["idr"] = "Indri", ["ids"] = "Idesa", ["idt"] = "Idaté", ["idu"] = "Idoma", ["ie"] = "Interlingue", ["ifa"] = "Amganad Ifugao", ["ifb"] = "Batad Ifugao", ["ife"] = "Ifè", ["iff"] = "Ifo", ["ifk"] = "Tuwali Ifugao", ["ifm"] = "Teke-Fuumu", ["ifu"] = "Mayoyao Ifugao", ["ify"] = "Keley-I Kallahan", ["ig"] = "Igbo", ["igb"] = "Ebira", ["ige"] = "Igede", ["igg"] = "Igana", ["igl"] = "Igala", ["igm"] = "Kanggape", ["ign"] = "Ignaciano", ["igo"] = "Isebe", ["igs"] = "Glosa", ["igw"] = "Igwe", ["ihb"] = "Pidgin Iha", ["ihi"] = "Ihievbe", ["ihp"] = "Iha", ["ii"] = "Sichuan Yi", ["iir-nur-pro"] = "Proto-Nuristani", ["iir-pro"] = "प्रोटो-इंडो-ईरानी", ["ijc"] = "Izon", ["ije"] = "Biseni", ["ijj"] = "Ede Ije", ["ijn"] = "Kalabari", ["ijo-pro"] = "Proto-Ijoid", ["ijs"] = "Southeast Ijo", ["ik"] = "Inupiaq", ["ike"] = "Eastern Canadian Inuktitut", ["iki"] = "Iko", ["ikk"] = "Ika", ["ikl"] = "Ikulu", ["iko"] = "Olulumo-Ikom", ["ikp"] = "Ikpeshi", ["ikr"] = "Ikaranggal", ["iks"] = "Inuit Sign Language", ["ikt"] = "Inuvialuktun", ["ikv"] = "Iku-Gora-Ankwa", ["ikw"] = "Ikwere", ["ikx"] = "Ik", ["ikz"] = "Ikizu", ["ila"] = "Ile Ape", ["ilb"] = "Ila", ["ilg"] = "Ilgar", ["ili"] = "Ili Turki", ["ilk"] = "Ilongot", ["ill"] = "Iranun", ["ilo"] = "Ilocano", ["ils"] = "International Sign", ["ilu"] = "Ili'uun", ["ilv"] = "Ilue", ["ima"] = "Mala Malasar", ["imi"] = "Anamgura", ["iml"] = "Miluk", ["imn"] = "Imonda", ["imo"] = "Imbongu", ["imr"] = "Imroing", ["ims"] = "Marsian", ["imy"] = "Milyan", ["inb"] = "Inga", ["inc-ash"] = "Ashokan Prakrit", ["inc-cen-pro"] = "Proto-Central Indo-Aryan", ["inc-gup"] = "Gurjar Apabhramsa", ["inc-kam"] = "Kamarupi Prakrit", ["inc-kha"] = "Khasa Prakrit", ["inc-kho"] = "Kholosi", ["inc-mas"] = "मध्य असमिया", ["inc-mbn"] = "Middle Bengali", ["inc-mgd"] = "मागधी प्राकृत", ["inc-mgu"] = "Middle Gujarati", ["inc-mor"] = "Middle Oriya", ["inc-oas"] = "प्रारंभिक असमिया", ["inc-obn"] = "Old Bengali", ["inc-ogu"] = "Old Gujarati", ["inc-ohi"] = "पुरानी हिंदी", ["inc-oor"] = "Old Oriya", ["inc-opa"] = "Old Punjabi", ["inc-ork"] = "Old Kamta", ["inc-pra"] = "प्राकृत", ["inc-pro"] = "प्रोटो-इंडो-आर्यन", ["inc-psc"] = "Paisaci Prakrit", ["inc-sap"] = "Sauraseni Apabhramsa", ["inc-tak"] = "Takka Apabhramsa", ["inc-vra"] = "Vracada Apabhramsa", ["ine-ana-pro"] = "Proto-Anatolian", ["ine-bsl-pro"] = "Proto-Balto-Slavic", ["ine-pae"] = "Paeonian", ["ine-pro"] = "प्रोटो-इंडो-यूरोपियन", ["ine-toc-pro"] = "Proto-Tocharian", ["ing"] = "Deg Xinag", ["inh"] = "Ingush", ["inj"] = "Jungle Inga", ["inl"] = "Indonesian Sign Language", ["inm"] = "Minaean", ["inn"] = "Isinai", ["ino"] = "Inoke-Yate", ["inp"] = "Iñapari", ["ins"] = "Indian Sign Language", ["int"] = "Intha", ["inz"] = "Ineseño", ["io"] = "Ido", ["ior"] = "Inor", ["iou"] = "Tuma-Irumu", ["iow"] = "Chiwere", ["ipi"] = "Ipili", ["ipo"] = "Ipiko", ["iqu"] = "Iquito", ["iqw"] = "Ikwo", ["ira-kms-pro"] = "Proto-Komisenian", ["ira-mny-pro"] = "Proto-Munji-Yidgha", ["ira-mpr-pro"] = "Proto-Medo-Parthian", ["ira-pat-pro"] = "Proto-Pathan", ["ira-pro"] = "प्रोटो-ईरानी", ["ira-sgc-pro"] = "Proto-Sogdic", ["ira-sgi-pro"] = "Proto-Sanglechi-Ishkashimi", ["ira-shr-pro"] = "Proto-Shughni-Roshani", ["ira-shy-pro"] = "Proto-Shughni-Yazghulami", ["ira-sym-pro"] = "Proto-Shughni-Yazghulami-Munji", ["ira-wnj"] = "Vanji", ["ira-zgr-pro"] = "Proto-Zaza-Gorani", ["ire"] = "Iresim", ["irh"] = "Irarutu", ["iri"] = "Rigwe", ["irk"] = "Iraqw", ["irn"] = "Irantxe", ["iro-ere"] = "Erie", ["iro-min"] = "Mingo", ["iro-nor-pro"] = "Proto-North Iroquoian", ["iro-pro"] = "Proto-Iroquoian", ["irr"] = "Ir", ["iru"] = "Irula", ["irx"] = "Kamberau", ["iry"] = "Iraya", ["is"] = "Icelandic", ["isa"] = "Isabi", ["isc"] = "Isconahua", ["isd"] = "Isnag", ["ise"] = "Italian Sign Language", ["isg"] = "Irish Sign Language", ["ish"] = "Esan", ["isi"] = "Nkem-Nkum", ["isk"] = "Ishkashimi", ["ism"] = "Masimasi", ["isn"] = "Isanzu", ["iso"] = "Isoko", ["isr"] = "Israeli Sign Language", ["ist"] = "Istriot", ["isu"] = "Isu", ["it"] = "Italian", ["itb"] = "Binongan Itneg", ["itc-pro"] = "Proto-Italic", ["itd"] = "Southern Tidong", ["ite"] = "Itene", ["iti"] = "Inlaod Itneg", ["itk"] = "Judeo-Italian", ["itl"] = "Itelmen", ["itm"] = "Itu Mbon Uzo", ["ito"] = "Itonama", ["itr"] = "Iteri", ["its"] = "Itsekiri", ["itt"] = "Maeng Itneg", ["itv"] = "Itawit", ["itw"] = "Ito", ["itx"] = "Itik", ["ity"] = "Moyadan Itneg", ["itz"] = "Itzá", ["iu"] = "Inuktitut", ["ium"] = "Iu Mien", ["ivb"] = "Ibatan", ["ivv"] = "Ivatan", ["iwk"] = "I-Wak", ["iwm"] = "Iwam", ["iwo"] = "Iwur", ["iws"] = "Sepik Iwam", ["ixc"] = "Ixcatec", ["ixl"] = "Ixil", ["iya"] = "Iyayu", ["iyo"] = "Mesaka", ["iyx"] = "Yaa", ["izh"] = "Ingrian", ["izi"] = "Izi-Ezaa-Ikwo-Mgbo", ["izr"] = "Izere", ["izz"] = "Izi", ["ja"] = "Japanese", ["jaa"] = "Jamamadí", ["jab"] = "Hyam", ["jac"] = "Jakaltek", ["jad"] = "Jahanka", ["jae"] = "Jabem", ["jaf"] = "Jara", ["jah"] = "Jah Hut", ["jaj"] = "Zazao", ["jal"] = "Yalahatan", ["jam"] = "Jamaican Creole", ["jan"] = "Janday", ["jao"] = "Yanyuwa", ["jaq"] = "Yaqay", ["jas"] = "New Caledonian Javanese", ["jat"] = "Jakati", ["jau"] = "Yaur", ["jax"] = "Jambi Malay", ["jay"] = "Yan-nhangu", ["jaz"] = "Jawe", ["jbj"] = "Arandai", ["jbk"] = "Barikewa", ["jbn"] = "Nefusa", ["jbo"] = "Lojban", ["jbr"] = "Jofotek-Bromnya", ["jbt"] = "Jabutí", ["jbu"] = "Jukun Takum", ["jbw"] = "Yawijibaya", ["jcs"] = "Jamaican Country Sign Language", ["jct"] = "Krymchak", ["jda"] = "Jad", ["jdg"] = "Jadgali", ["jdt"] = "Judeo-Tat", ["jeb"] = "Jebero", ["jee"] = "Jerung", ["jeg"] = "Jeng", ["jeh"] = "Jeh", ["jei"] = "Yei", ["jek"] = "Jeri Kuo", ["jel"] = "Yelmek", ["jen"] = "Dza", ["jer"] = "Jere", ["jet"] = "Manem", ["jeu"] = "Jonkor Bourmataguil", ["jgb"] = "Ngbee", ["jgk"] = "Gwak", ["jgo"] = "Ngomba", ["jhi"] = "Jehai", ["jhs"] = "Jhankot Sign Language", ["jia"] = "Jina", ["jib"] = "Jibu", ["jic"] = "Tol", ["jid"] = "Bu", ["jie"] = "Jilbe", ["jig"] = "Jingulu", ["jih"] = "Shangzhai", ["jii"] = "Jiiddu", ["jil"] = "Jilim", ["jim"] = "Jimjimen", ["jio"] = "Jiamao", ["jiq"] = "Khroskyabs", ["jit"] = "Jita", ["jiu"] = "Youle Jinuo", ["jiv"] = "Shuar", ["jiy"] = "Buyuan Jinuo", ["jje"] = "Jeju", ["jjr"] = "Zhár", ["jka"] = "Kaera", ["jko"] = "Kubo", ["jkr"] = "Koro (India)", ["jku"] = "Labir", ["jle"] = "Ngile", ["jls"] = "Jamaican Sign Language", ["jma"] = "Dima", ["jmb"] = "Zumbun", ["jmc"] = "Machame", ["jmd"] = "Yamdena", ["jmi"] = "Jimi", ["jml"] = "Jumli", ["jmn"] = "Makuri Naga", ["jmr"] = "Kamara", ["jmw"] = "Mouwase", ["jmx"] = "Western Juxtlahuaca Mixtec", ["jna"] = "Jangshung", ["jnd"] = "Jandavra", ["jng"] = "Yangman", ["jni"] = "Janji", ["jnj"] = "Yemsa", ["jnl"] = "Rawat", ["jns"] = "Jaunsari", ["job"] = "Joba", ["jod"] = "Wojenaka", ["jor"] = "Jorá", ["jos"] = "Jordanian Sign Language", ["jow"] = "Jowulu", ["jpr"] = "Judeo-Persian", ["jpx-pro"] = "Proto-Japonic", ["jpx-ryu-pro"] = "Proto-Ryukyuan", ["jqr"] = "Jaqaru", ["jra"] = "Jarai", ["jrr"] = "Jiru", ["jru"] = "Japrería", ["jsl"] = "Japanese Sign Language", ["jua"] = "Júma", ["jub"] = "Wannu", ["juc"] = "Jurchen", ["jud"] = "Worodougou", ["juh"] = "Hone", ["jui"] = "Ngadjuri", ["juk"] = "Wapan", ["jul"] = "Jirel", ["jum"] = "Jumjum", ["jun"] = "Juang", ["juo"] = "Jiba", ["jup"] = "Hupdë", ["jur"] = "Jurúna", ["jus"] = "Jumla Sign Language", ["jut"] = "Jutish", ["juu"] = "Ju", ["juw"] = "Wãpha", ["juy"] = "Juray", ["jv"] = "Javanese", ["jvd"] = "Javindo", ["jvn"] = "Caribbean Javanese", ["jwi"] = "Jwira-Pepesa", ["jyy"] = "Jaya", ["ka"] = "Georgian", ["kaa"] = "Karakalpak", ["kab"] = "Kabyle", ["kac"] = "Jingpho", ["kad"] = "Kadara", ["kae"] = "Ketangalan", ["kaf"] = "Katso", ["kag"] = "Kajaman", ["kah"] = "Fer", ["kai"] = "Karekare", ["kaj"] = "Jju", ["kak"] = "Kayapa Kallahan", ["kam"] = "Kamba", ["kao"] = "Kassonke", ["kap"] = "Bezhta", ["kaq"] = "Capanahua", ["kar-pro"] = "Proto-Karen", ["kaw"] = "Old Javanese", ["kax"] = "Kao", ["kay"] = "Kamayurá", ["kba"] = "Kalarko", ["kbb"] = "Kaxuyana", ["kbc"] = "Kadiwéu", ["kbd"] = "Kabardian", ["kbe"] = "Kanju", ["kbh"] = "Camsá", ["kbi"] = "Kaptiau", ["kbj"] = "Kari", ["kbk"] = "Grass Koiari", ["kbm"] = "Iwal", ["kbn"] = "Kare (Africa)", ["kbo"] = "Keliko", ["kbp"] = "Kabiyé", ["kbq"] = "Kamano", ["kbr"] = "Kafa", ["kbs"] = "Kande", ["kbt"] = "Gabadi", ["kbu"] = "Kabutra", ["kbv"] = "Kamberataro", ["kbw"] = "Kaiep", ["kbx"] = "Ap Ma", ["kbz"] = "Duhwa", ["kca"] = "Khanty", ["kcb"] = "Kawacha", ["kcc"] = "Lubila", ["kcd"] = "Ngkâlmpw Kanum", ["kce"] = "Kaivi", ["kcf"] = "Ukaan", ["kcg"] = "Tyap", ["kch"] = "Vono", ["kci"] = "Kamantan", ["kcj"] = "Kobiana", ["kck"] = "Kalanga", ["kcl"] = "Kala", ["kcm"] = "Tar Gula", ["kcn"] = "Nubi", ["kco"] = "Kinalakna", ["kcp"] = "Kanga", ["kcq"] = "Kamo", ["kcr"] = "Katla", ["kcs"] = "Koenoem", ["kct"] = "Kaian", ["kcu"] = "Kikami", ["kcv"] = "Kete", ["kcw"] = "Kabwari", ["kcx"] = "Kachama-Ganjule", ["kcy"] = "Korandje", ["kcz"] = "Konongo", ["kda"] = "Worimi", ["kdc"] = "Kutu", ["kdd"] = "Yankunytjatjara", ["kde"] = "Makonde", ["kdf"] = "Mamusi", ["kdg"] = "Seba", ["kdh"] = "Tem", ["kdi"] = "Kumam", ["kdj"] = "Karamojong", ["kdk"] = "Numee", ["kdl"] = "Tsikimba", ["kdm"] = "Kagoma", ["kdn"] = "Kunda", ["kdp"] = "Kaningdon-Nindem", ["kdq"] = "Koch", ["kdr"] = "Karaim", ["kdt"] = "Kuy", ["kdu"] = "Kadaru", ["kdv"] = "Kado", ["kdw"] = "Koneraw", ["kdx"] = "Kam", ["kdy"] = "Keder", ["kdz"] = "Kwaja", ["kea"] = "Kabuverdianu", ["keb"] = "Kélé", ["kec"] = "Keiga", ["ked"] = "Kerewe", ["kee"] = "Eastern Keres", ["kef"] = "Kpessi", ["keg"] = "Tese", ["keh"] = "Keak", ["kei"] = "Kei", ["kej"] = "Kadar", ["kek"] = "Q'eqchi", ["kel"] = "Kela-Yela", ["kem"] = "Kemak", ["ken"] = "Kenyang", ["keo"] = "Kakwa", ["kep"] = "Kaikadi", ["keq"] = "Kamar", ["ker"] = "Kera", ["kes"] = "Kugbo", ["ket"] = "Ket", ["keu"] = "Akebu", ["kev"] = "Kanikkaran", ["kew"] = "Kewa", ["kex"] = "Kukna", ["key"] = "Kupia", ["kez"] = "Kukele", ["kfa"] = "Kodava", ["kfb"] = "Kolami", ["kfc"] = "Konda-Dora", ["kfd"] = "Korra Koraga", ["kfe"] = "Kota (India)", ["kff"] = "Koya", ["kfg"] = "Kudiya", ["kfh"] = "Kurichiya", ["kfi"] = "Kannada Kurumba", ["kfj"] = "Kemiehua", ["kfk"] = "Kinnauri", ["kfl"] = "Kung", ["kfn"] = "Kuk", ["kfo"] = "Koro (West Africa)", ["kfp"] = "Korwa", ["kfq"] = "Korku", ["kfr"] = "Kachchi", ["kfs"] = "Bilaspuri", ["kft"] = "Kanjari", ["kfu"] = "Katkari", ["kfv"] = "Kurmukar", ["kfw"] = "Kharam Naga", ["kfx"] = "Kullu Pahari", ["kfy"] = "Kumaoni", ["kfz"] = "Koromfé", ["kg"] = "Kongo", ["kga"] = "Koyaga", ["kgb"] = "Kawe", ["kgd"] = "Kataang", ["kge"] = "Komering", ["kgf"] = "Kube", ["kgg"] = "Kusunda", ["kgi"] = "Selangor Sign Language", ["kgj"] = "Gamale Kham", ["kgk"] = "Kaiwá", ["kgl"] = "Kunggari", ["kgm"] = "Karipúna", ["kgn"] = "Karingani", ["kgo"] = "Krongo", ["kgp"] = "Kaingang", ["kgq"] = "Kamoro", ["kgr"] = "Abun", ["kgs"] = "Kumbainggar", ["kgt"] = "Somyev", ["kgu"] = "Kobol", ["kgv"] = "Karas", ["kgw"] = "Karon Dori", ["kgx"] = "Kamaru", ["kgy"] = "Kyerung", ["kha"] = "Khasi", ["khb"] = "Lü", ["khc"] = "Tukang Besi North", ["khd"] = "Bädi Kanum", ["khe"] = "Korowai", ["khf"] = "Khuen", ["khh"] = "Kehu", ["khi-kho-pro"] = "Proto-Khoe", ["khi-kun"] = "ǃKung", ["khj"] = "Kuturmi", ["khl"] = "Lusi", ["khn"] = "Khandeshi", ["kho"] = "Khotanese", ["khp"] = "Kapauri", ["khq"] = "Koyra Chiini", ["khr"] = "Kharia", ["khs"] = "Kasua", ["kht"] = "Khamti", ["khu"] = "Nkhumbi", ["khv"] = "Khvarshi", ["khw"] = "Khowar", ["khx"] = "Kanu", ["khy"] = "Ekele", ["khz"] = "Keapara", ["ki"] = "Kikuyu", ["kia"] = "Kim", ["kib"] = "Koalib", ["kic"] = "Kickapoo", ["kid"] = "Koshin", ["kie"] = "Kibet", ["kif"] = "Eastern Parbate Kham", ["kig"] = "Kimaama", ["kih"] = "Kilmeri", ["kii"] = "Kitsai", ["kij"] = "Kilivila", ["kil"] = "Kariya", ["kim"] = "Tofa", ["kio"] = "Kiowa", ["kip"] = "Sheshi Kham", ["kiq"] = "Kosadle", ["kis"] = "Kis", ["kit"] = "Agob", ["kiv"] = "Kimbu", ["kiw"] = "Northeast Kiwai", ["kix"] = "Khiamniungan Naga", ["kiy"] = "Kirikiri", ["kiz"] = "Kisi", ["kj"] = "Kwanyama", ["kja"] = "Mlap", ["kjb"] = "Q'anjob'al", ["kjc"] = "Coastal Konjo", ["kjd"] = "Southern Kiwai", ["kje"] = "Kisar", ["kjg"] = "Khmu", ["kjh"] = "Khakas", ["kji"] = "Zabana", ["kjj"] = "Khinalug", ["kjk"] = "Highland Konjo", ["kjl"] = "Kham", ["kjm"] = "Kháng", ["kjn"] = "Kunjen", ["kjo"] = "Harijan Kinnauri", ["kjp"] = "Eastern Pwo", ["kjq"] = "Western Keres", ["kjr"] = "Kurudu", ["kjs"] = "East Kewa", ["kjt"] = "Phrae Pwo", ["kju"] = "Kashaya", ["kjx"] = "Ramopa", ["kjy"] = "Erave", ["kjz"] = "Bumthangkha", ["kk"] = "Kazakh", ["kka"] = "Kakanda", ["kkb"] = "Kwerisa", ["kkc"] = "Odoodee", ["kkd"] = "Kinuku", ["kke"] = "Kakabe", ["kkf"] = "Kalaktang Monpa", ["kkg"] = "Mabaka Valley Kalinga", ["kkh"] = "Khün", ["kki"] = "Kagulu", ["kkj"] = "Kako", ["kkk"] = "Kokota", ["kkl"] = "Kosarek Yale", ["kkm"] = "Kiong", ["kkn"] = "Kon Keu", ["kko"] = "Karko", ["kkp"] = "Koko-Bera", ["kkq"] = "Kaiku", ["kkr"] = "Kir-Balar", ["kks"] = "Kirfi", ["kkt"] = "Koi", ["kku"] = "Tumi", ["kkv"] = "Kangean", ["kkw"] = "Teke-Kukuya", ["kkx"] = "Kohin", ["kky"] = "Guugu Yimidhirr", ["kkz"] = "Kaska", ["kl"] = "Greenlandic", ["kla"] = "Klamath-Modoc", ["klb"] = "Kiliwa", ["klc"] = "Kolbila", ["kld"] = "Gamilaraay", ["kle"] = "Kulung", ["klf"] = "Kendeje", ["klg"] = "Tagakaulu Kalagan", ["klh"] = "Weliki", ["kli"] = "Kalumpang", ["klj"] = "Khalaj", ["klk"] = "Kono (Nigeria)", ["kll"] = "Kagan Kalagan", ["klm"] = "Kolom", ["kln"] = "Kalenjin", ["klo"] = "Kapya", ["klp"] = "Kamasa", ["klq"] = "Rumu", ["klr"] = "Khaling", ["kls"] = "Kalasha", ["klt"] = "Nukna", ["klu"] = "Klao", ["klv"] = "Maskelynes", ["klw"] = "Lindu", ["klx"] = "Koluwawa", ["kly"] = "Kalao", ["klz"] = "Kabola", ["km"] = "Khmer", ["kma"] = "Konni", ["kmb"] = "Kimbundu", ["kmc"] = "Southern Kam", ["kmd"] = "Madukayang Kalinga", ["kme"] = "Bakole", ["kmf"] = "Kare (New Guinea)", ["kmg"] = "Kâte", ["kmh"] = "Kalam", ["kmi"] = "Kami", ["kmj"] = "Kumarbhag Paharia", ["kmk"] = "Limos Kalinga", ["kml"] = "Tanudan Kalinga", ["kmm"] = "Kom (India)", ["kmn"] = "Awtuw", ["kmo"] = "Kwoma", ["kmp"] = "Gimme", ["kmq"] = "Kwama", ["kmr"] = "Northern Kurdish", ["kms"] = "Kamasau", ["kmt"] = "Kemtuik", ["kmu"] = "Kanite", ["kmv"] = "Karipúna Creole French", ["kmw"] = "Kumu", ["kmx"] = "Waboda", ["kmy"] = "Koma", ["kmz"] = "Khorasani Turkish", ["kn"] = "Kannada", ["kna"] = "Kanakuru", ["knb"] = "Lubuagan Kalinga", ["knd"] = "Konda", ["kne"] = "Kankanaey", ["knf"] = "Mankanya", ["kni"] = "Kanufi", ["knj"] = "Akatek", ["knk"] = "Kuranko", ["knl"] = "Keninjal", ["knm"] = "Kanamari", ["kno"] = "Kono (Sierra Leone)", ["knp"] = "Kwanja", ["knq"] = "Kintaq", ["knr"] = "Kaningra", ["kns"] = "Kensiu", ["knt"] = "Katukina", ["knu"] = "Kono (Guinea)", ["knv"] = "Tabo", ["knx"] = "Kendayan", ["kny"] = "Kanyok", ["knz"] = "Kalamsé", ["ko"] = "Korean", ["ko-ear"] = "Early Modern Korean", ["koa"] = "Konomala", ["koc"] = "Kpati", ["kod"] = "Kodi", ["koe"] = "Kacipo-Balesi", ["kof"] = "Kubi", ["kog"] = "Cogui", ["koh"] = "Koyo", ["koi"] = "Komi-Permyak", ["kok"] = "Konkani", ["kol"] = "Kol (New Guinea)", ["koo"] = "Konzo", ["kop"] = "Waube", ["koq"] = "Kota (Gabon)", ["kos"] = "Kosraean", ["kot"] = "Lagwan", ["kou"] = "Koke", ["kov"] = "Kudu-Camo", ["kow"] = "Kugama", ["koy"] = "Koyukon", ["koz"] = "Korak", ["kpa"] = "Kutto", ["kpb"] = "Mullu Kurumba", ["kpc"] = "Curripaco", ["kpd"] = "Koba", ["kpe"] = "Kpelle", ["kpf"] = "Komba", ["kpg"] = "Kapingamarangi", ["kph"] = "Kplang", ["kpi"] = "Kofei", ["kpj"] = "Karajá", ["kpk"] = "Kpan", ["kpl"] = "Kpala", ["kpm"] = "Koho", ["kpn"] = "Kepkiriwát", ["kpo"] = "Ikposo", ["kpp"] = "Paku Karen", ["kpq"] = "Korupun-Sela", ["kpr"] = "Korafe-Yegha", ["kps"] = "Tehit", ["kpt"] = "Karata", ["kpu"] = "Kafoa", ["kpv"] = "Komi-Zyrian", ["kpw"] = "Kobon", ["kpx"] = "Mountain Koiari", ["kpy"] = "Koryak", ["kpz"] = "Kupsabiny", ["kqa"] = "Mum", ["kqb"] = "Kovai", ["kqc"] = "Doromu-Koki", ["kqd"] = "Koy Sanjaq Surat", ["kqe"] = "Kalagan", ["kqf"] = "Kakabai", ["kqg"] = "Khe", ["kqh"] = "Kisankasa", ["kqi"] = "Koitabu", ["kqj"] = "Koromira", ["kqk"] = "Kotafon Gbe", ["kql"] = "Kyenele", ["kqm"] = "Khisa", ["kqn"] = "Kaonde", ["kqo"] = "Eastern Krahn", ["kqp"] = "Kimré", ["kqq"] = "Krenak", ["kqr"] = "Kimaragang", ["kqs"] = "Northern Kissi", ["kqt"] = "Klias River Kadazan", ["kqu"] = "Seroa", ["kqv"] = "Okolod", ["kqw"] = "Kandas", ["kqx"] = "Mser", ["kqy"] = "Koorete", ["kqz"] = "Korana", ["kr"] = "Kanuri", ["kra"] = "Kumhali", ["krb"] = "Karkin", ["krc"] = "Karachay-Balkar", ["krd"] = "Kairui-Midiki", ["kre"] = "Panará", ["krf"] = "Koro (Vanuatu)", ["krh"] = "Kurama", ["kri"] = "Krio", ["krj"] = "Kinaray-a", ["krk"] = "Kerek", ["krl"] = "Karelian", ["krm"] = "Krim", ["krn"] = "Sapo", ["kro-pro"] = "Proto-Kru", ["krp"] = "Korop", ["krr"] = "Kru'ng", ["krs"] = "Kresh", ["kru"] = "Kurukh", ["krv"] = "Kavet", ["krw"] = "Western Krahn", ["krx"] = "Karon", ["kry"] = "Kryts", ["krz"] = "Sota Kanum", ["ks"] = "Kashmiri", ["ksa"] = "Shuwa-Zamani", ["ksb"] = "Shambala", ["ksc"] = "Southern Kalinga", ["ksd"] = "Tolai", ["kse"] = "Kuni", ["ksf"] = "Bafia", ["ksg"] = "Kusaghe", ["ksi"] = "Krisa", ["ksj"] = "Uare", ["ksk"] = "Kansa", ["ksl"] = "Kumalu", ["ksm"] = "Kumba", ["ksn"] = "Kasiguranin", ["kso"] = "Kofa", ["ksp"] = "Kaba", ["ksq"] = "Kwaami", ["ksr"] = "Borong", ["kss"] = "Southern Kissi", ["kst"] = "Winyé", ["ksu"] = "Khamyang", ["ksv"] = "Kusu", ["ksw"] = "S'gaw Karen", ["ksx"] = "Kedang", ["ksy"] = "Kharia Thar", ["ksz"] = "Kodaku", ["kta"] = "Katua", ["ktb"] = "Kambaata", ["ktc"] = "Kholok", ["ktd"] = "Kokata", ["ktf"] = "Kwami", ["ktg"] = "Kalkatungu", ["kth"] = "Karanga", ["kti"] = "North Muyu", ["ktj"] = "Plapo Krumen", ["ktk"] = "Kaniet", ["ktl"] = "Koroshi", ["ktm"] = "Kurti", ["ktn"] = "Karitiâna", ["kto"] = "Kuot", ["ktp"] = "Kaduo", ["ktq"] = "Katabaga", ["ktr"] = "Kota Marudu Tinagas", ["kts"] = "South Muyu", ["ktt"] = "Ketum", ["ktu"] = "Kituba", ["ktv"] = "Eastern Katu", ["ktw"] = "Kato", ["ktx"] = "Kaxararí", ["kty"] = "Kango", ["ktz"] = "Juǀ'hoan", ["ku-pro"] = "Proto-Kurdish", ["kub"] = "Kutep", ["kuc"] = "Kwinsu", ["kud"] = "Auhelawa", ["kue"] = "Kuman", ["kuf"] = "Western Katu", ["kug"] = "Kupa", ["kuh"] = "Kushi", ["kui"] = "Kuikúro", ["kuj"] = "Kuria", ["kuk"] = "Kepo'", ["kul"] = "Kulere", ["kum"] = "Kumyk", ["kun"] = "Kunama", ["kuo"] = "Kumukio", ["kup"] = "Kunimaipa", ["kuq"] = "Karipuna", ["kus"] = "Kusaal", ["kut"] = "Kutenai", ["kuu"] = "Upper Kuskokwim", ["kuv"] = "Kur", ["kuw"] = "Kpagua", ["kux"] = "Kukatja", ["kuy"] = "Kuuku-Ya'u", ["kuz"] = "Kunza", ["kva"] = "Bagvalal", ["kvb"] = "Kubu", ["kvc"] = "Kove", ["kvd"] = "Kui (Indonesia)", ["kve"] = "Kalabakan", ["kvf"] = "Kabalai", ["kvg"] = "Kuni-Boazi", ["kvh"] = "Komodo", ["kvi"] = "Kwang", ["kvj"] = "Psikye", ["kvk"] = "Korean Sign Language", ["kvl"] = "Brek Karen", ["kvm"] = "Kendem", ["kvn"] = "Border Kuna", ["kvo"] = "Dobel", ["kvp"] = "Kompane", ["kvq"] = "Geba Karen", ["kvr"] = "Kerinci", ["kvt"] = "Lahta Karen", ["kvu"] = "Yinbaw Karen", ["kvv"] = "Kola", ["kvw"] = "Wersing", ["kvx"] = "Parkari Koli", ["kvy"] = "Yintale Karen", ["kvz"] = "Tsakwambo", ["kw"] = "Cornish", ["kwa"] = "Dâw", ["kwb"] = "Baa", ["kwc"] = "Likwala", ["kwd"] = "Kwaio", ["kwe"] = "Kwerba", ["kwf"] = "Kwara'ae", ["kwg"] = "Sara Kaba Deme", ["kwh"] = "Kowiai", ["kwi"] = "Awa-Cuaiquer", ["kwj"] = "Kwanga", ["kwk"] = "Kwak'wala", ["kwl"] = "Kofyar", ["kwm"] = "Kwambi", ["kwn"] = "Kwangali", ["kwo"] = "Kwomtari", ["kwp"] = "Kodia", ["kwq"] = "Kwak", ["kwr"] = "Kwer", ["kws"] = "Kwese", ["kwt"] = "Kwesten", ["kwu"] = "Kwakum", ["kwv"] = "Sara Kaba Náà", ["kww"] = "Kwinti", ["kwx"] = "Khirwar", ["kwz"] = "Kwadi", ["kxa"] = "Kairiru", ["kxb"] = "Krobu", ["kxc"] = "Khonso", ["kxd"] = "Brunei Malay", ["kxe"] = "Kakihum", ["kxf"] = "Manumanaw Karen", ["kxh"] = "Karo", ["kxi"] = "Keningau Murut", ["kxj"] = "Kulfa", ["kxk"] = "Zayein Karen", ["kxl"] = "Nepali Kurux", ["kxm"] = "Northern Khmer", ["kxn"] = "Kanowit", ["kxo"] = "Kanoé", ["kxp"] = "Wadiyara Koli", ["kxq"] = "Smärky Kanum", ["kxr"] = "Koro (New Guinea)", ["kxs"] = "Kangjia", ["kxt"] = "Koiwat", ["kxu"] = "Kui (India)", ["kxv"] = "Kuvi", ["kxw"] = "Konai", ["kxx"] = "Likuba", ["kxy"] = "Kayong", ["kxz"] = "Kerewo", ["ky"] = "Kyrgyz", ["kya"] = "Kwaya", ["kyb"] = "Butbut Kalinga", ["kyc"] = "Kyaka", ["kyd"] = "Karey", ["kye"] = "Krache", ["kyf"] = "Kouya", ["kyg"] = "Keyagana", ["kyh"] = "Karok", ["kyi"] = "Kiput", ["kyj"] = "Karao", ["kyk"] = "Kamayo", ["kyl"] = "Kalapuya", ["kym"] = "Kpatili", ["kyn"] = "Karolanos", ["kyo"] = "Kelon", ["kyp"] = "Kang", ["kyq"] = "Kenga", ["kyr"] = "Kuruáya", ["kys"] = "Baram Kayan", ["kyt"] = "Kayagar", ["kyu"] = "Western Kayah", ["kyv"] = "Kayort", ["kyw"] = "Kudmali", ["kyx"] = "Rapoisi", ["kyy"] = "Kambaira", ["kyz"] = "Kayabí", ["kza"] = "Western Karaboro", ["kzb"] = "Kaibobo", ["kzc"] = "Bondoukou Kulango", ["kzd"] = "Kadai", ["kze"] = "Kosena", ["kzf"] = "Da'a Kaili", ["kzg"] = "Kikai", ["kzh"] = "Dongolawi", ["kzi"] = "Kelabit", ["kzj"] = "Coastal Kadazan", ["kzk"] = "Kazukuru", ["kzl"] = "Kayeli", ["kzm"] = "Kais", ["kzn"] = "Kokola", ["kzo"] = "Kaningi", ["kzp"] = "Kaidipang", ["kzq"] = "Kaike", ["kzr"] = "Karang", ["kzs"] = "Sugut Dusun", ["kzt"] = "Tambunan Dusun", ["kzu"] = "Kayupulau", ["kzv"] = "Komyandaret", ["kzw"] = "Kariri", ["kzx"] = "Kamarian", ["kzy"] = "Kango-Sua", ["kzz"] = "Kalabra", ["la"] = "Latin", ["laa"] = "Lapuyan Subanun", ["lab"] = "Linear A", ["lac"] = "Lacandon", ["lad"] = "Ladino", ["lae"] = "Pattani", ["laf"] = "Lafofa", ["lag"] = "Langi", ["lah"] = "Lahnda", ["lai"] = "Lambya", ["laj"] = "Lango (Uganda)", ["lak"] = "Laka", ["lam"] = "Lamba", ["lan"] = "Laru", ["lap"] = "Kabba-Laka", ["laq"] = "Qabiao", ["lar"] = "Larteh", ["las"] = "Gur Lama", ["lau"] = "Laba", ["law"] = "Lauje", ["lax"] = "Tiwa", ["lay"] = "Lama Bai", ["laz"] = "Aribwatsa", ["lb"] = "Luxembourgish", ["lbb"] = "Label", ["lbc"] = "Lakkia", ["lbe"] = "Lak", ["lbf"] = "Tinani", ["lbg"] = "Laopang", ["lbi"] = "La'bi", ["lbj"] = "Ladakhi", ["lbk"] = "Central Bontoc", ["lbl"] = "Libon Bikol", ["lbm"] = "Lodhi", ["lbn"] = "Lamet", ["lbo"] = "Laven", ["lbq"] = "Wampar", ["lbr"] = "Northern Lorung", ["lbs"] = "Libyan Sign Language", ["lbt"] = "Lachi", ["lbu"] = "Labu", ["lbv"] = "Lavatbura-Lamusong", ["lbw"] = "Tolaki", ["lbx"] = "Lawangan", ["lby"] = "Lamu-Lamu", ["lbz"] = "Lardil", ["lcc"] = "Legenyem", ["lcd"] = "Lola", ["lce"] = "Loncong", ["lcf"] = "Lubu", ["lch"] = "Luchazi", ["lcl"] = "Lisela", ["lcm"] = "Tungag", ["lcp"] = "Western Lawa", ["lcq"] = "Luhu", ["lcs"] = "Lisabata-Nuniali", ["lda"] = "Kla", ["ldb"] = "Idun", ["ldd"] = "Luri (Nigeria)", ["ldg"] = "Lenyima", ["ldh"] = "Lamja-Dengsa-Tola", ["ldj"] = "Lemoro", ["ldk"] = "Leelau", ["ldl"] = "Kaan", ["ldm"] = "Landoma", ["ldn"] = "Láadan", ["ldo"] = "Loo", ["ldp"] = "Tso", ["ldq"] = "Lufu", ["lea"] = "Lega-Shabunda", ["leb"] = "Lala-Bisa", ["lec"] = "Leco", ["led"] = "Lendu", ["lee"] = "Lyélé", ["lef"] = "Lelemi", ["leh"] = "Lenje", ["lei"] = "Lemio", ["lej"] = "Lengola", ["lek"] = "Leipon", ["lel"] = "Lele (Congo)", ["lem"] = "Nomaande", ["len"] = "Honduran Lenca", ["leo"] = "Leti (Cameroon)", ["lep"] = "Lepcha", ["leq"] = "Lembena", ["ler"] = "Lenkau", ["les"] = "Lese", ["let"] = "Lesing-Gelimi", ["leu"] = "Kara (New Guinea)", ["lev"] = "Lamma", ["lew"] = "Ledo Kaili", ["lex"] = "Luang", ["ley"] = "Lemolang", ["lez"] = "Lezgi", ["lfa"] = "Lefa", ["lfn"] = "Lingua Franca Nova", ["lg"] = "Luganda", ["lga"] = "Lungga", ["lgb"] = "Laghu", ["lgg"] = "Lugbara", ["lgh"] = "Laghuu", ["lgi"] = "Lengilu", ["lgk"] = "Neverver", ["lgl"] = "Wala", ["lgm"] = "Lega-Mwenga", ["lgn"] = "Opuuo", ["lgq"] = "Logba", ["lgr"] = "Lengo", ["lgs"] = "Guinea-Bissau Sign Language", ["lgt"] = "Pahi", ["lgu"] = "Longgu", ["lgz"] = "Ligenza", ["lha"] = "Laha (Vietnam)", ["lhh"] = "Laha (Indonesia)", ["lhi"] = "Lahu Shi", ["lhl"] = "Lahul Lohar", ["lhn"] = "Lahanan", ["lhp"] = "Lhokpu", ["lhs"] = "Mlahsö", ["lht"] = "Lo-Toga", ["lhu"] = "Lahu", ["li"] = "Limburgish", ["lia"] = "West-Central Limba", ["lib"] = "Likum", ["lic"] = "Hlai", ["lid"] = "Nyindrou", ["lie"] = "Likila", ["lif"] = "Limbu", ["lig"] = "Ligbi", ["lih"] = "Lihir", ["lii"] = "Lingkhim", ["lij"] = "Ligurian", ["lik"] = "Lika", ["lil"] = "Lillooet", ["lio"] = "Liki", ["lip"] = "Sekpele", ["liq"] = "Libido", ["lir"] = "Liberian English", ["lis"] = "Lisu", ["liu"] = "Logorik", ["liv"] = "Livonian", ["liw"] = "Col", ["lix"] = "Liabuku", ["liy"] = "Banda-Bambari", ["liz"] = "Libinza", ["lja"] = "Golpa", ["lje"] = "Rampi", ["lji"] = "Laiyolo", ["ljl"] = "Li'o", ["ljp"] = "Lampung Api", ["ljw"] = "Yirandali", ["ljx"] = "Yuru", ["lka"] = "Lakalei", ["lkb"] = "Kabras", ["lkc"] = "Kucong", ["lkd"] = "Lakondê", ["lke"] = "Kenyi", ["lkh"] = "Lakha", ["lki"] = "Laki", ["lkj"] = "Remun", ["lkl"] = "Laeko-Libuat", ["lkm"] = "Kalaamaya", ["lkn"] = "Lakon", ["lko"] = "Khayo", ["lkr"] = "Päri", ["lks"] = "Kisa", ["lkt"] = "Lakota", ["lku"] = "Kungkari", ["lky"] = "Lokoya", ["lla"] = "Lala-Roba", ["llb"] = "Lolo", ["llc"] = "Lele (Guinea)", ["lld"] = "Ladin", ["lle"] = "Lele (New Guinea)", ["llf"] = "Hermit", ["llg"] = "Lole", ["llh"] = "Lamu", ["lli"] = "Teke-Laali", ["llj"] = "Ladji-Ladji", ["llk"] = "Lelak", ["lll"] = "Lilau", ["llm"] = "Lasalimu", ["lln"] = "Lele (Chad)", ["llo"] = "Khlor", ["llp"] = "North Efate", ["llq"] = "Lolak", ["lls"] = "Lithuanian Sign Language", ["llu"] = "Lau", ["llx"] = "Lauan", ["lma"] = "East Limba", ["lmb"] = "Merei", ["lmc"] = "Limilngan", ["lmd"] = "Lumun", ["lme"] = "Pévé", ["lmf"] = "South Lembata", ["lmg"] = "Lamogai", ["lmh"] = "Lambichhong", ["lmi"] = "Lombi", ["lmj"] = "West Lembata", ["lmk"] = "Lamkang", ["lml"] = "Raga", ["lmn"] = "Lambadi", ["lmo"] = "Lombard", ["lmp"] = "Limbum", ["lmq"] = "Lamatuka", ["lmr"] = "Lamalera", ["lmu"] = "Lamenu", ["lmv"] = "Lomaiviti", ["lmw"] = "Lake Miwok", ["lmx"] = "Laimbue", ["lmy"] = "Laboya", ["lmz"] = "Lumbee", ["ln"] = "Lingala", ["lna"] = "Langbashe", ["lnb"] = "Mbalanhu", ["lnd"] = "Lun Bawang", ["lnh"] = "Lanoh", ["lni"] = "Daantanai'", ["lnj"] = "Linngithigh", ["lnl"] = "South Central Banda", ["lnm"] = "Langam", ["lnn"] = "Lorediakarkar", ["lno"] = "Lango (Sudan)", ["lns"] = "Lamnso'", ["lnu"] = "Longuda", ["lnw"] = "Lanima", ["lo"] = "Lao", ["loa"] = "Loloda", ["lob"] = "Lobi", ["loc"] = "Inonhan", ["lod"] = "Berawan", ["loe"] = "Saluan", ["lof"] = "Logol", ["log"] = "Logo", ["loh"] = "Narim", ["loi"] = "Lomakka", ["loj"] = "Lou", ["lok"] = "Loko", ["lol"] = "Mongo", ["lom"] = "Looma", ["lon"] = "Malawi Lomwe", ["loo"] = "Lombo", ["lop"] = "Lopa", ["loq"] = "Lobala", ["lor"] = "Téén", ["los"] = "Loniu", ["lot"] = "Lotuko", ["lou"] = "Louisiana Creole", ["lov"] = "Lopi", ["low"] = "Tampias Lobu", ["lox"] = "Loun", ["loz"] = "Lozi", ["lpa"] = "Lelepa", ["lpe"] = "Lepki", ["lpn"] = "Long Phuri Naga", ["lpo"] = "Lipo", ["lpx"] = "Lopit", ["lra"] = "Rara Bakati'", ["lrc"] = "Northern Luri", ["lre"] = "Laurentian", ["lrg"] = "Laragia", ["lri"] = "Marachi", ["lrk"] = "Loarki", ["lrl"] = "Larestani", ["lrm"] = "Marama", ["lrn"] = "Lorang", ["lro"] = "Laro", ["lrr"] = "Southern Lorung", ["lrt"] = "Larantuka Malay", ["lrv"] = "Larevat", ["lrz"] = "Lemerig", ["lsa"] = "Lasgerdi", ["lsd"] = "Lishana Deni", ["lse"] = "Lusengo", ["lsh"] = "Lish", ["lsi"] = "Lashi", ["lsl"] = "Latvian Sign Language", ["lsm"] = "Saamia", ["lso"] = "Laos Sign Language", ["lsp"] = "Panamanian Sign Language", ["lsr"] = "Aruop", ["lss"] = "Lasi", ["lst"] = "Trinidad and Tobago Sign Language", ["lsy"] = "Mauritian Sign Language", ["lt"] = "Lithuanian", ["ltc"] = "Middle Chinese", ["ltg"] = "Latgalian", ["lti"] = "Leti (Indonesia)", ["ltn"] = "Latundê", ["lto"] = "Olutsotso", ["lts"] = "Lutachoni", ["ltu"] = "Latu", ["lu"] = "Luba-Katanga", ["lua"] = "Luba-Kasai", ["luc"] = "Aringa", ["lud"] = "Ludian", ["lue"] = "Luvale", ["luf"] = "Laua", ["lui"] = "Luiseño", ["luj"] = "Luna", ["luk"] = "Lunanakha", ["lul"] = "Olu'bo", ["lum"] = "Luimbi", ["lun"] = "Lunda", ["luo"] = "Luo", ["lup"] = "Lumbu", ["luq"] = "Lucumí", ["lur"] = "Laura", ["lus"] = "Mizo", ["lut"] = "Lushootseed", ["luu"] = "Lumba-Yakkha", ["luv"] = "Luwati", ["luy"] = "Luhya", ["luz"] = "Southern Luri", ["lv"] = "Latvian", ["lva"] = "Maku'a", ["lvi"] = "Lawi", ["lvk"] = "Lavukaleve", ["lvu"] = "Levuka", ["lwa"] = "Lwalu", ["lwe"] = "Lewo Eleng", ["lwg"] = "Wanga", ["lwh"] = "White Lachi", ["lwl"] = "Eastern Lawa", ["lwm"] = "Laomian", ["lwo"] = "Luwo", ["lws"] = "Malawian Sign Language", ["lwt"] = "Lewotobi", ["lwu"] = "Lawu", ["lww"] = "Lewo", ["lya"] = "Layakha", ["lyg"] = "Lyngngam", ["lyn"] = "Luyana", ["lzh"] = "Literary Chinese", ["lzl"] = "Litzlitz", ["lzn"] = "Leinong Naga", ["lzz"] = "Laz", ["maa"] = "San Jerónimo Tecóatl Mazatec", ["mab"] = "Yutanduchi Mixtec", ["mad"] = "Madurese", ["mae"] = "Bo-Rukul", ["maf"] = "Mafa", ["mag"] = "Magahi", ["mai"] = "Maithili", ["maj"] = "Jalapa de Díaz Mazatec", ["mak"] = "Makasar", ["mam"] = "Mam", ["man"] = "Mandingo", ["map-ata-pro"] = "Proto-Atayalic", ["map-bms"] = "Banyumasan", ["map-pro"] = "Proto-Austronesian", ["maq"] = "Chiquihuitlán Mazatec", ["mas"] = "Maasai", ["mat"] = "Matlatzinca", ["mau"] = "Huautla Mazatec", ["mav"] = "Sateré-Mawé", ["maw"] = "Mampruli", ["max"] = "North Moluccan Malay", ["maz"] = "Central Mazahua", ["mba"] = "Higaonon", ["mbb"] = "Western Bukidnon Manobo", ["mbc"] = "Macushi", ["mbd"] = "Dibabawon Manobo", ["mbe"] = "Molale", ["mbf"] = "Baba Malay", ["mbh"] = "Mangseng", ["mbi"] = "Ilianen Manobo", ["mbj"] = "Nadëb", ["mbk"] = "Malol", ["mbl"] = "Maxakalí", ["mbm"] = "Ombamba", ["mbn"] = "Macaguán", ["mbo"] = "Mbo (Cameroon)", ["mbp"] = "Wiwa", ["mbq"] = "Maisin", ["mbr"] = "Nukak Makú", ["mbs"] = "Sarangani Manobo", ["mbt"] = "Matigsalug Manobo", ["mbu"] = "Mbula-Bwazza", ["mbv"] = "Mbulungish", ["mbw"] = "Maring", ["mbx"] = "Sepik Mari", ["mby"] = "Memoni", ["mbz"] = "Amoltepec Mixtec", ["mca"] = "Maca", ["mcb"] = "Machiguenga", ["mcc"] = "Bitur", ["mcd"] = "Sharanahua", ["mce"] = "Itundujia Mixtec", ["mcf"] = "Matsés", ["mcg"] = "Mapoyo", ["mch"] = "Maquiritari", ["mci"] = "Mese", ["mcj"] = "Mvanip", ["mck"] = "Mbunda", ["mcl"] = "Macaguaje", ["mcm"] = "Kristang", ["mcn"] = "Masana", ["mco"] = "Coatlán Mixe", ["mcp"] = "Makaa", ["mcq"] = "Ese", ["mcr"] = "Menya", ["mcs"] = "Mambai", ["mcu"] = "Cameroon Mambila", ["mcv"] = "Minanibai", ["mcw"] = "Mawa", ["mcx"] = "Mpiemo", ["mcy"] = "South Watut", ["mcz"] = "Mawan", ["mda"] = "Mada (Nigeria)", ["mdb"] = "Morigi", ["mdc"] = "Male", ["mdd"] = "Mbum", ["mde"] = "Bura Mabang", ["mdf"] = "Moksha", ["mdg"] = "Massalat", ["mdh"] = "Maguindanao", ["mdi"] = "Mamvu", ["mdj"] = "Mangbetu", ["mdk"] = "Mangbutu", ["mdl"] = "Maltese Sign Language", ["mdm"] = "Mayogo", ["mdn"] = "Mbati", ["mdp"] = "Mbala", ["mdq"] = "Mbole", ["mdr"] = "Mandar", ["mds"] = "Maria", ["mdt"] = "Mbere", ["mdu"] = "Mboko", ["mdv"] = "Santa Lucía Monteverde Mixtec", ["mdw"] = "Mbosi", ["mdx"] = "Dizin", ["mdy"] = "Maale", ["mdz"] = "Suruí Do Pará", ["mea"] = "Menka", ["meb"] = "Ikobi-Mena", ["mec"] = "Mara", ["med"] = "Melpa", ["mee"] = "Mengen", ["mef"] = "Megam", ["meg"] = "Mea", ["meh"] = "Southwestern Tlaxiaco Mixtec", ["mei"] = "Midob", ["mej"] = "Meyah", ["mek"] = "Mekeo", ["mel"] = "Central Melanau", ["mem"] = "Mangala", ["men"] = "Mende", ["meo"] = "Kedah Malay", ["mep"] = "Miriwung", ["meq"] = "Merey", ["mer"] = "Meru", ["mes"] = "Masmaje", ["met"] = "Mato", ["meu"] = "Motu", ["mev"] = "Mano", ["mew"] = "Maaka", ["mey"] = "Hassaniya", ["mez"] = "Menominee", ["mfa"] = "Pattani Malay", ["mfb"] = "Bangka", ["mfc"] = "Mba", ["mfd"] = "Mendankwe-Nkwen", ["mfe"] = "Mauritian Creole", ["mff"] = "Naki", ["mfg"] = "Mixifore", ["mfh"] = "Matal", ["mfi"] = "Wandala", ["mfj"] = "Mefele", ["mfk"] = "North Mofu", ["mfl"] = "Putai", ["mfm"] = "Marghi South", ["mfn"] = "Cross River Mbembe", ["mfo"] = "Mbe", ["mfp"] = "Makassar Malay", ["mfq"] = "Moba", ["mfr"] = "Marrithiyel", ["mfs"] = "Mexican Sign Language", ["mft"] = "Mokerang", ["mfu"] = "Mbwela", ["mfv"] = "Mandjak", ["mfw"] = "Mulaha", ["mfx"] = "Melo", ["mfy"] = "Mayo", ["mfz"] = "Mabaan", ["mg"] = "Malagasy", ["mga"] = "Middle Irish", ["mgb"] = "Mararit", ["mgc"] = "Morokodo", ["mgd"] = "Moru", ["mge"] = "Mango", ["mgf"] = "Maklew", ["mgg"] = "Mpongmpong", ["mgh"] = "Makhuwa-Meetto", ["mgi"] = "Jili", ["mgj"] = "Abureni", ["mgk"] = "Mawes", ["mgl"] = "Maleu-Kilenge", ["mgm"] = "Mambae", ["mgn"] = "Mbangi", ["mgo"] = "Meta'", ["mgp"] = "Eastern Magar", ["mgq"] = "Malila", ["mgr"] = "Mambwe-Lungu", ["mgs"] = "Manda (Tanzania)", ["mgt"] = "Mongol", ["mgu"] = "Mailu", ["mgv"] = "Matengo", ["mgw"] = "Matumbi", ["mgy"] = "Mbunga", ["mgz"] = "Mbugwe", ["mh"] = "Marshallese", ["mha"] = "Manda (India)", ["mhb"] = "Mahongwe", ["mhc"] = "Mocho", ["mhd"] = "Mbugu", ["mhe"] = "Besisi", ["mhf"] = "Mamaa", ["mhg"] = "Margu", ["mhi"] = "Ma'di", ["mhj"] = "Mogholi", ["mhk"] = "Mungaka", ["mhl"] = "Mauwake", ["mhm"] = "Makhuwa-Moniga", ["mhn"] = "Mòcheno", ["mho"] = "Mashi", ["mhp"] = "Balinese Malay", ["mhq"] = "Mandan", ["mhr"] = "Eastern Mari", ["mhs"] = "Buru (Indonesia)", ["mht"] = "Mandahuaca", ["mhu"] = "Taraon", ["mhw"] = "Mbukushu", ["mhx"] = "Lhao Vo", ["mhy"] = "Ma'anyan", ["mhz"] = "Mor (Austronesian)", ["mi"] = "Maori", ["mia"] = "Miami", ["mib"] = "Atatláhuca Mixtec", ["mic"] = "Mi'kmaq", ["mid"] = "Mandaic", ["mie"] = "Ocotepec Mixtec", ["mif"] = "Mofu-Gudur", ["mig"] = "San Miguel el Grande Mixtec", ["mih"] = "Chayuco Mixtec", ["mii"] = "Chigmecatitlán Mixtec", ["mij"] = "Mungbam", ["mik"] = "Mikasuki", ["mil"] = "Peñoles Mixtec", ["mim"] = "Alacatlatzala Mixtec", ["min"] = "Minangkabau", ["mio"] = "Pinotepa Nacional Mixtec", ["mip"] = "Apasco-Apoala Mixtec", ["miq"] = "Miskito", ["mir"] = "Isthmus Mixe", ["mit"] = "Southern Puebla Mixtec", ["miu"] = "Cacaloxtepec Mixtec", ["miw"] = "Akoye", ["mix"] = "Mixtepec Mixtec", ["miy"] = "Ayutla Mixtec", ["miz"] = "Coatzospan Mixtec", ["mjb"] = "Makalero", ["mjc"] = "San Juan Colorado Mixtec", ["mjd"] = "Northwest Maidu", ["mje"] = "Muskum", ["mji"] = "Kim Mun", ["mjj"] = "Mawak", ["mjk"] = "Matukar", ["mjl"] = "Mandeali", ["mjm"] = "Medebur", ["mjn"] = "Mebu", ["mjo"] = "Malankuravan", ["mjp"] = "Malapandaram", ["mjq"] = "Malaryan", ["mjr"] = "Malavedan", ["mjs"] = "Miship", ["mjt"] = "Sawriya Paharia", ["mju"] = "Manna-Dora", ["mjv"] = "Mannan", ["mjw"] = "Karbi", ["mjx"] = "Mahali", ["mjy"] = "Mahican", ["mjz"] = "Majhi", ["mk"] = "Macedonian", ["mka"] = "Mbre", ["mkb"] = "Mal Paharia", ["mkc"] = "Siliput", ["mke"] = "Mawchi", ["mkf"] = "Miya", ["mkg"] = "Mak (China)", ["mkh-asl-pro"] = "Proto-Aslian", ["mkh-ban-pro"] = "Proto-Bahnaric", ["mkh-kat-pro"] = "Proto-Katuic", ["mkh-khm-pro"] = "Proto-Khmuic", ["mkh-kmr-pro"] = "Proto-Khmeric", ["mkh-mmn"] = "Middle Mon", ["mkh-mnc-pro"] = "Proto-Monic", ["mkh-mvi"] = "Middle Vietnamese", ["mkh-pal-pro"] = "Proto-Palaungic", ["mkh-pea-pro"] = "Proto-Pearic", ["mkh-pkn-pro"] = "Proto-Pakanic", ["mkh-pro"] = "Proto-Mon-Khmer", ["mkh-vie-pro"] = "Proto-Vietic", ["mki"] = "Dhatki", ["mkj"] = "Mokilese", ["mkk"] = "Byep", ["mkl"] = "Mokole", ["mkm"] = "Moklen", ["mkn"] = "Kupang Malay", ["mko"] = "Mingang Doso", ["mkp"] = "Moikodi", ["mkq"] = "Bay Miwok", ["mkr"] = "Malas", ["mks"] = "Silacayoapan Mixtec", ["mkt"] = "Vamale", ["mku"] = "Konyanka Maninka", ["mkv"] = "Mafea", ["mkx"] = "Cinamiguin Manobo", ["mky"] = "East Makian", ["mkz"] = "Makasae", ["ml"] = "Malayalam", ["mla"] = "Tamambo", ["mlb"] = "Mbule", ["mlc"] = "Caolan", ["mle"] = "Manambu", ["mlf"] = "Mal", ["mlh"] = "Mape", ["mli"] = "Malimpung", ["mlj"] = "Miltu", ["mlk"] = "Ilwana", ["mll"] = "Malua Bay", ["mlm"] = "Mulam", ["mln"] = "Malango", ["mlo"] = "Mlomp", ["mlp"] = "Bargam", ["mlq"] = "Western Maninkakan", ["mlr"] = "Vame", ["mls"] = "Masalit", ["mlu"] = "To'abaita", ["mlv"] = "Mwotlap", ["mlw"] = "Moloko", ["mlx"] = "Malfaxal", ["mlz"] = "Malaynon", ["mma"] = "Mama", ["mmb"] = "Momina", ["mmc"] = "Michoacán Mazahua", ["mmd"] = "Maonan", ["mme"] = "Mae", ["mmf"] = "Mundat", ["mmg"] = "North Ambrym", ["mmh"] = "Mehináku", ["mmi"] = "Musar", ["mmj"] = "Majhwar", ["mmk"] = "Mukha-Dora", ["mml"] = "Man Met", ["mmm"] = "Maii", ["mmn"] = "Mamanwa", ["mmo"] = "Mangga Buang", ["mmp"] = "Musan", ["mmq"] = "Aisi", ["mmr"] = "Western Xiangxi Miao", ["mmt"] = "Malalamai", ["mmu"] = "Mmaala", ["mmv"] = "Miriti", ["mmw"] = "Emae", ["mmx"] = "Madak", ["mmy"] = "Migaama", ["mmz"] = "Mabaale", ["mn"] = "Mongolian", ["mna"] = "Mbula", ["mnb"] = "Muna", ["mnc"] = "Manchu", ["mnd"] = "Mondé", ["mne"] = "Naba", ["mnf"] = "Mundani", ["mng"] = "Eastern Mnong", ["mnh"] = "Mono (Congo)", ["mni"] = "Manipuri", ["mnj"] = "Munji", ["mnk"] = "Mandinka", ["mnl"] = "Tiale", ["mnm"] = "Mapena", ["mnn"] = "Southern Mnong", ["mnp"] = "Min Bei", ["mnq"] = "Minriq", ["mnr"] = "Mono (California)", ["mns"] = "Mansi", ["mnt"] = "Maykulan", ["mnu"] = "Mer", ["mnv"] = "Rennellese", ["mnw"] = "Mon", ["mnw-tha"] = "Thai Mon", ["mnx"] = "Manikion", ["mny"] = "Manyawa", ["mnz"] = "Moni", ["moa"] = "Mwan", ["moc"] = "Mocoví", ["mod"] = "Mobilian", ["moe"] = "Montagnais", ["mog"] = "Mongondow", ["moh"] = "Mohawk", ["moi"] = "Mboi", ["moj"] = "Monzombo", ["mok"] = "Morori", ["mom"] = "Monimbo", ["moo"] = "Monom", ["mop"] = "Mopan Maya", ["moq"] = "Mor (Papuan)", ["mor"] = "Moro", ["mos"] = "Moore", ["mot"] = "Barí", ["mou"] = "Mogum", ["mov"] = "Mojave", ["mow"] = "Moi (Congo)", ["mox"] = "Molima", ["moy"] = "Shekkacho", ["moz"] = "Mukulu", ["mpa"] = "Mpoto", ["mpb"] = "Mullukmulluk", ["mpc"] = "Mangarayi", ["mpd"] = "Machinere", ["mpe"] = "Majang", ["mpg"] = "Marba", ["mph"] = "Maung", ["mpi"] = "Mpade", ["mpj"] = "Martu Wangka", ["mpk"] = "Mbara (Chad)", ["mpl"] = "Middle Watut", ["mpm"] = "Yosondúa Mixtec", ["mpn"] = "Mindiri", ["mpo"] = "Miu", ["mpp"] = "Migabac", ["mpq"] = "Matís", ["mpr"] = "Vangunu", ["mps"] = "Dadibi", ["mpt"] = "Mian", ["mpu"] = "Makuráp", ["mpv"] = "Mungkip", ["mpw"] = "Mapidian", ["mpx"] = "Misima-Paneati", ["mpy"] = "Mapia", ["mpz"] = "Mpi", ["mqa"] = "Maba", ["mqb"] = "Mbuko", ["mqc"] = "Mangole", ["mqe"] = "Matepi", ["mqf"] = "Momuna", ["mqg"] = "Kota Bangun Kutai Malay", ["mqh"] = "Tlazoyaltepec Mixtec", ["mqi"] = "Mariri", ["mqj"] = "Mamasa", ["mqk"] = "Rajah Kabunsuwan Manobo", ["mql"] = "Mbelime", ["mqm"] = "South Marquesan", ["mqn"] = "Moronene", ["mqo"] = "Modole", ["mqp"] = "Manipa", ["mqq"] = "Minokok", ["mqr"] = "Mander", ["mqs"] = "West Makian", ["mqt"] = "Mok", ["mqu"] = "Mandari", ["mqv"] = "Mosimo", ["mqw"] = "Murupi", ["mqx"] = "Mamuju", ["mqy"] = "Manggarai", ["mqz"] = "Malasanga", ["mr"] = "Marathi", ["mra"] = "Mlabri", ["mrb"] = "Marino", ["mrc"] = "Maricopa", ["mrd"] = "Western Magar", ["mre"] = "Martha's Vineyard Sign Language", ["mrf"] = "Elseng", ["mrg"] = "Mising", ["mrh"] = "Mara Chin", ["mrj"] = "Western Mari", ["mrk"] = "Hmwaveke", ["mrl"] = "Mortlockese", ["mrm"] = "Merlav", ["mrn"] = "Cheke Holo", ["mro"] = "Mru", ["mrp"] = "Morouas", ["mrq"] = "North Marquesan", ["mrr"] = "Hill Maria", ["mrs"] = "Maragus", ["mrt"] = "Margi", ["mru"] = "Mono (Cameroon)", ["mrv"] = "Mangarevan", ["mrw"] = "Maranao", ["mrx"] = "Dineor", ["mry"] = "Karaga Mandaya", ["mrz"] = "Marind", ["ms"] = "Malay", ["msb"] = "Masbatenyo", ["msc"] = "Sankaran Maninka", ["msd"] = "Yucatec Maya Sign Language", ["mse"] = "Musey", ["msf"] = "Mekwei", ["msg"] = "Moraid", ["msi"] = "Sabah Malay", ["msj"] = "Ma", ["msk"] = "Mansaka", ["msl"] = "Molof", ["msm"] = "Agusan Manobo", ["msn"] = "Vurës", ["mso"] = "Mombum", ["msp"] = "Maritsauá", ["msq"] = "Caac", ["msr"] = "Mongolian Sign Language", ["mss"] = "West Masela", ["msu"] = "Musom", ["msv"] = "Maslam", ["msw"] = "Mansoanka", ["msx"] = "Moresada", ["msy"] = "Aruamu", ["msz"] = "Momare", ["mt"] = "Maltese", ["mta"] = "Cotabato Manobo", ["mtb"] = "Anyin Morofo", ["mtc"] = "Munit", ["mtd"] = "Mualang", ["mte"] = "Alu", ["mtf"] = "Murik (New Guinea)", ["mtg"] = "Una", ["mth"] = "Munggui", ["mti"] = "Maiwa (New Guinea)", ["mtj"] = "Moskona", ["mtk"] = "Mbe'", ["mtl"] = "Montol", ["mtm"] = "Mator", ["mtn"] = "Matagalpa", ["mto"] = "Totontepec Mixe", ["mtp"] = "Wichí Lhamtés Nocten", ["mtq"] = "Muong", ["mtr"] = "Mewari", ["mts"] = "Yora", ["mtt"] = "Mota", ["mtu"] = "Tututepec Mixtec", ["mtv"] = "Asaro'o", ["mtw"] = "Magahat", ["mtx"] = "Tidaá Mixtec", ["mty"] = "Nabi", ["mua"] = "Mundang", ["mub"] = "Mubi", ["muc"] = "Mbu'", ["mud"] = "Mednyj Aleut", ["mue"] = "Media Lengua", ["mug"] = "Musgu", ["muh"] = "Mündü", ["mui"] = "Musi", ["muj"] = "Mabire", ["mul"] = "Translingual", ["mum"] = "Maiwala", ["mun-pro"] = "Proto-Munda", ["muo"] = "Nyong", ["mup"] = "Malvi", ["muq"] = "Eastern Xiangxi Miao", ["mur"] = "Murle", ["mus"] = "Creek", ["mut"] = "Western Muria", ["muu"] = "Yaaku", ["muv"] = "Muthuvan", ["mux"] = "Bo-Ung", ["muy"] = "Muyang", ["muz"] = "Mursi", ["mva"] = "Manam", ["mvb"] = "Mattole", ["mvd"] = "Mamboru", ["mvg"] = "Yucuañe Mixtec", ["mvh"] = "Mire", ["mvi"] = "Miyako", ["mvk"] = "Mekmek", ["mvl"] = "Mbara (Australia)", ["mvm"] = "Muya", ["mvn"] = "Minaveha", ["mvo"] = "Marovo", ["mvp"] = "Duri", ["mvq"] = "Moere", ["mvr"] = "Marau", ["mvs"] = "Massep", ["mvt"] = "Mpotovoro", ["mvu"] = "Marfa", ["mvv"] = "Tagal Murut", ["mvw"] = "Machinga", ["mvx"] = "Meoswar", ["mvy"] = "Indus Kohistani", ["mvz"] = "Mesqan", ["mwa"] = "Mwatebu", ["mwb"] = "Juwal", ["mwc"] = "Are", ["mwe"] = "Mwera", ["mwf"] = "Murrinh-Patha", ["mwg"] = "Aiklep", ["mwh"] = "Mouk-Aria", ["mwi"] = "Labo", ["mwk"] = "Kita Maninkakan", ["mwl"] = "Mirandese", ["mwm"] = "Sar", ["mwn"] = "Nyamwanga", ["mwo"] = "Central Maewo", ["mwp"] = "Kala Lagaw Ya", ["mwq"] = "Mün Chin", ["mwr"] = "Marwari", ["mws"] = "Mwimbi-Muthambi", ["mwt"] = "Moken", ["mwu"] = "Mittu", ["mwv"] = "Mentawai", ["mww"] = "White Hmong", ["mwz"] = "Moingi", ["mxa"] = "Northwest Oaxaca Mixtec", ["mxb"] = "Tezoatlán Mixtec", ["mxd"] = "Modang", ["mxe"] = "Mele-Fila", ["mxf"] = "Malgbe", ["mxg"] = "Mbangala", ["mxh"] = "Mvuba", ["mxi"] = "Mozarabic", ["mxj"] = "Miju", ["mxk"] = "Monumbo", ["mxl"] = "Maxi Gbe", ["mxm"] = "Meramera", ["mxn"] = "Moi (Indonesia)", ["mxo"] = "Mbowe", ["mxp"] = "Tlahuitoltepec Mixe", ["mxq"] = "Juquila Mixe", ["mxr"] = "Murik (Malaysia)", ["mxs"] = "Huitepec Mixtec", ["mxt"] = "Jamiltepec Mixtec", ["mxu"] = "Mada (Cameroon)", ["mxv"] = "Metlatónoc Mixtec", ["mxw"] = "Namo", ["mxx"] = "Mahou", ["mxy"] = "Southeastern Nochixtlán Mixtec", ["mxz"] = "Central Masela", ["my"] = "Burmese", ["myb"] = "Mbay", ["myc"] = "Mayeka", ["mye"] = "Myene", ["myf"] = "Bambassi", ["myg"] = "Manta", ["myh"] = "Makah", ["myj"] = "Mangayat", ["myk"] = "Mamara Senoufo", ["myl"] = "Moma", ["mym"] = "Me'en", ["myn-chl"] = "Ch'olti'", ["myn-pro"] = "Proto-Mayan", ["myo"] = "Anfillo", ["myp"] = "Pirahã", ["myr"] = "Muniche", ["mys"] = "Mesmes", ["myu"] = "Mundurukú", ["myv"] = "Erzya", ["myw"] = "Muyuw", ["myx"] = "Masaba", ["myy"] = "Macuna", ["myz"] = "Classical Mandaic", ["mza"] = "Santa María Zacatepec Mixtec", ["mzb"] = "Northern Saharan Berber", ["mzc"] = "Madagascar Sign Language", ["mzd"] = "Malimba", ["mze"] = "Morawa", ["mzg"] = "Monastic Sign Language", ["mzh"] = "Wichí Lhamtés Güisnay", ["mzi"] = "Ixcatlán Mazatec", ["mzj"] = "Manya", ["mzk"] = "Nigeria Mambila", ["mzl"] = "Mazatlán Mixe", ["mzm"] = "Mumuye", ["mzn"] = "Mazanderani", ["mzo"] = "Matipuhy", ["mzp"] = "Movima", ["mzq"] = "Mori Atas", ["mzr"] = "Marúbo", ["mzs"] = "Macanese", ["mzt"] = "Mintil", ["mzu"] = "Inapang", ["mzv"] = "Manza", ["mzw"] = "Deg", ["mzx"] = "Mawayana", ["mzy"] = "Mozambican Sign Language", ["mzz"] = "Maiadomu", ["na"] = "Nauruan", ["naa"] = "Namla", ["nab"] = "Nambikwara", ["nac"] = "Narak", ["nae"] = "Naka'ela", ["naf"] = "Nabak", ["nag"] = "नगा पिजिन", ["nah"] = "Nahuatl", ["nai-ala"] = "Alazapa", ["nai-bay"] = "Bayogoula", ["nai-bvy"] = "Buena Vista Yokuts", ["nai-cal"] = "Calusa", ["nai-chi"] = "Chiquimulilla", ["nai-chu-pro"] = "Proto-Chumash", ["nai-cig"] = "Ciguayo", ["nai-ckn-pro"] = "Proto-Chinookan", ["nai-dly"] = "Delta Yokuts", ["nai-gsy"] = "Gashowu", ["nai-guz"] = "Guazacapán", ["nai-hit"] = "Hitchiti", ["nai-ipa"] = "Ipai", ["nai-jtp"] = "Jutiapa", ["nai-jum"] = "Jumaytepeque", ["nai-kat"] = "Kathlamet", ["nai-klp-pro"] = "Proto-Kalapuyan", ["nai-knm"] = "Konomihu", ["nai-kry"] = "Kings River Yokuts", ["nai-kum"] = "Kumeyaay", ["nai-mac"] = "Macoris", ["nai-mdu-pro"] = "Proto-Maidun", ["nai-miz-pro"] = "Proto-Mixe-Zoque", ["nai-mus-pro"] = "Proto-Muskogean", ["nai-nao"] = "Naolan", ["nai-nrs"] = "New River Shasta", ["nai-nvy"] = "Northern Valley Yokuts", ["nai-okw"] = "Okwanuchu", ["nai-per"] = "Pericú", ["nai-pic"] = "Picuris", ["nai-plp-pro"] = "Proto-Plateau Penutian", ["nai-ply"] = "Palewyami", ["nai-pom-pro"] = "Proto-Pomo", ["nai-qng"] = "Quinigua", ["nai-sca-pro"] = "Proto-Siouan-Catawban", ["nai-sin"] = "Sinacantán", ["nai-sln"] = "Salvadoran Lenca", ["nai-spt"] = "Sahaptin", ["nai-svy"] = "Southern Valley Yokuts", ["nai-tap"] = "Tapachultec", ["nai-taw"] = "Tawasa", ["nai-teq"] = "Tequistlatec", ["nai-tip"] = "Tipai", ["nai-tky"] = "Tule-Kaweah Yokuts", ["nai-tot-pro"] = "Proto-Totozoquean", ["nai-tsi-pro"] = "Proto-Tsimshianic", ["nai-utn-pro"] = "Proto-Utian", ["nai-wai"] = "Waikuri", ["nai-yup"] = "Yupiltepeque", ["naj"] = "Nalu", ["nak"] = "Nakanai", ["nal"] = "Nalik", ["nam"] = "Ngan'gityemerri", ["nan"] = "Min Nan", ["nao"] = "Naaba", ["nap"] = "Neapolitan", ["naq"] = "Khoekhoe", ["nar"] = "Iguta", ["nas"] = "Nasioi", ["nat"] = "Hungworo", ["naw"] = "Nawuri", ["nax"] = "Nakwi", ["nay"] = "Ngarrindjeri", ["naz"] = "Coatepec Nahuatl", ["nb"] = "Norwegian Bokmål", ["nba"] = "Nyemba", ["nbb"] = "Ndoe", ["nbc"] = "Chang", ["nbd"] = "Ngbinda", ["nbe"] = "Konyak Naga", ["nbg"] = "Nagarchal", ["nbh"] = "Ngamo", ["nbi"] = "Mao Naga", ["nbj"] = "Ngarinman", ["nbk"] = "Nake", ["nbm"] = "Ngbaka Ma'bo", ["nbn"] = "Kuri", ["nbo"] = "Nkukoli", ["nbp"] = "Nnam", ["nbq"] = "Nggem", ["nbr"] = "Numana", ["nbs"] = "Namibian Sign Language", ["nbt"] = "Na", ["nbu"] = "Rongmei Naga", ["nbv"] = "Ngamambo", ["nbw"] = "Southern Ngbandi", ["nby"] = "Ningera", ["nca"] = "Iyo", ["ncb"] = "Central Nicobarese", ["ncc"] = "Ponam", ["ncd"] = "Nachering", ["nce"] = "Yale", ["ncf"] = "Notsi", ["ncg"] = "Nisga'a", ["nch"] = "Central Huasteca Nahuatl", ["nci"] = "Classical Nahuatl", ["ncj"] = "Northern Puebla Nahuatl", ["nck"] = "Nakara", ["ncl"] = "Michoacán Nahuatl", ["ncm"] = "Nambo", ["ncn"] = "Nauna", ["nco"] = "Sibe", ["ncr"] = "Ncane", ["ncs"] = "Nicaraguan Sign Language", ["nct"] = "Chothe Naga", ["ncu"] = "Chumburung", ["ncx"] = "Central Puebla Nahuatl", ["ncz"] = "Natchez", ["nd"] = "Northern Ndebele", ["nda"] = "Ndasa", ["ndb"] = "Kenswei Nsei", ["ndc"] = "Ndau", ["ndd"] = "Nde-Nsele-Nta", ["ndf"] = "Nadruvian", ["ndg"] = "Ndengereko", ["ndh"] = "Ndali", ["ndi"] = "Chamba Leko", ["ndj"] = "Ndamba", ["ndk"] = "Ndaka", ["ndl"] = "Ndolo", ["ndm"] = "Ndam", ["ndn"] = "Ngundi", ["ndp"] = "Ndo", ["ndq"] = "Ndombe", ["ndr"] = "Ndoola", ["nds"] = "Low German", ["nds-de"] = "German Low German", ["nds-nl"] = "Dutch Low Saxon", ["ndt"] = "Ndunga", ["ndu"] = "Dugun", ["ndv"] = "Ndut", ["ndw"] = "Ndobo", ["ndx"] = "Nduga", ["ndy"] = "Lutos", ["ndz"] = "Ndogo", ["ne"] = "Nepali", ["nea"] = "Eastern Ngad'a", ["neb"] = "Toura", ["nec"] = "Nedebang", ["ned"] = "Nde-Gbite", ["nee"] = "Kumak", ["nef"] = "Nefamese", ["neg"] = "Negidal", ["neh"] = "Nyenkha", ["nej"] = "Neko", ["nek"] = "Neku", ["nem"] = "Nemi", ["nen"] = "Nengone", ["neo"] = "Ná-Meo", ["neq"] = "North Central Mixe", ["ner"] = "Yahadian", ["nes"] = "Bhoti Kinnauri", ["net"] = "Nete", ["neu"] = "Neo", ["nev"] = "Nyaheun", ["new"] = "Newar", ["nex"] = "Neme", ["ney"] = "Neyo", ["nez"] = "Nez Perce", ["nfa"] = "Dhao", ["nfd"] = "Ahwai", ["nfl"] = "Aiwoo", ["nfr"] = "Nafaanra", ["nfu"] = "Mfumte", ["ng"] = "Ndonga", ["nga"] = "Ngbaka", ["ngb"] = "Northern Ngbandi", ["ngc"] = "Ngombe (Congo)", ["ngd"] = "Ngando (Central African Republic)", ["nge"] = "Ngemba", ["ngf-pro"] = "Proto-Trans-New Guinea", ["ngg"] = "Ngbaka Manza", ["ngh"] = "Nǀuu", ["ngi"] = "Ngizim", ["ngj"] = "Ngie", ["ngk"] = "Ngalkbun", ["ngl"] = "Lomwe", ["ngm"] = "Ngatik Men's Creole", ["ngn"] = "Ngwo", ["ngo"] = "Ngoni", ["ngp"] = "Ngulu", ["ngq"] = "Ngoreme", ["ngr"] = "Nagu", ["ngs"] = "Gvoko", ["ngt"] = "Ngeq", ["ngu"] = "Guerrero Nahuatl", ["ngv"] = "Nagumi", ["ngw"] = "Ngwaba", ["ngx"] = "Nggwahyi", ["ngy"] = "Tibea", ["ngz"] = "Ngungwel", ["nha"] = "Nhanda", ["nhb"] = "Beng", ["nhc"] = "Tabasco Nahuatl", ["nhd"] = "Chiripá", ["nhe"] = "Eastern Huasteca Nahuatl", ["nhf"] = "Nhuwala", ["nhg"] = "Tetelcingo Nahuatl", ["nhh"] = "Nahari", ["nhi"] = "Zacatlán-Ahuacatlán-Tepetzintla Nahuatl", ["nhk"] = "Cosoleacaque Nahuatl", ["nhm"] = "Morelos Nahuatl", ["nhn"] = "Central Nahuatl", ["nho"] = "Takuu", ["nhp"] = "Pajapan Nahuatl", ["nhq"] = "Huaxcaleca Nahuatl", ["nhr"] = "Naro", ["nht"] = "Ometepec Nahuatl", ["nhu"] = "Noone", ["nhv"] = "Temascaltepec Nahuatl", ["nhw"] = "Western Huasteca Nahuatl", ["nhx"] = "Mecayapan Nahuatl", ["nhy"] = "Northern Oaxaca Nahuatl", ["nhz"] = "Santa María La Alta Nahuatl", ["nia"] = "Nias", ["nib"] = "Nakame", ["nic-bco-pro"] = "Proto-Benue-Congo", ["nic-bod-pro"] = "Proto-Bantoid", ["nic-eov-pro"] = "Proto-Eastern Oti-Volta", ["nic-gns-pro"] = "Proto-Gurunsi", ["nic-grf-pro"] = "Proto-Grassfields", ["nic-gur-pro"] = "Proto-Gur", ["nic-jkn-pro"] = "Proto-Jukunoid", ["nic-lcr-pro"] = "Proto-Lower Cross River", ["nic-ogo-pro"] = "Proto-Ogoni", ["nic-ovo-pro"] = "Proto-Oti-Volta", ["nic-plt-pro"] = "Proto-Plateau", ["nic-pro"] = "Proto-Niger-Congo", ["nic-ubg-pro"] = "Proto-Ubangian", ["nic-ucr-pro"] = "Proto-Upper Cross River", ["nic-vco-pro"] = "Proto-Volta-Congo", ["nid"] = "Ngandi", ["nie"] = "Niellim", ["nif"] = "Nek", ["nig"] = "Ngalakan", ["nih"] = "Nyiha", ["nii"] = "Nii", ["nij"] = "Ngaju", ["nik"] = "Southern Nicobarese", ["nil"] = "Nila", ["nim"] = "Nilamba", ["nin"] = "Ninzo", ["nio"] = "Nganasan", ["niq"] = "Nandi", ["nir"] = "Nimboran", ["nis"] = "Nimi", ["nit"] = "Southeastern Kolami", ["niu"] = "Niuean", ["niv"] = "Nivkh", ["niw"] = "Nimo", ["nix"] = "Hema", ["niy"] = "Ngiti", ["niz"] = "Ningil", ["nja"] = "Nzanyi", ["njb"] = "Nocte Naga", ["njh"] = "Lotha Naga", ["nji"] = "Gudanji", ["njj"] = "Njen", ["njl"] = "Njalgulgule", ["njm"] = "Angami", ["njn"] = "Liangmai Naga", ["njo"] = "Ao", ["njr"] = "Njerep", ["njs"] = "Nisa", ["njt"] = "Ndyuka-Trio Pidgin", ["nju"] = "Ngadjunmaya", ["njx"] = "Kunyi", ["njy"] = "Njyem", ["njz"] = "Nyishi", ["nka"] = "Nkoya", ["nkb"] = "Khoibu Naga", ["nkc"] = "Nkongho", ["nkd"] = "Koireng", ["nke"] = "Duke", ["nkf"] = "Inpui Naga", ["nkg"] = "Nekgini", ["nkh"] = "Khezha Naga", ["nki"] = "Thangal Naga", ["nkj"] = "Nakai", ["nkk"] = "Nokuku", ["nkm"] = "Namat", ["nkn"] = "Nkangala", ["nko"] = "Nkonya", ["nkp"] = "Niuatoputapu", ["nkq"] = "Nkami", ["nkr"] = "Nukuoro", ["nks"] = "North Asmat", ["nkt"] = "Nyika", ["nku"] = "Bouna Kulango", ["nkw"] = "Nkutu", ["nkx"] = "Nkoroo", ["nkz"] = "Nkari", ["nl"] = "Dutch", ["nla"] = "Ngombale", ["nlc"] = "Nalca", ["nle"] = "East Nyala", ["nlg"] = "Gela", ["nli"] = "Grangali", ["nlj"] = "Nyali", ["nlk"] = "Ninia Yali", ["nll"] = "Nihali", ["nlm"] = "Mankiyali", ["nlo"] = "Ngul", ["nlq"] = "Lao Naga", ["nlu"] = "Nchumbulu", ["nlv"] = "Orizaba Nahuatl", ["nlw"] = "Walangama", ["nlx"] = "Nahali", ["nly"] = "Nyamal", ["nlz"] = "Nalögo", ["nma"] = "Maram Naga", ["nmb"] = "Big Nambas", ["nmc"] = "Ngam", ["nmd"] = "Ndumu", ["nme"] = "Mzieme Naga", ["nmf"] = "Tangkhul Naga", ["nmg"] = "Kwasio", ["nmh"] = "Monsang Naga", ["nmi"] = "Nyam", ["nmj"] = "Ngombe (Central African Republic)", ["nmk"] = "Namakura", ["nml"] = "Ndemli", ["nmm"] = "Manangba", ["nmn"] = "ǃXóõ", ["nmo"] = "Moyon Naga", ["nmp"] = "Nimanbur", ["nmq"] = "Nambya", ["nmr"] = "Nimbari", ["nms"] = "Letemboi", ["nmt"] = "Namonuito", ["nmu"] = "Northeast Maidu", ["nmv"] = "Ngamini", ["nmw"] = "Nimoa", ["nmy"] = "Namuyi", ["nmz"] = "Nawdm", ["nn"] = "Norwegian Nynorsk", ["nna"] = "Nyangumarta", ["nnb"] = "Nande", ["nnc"] = "Nancere", ["nnd"] = "West Ambae", ["nne"] = "Ngandyera", ["nnf"] = "Ngaing", ["nng"] = "Maring Naga", ["nnh"] = "Ngiemboon", ["nni"] = "North Nuaulu", ["nnj"] = "Nyangatom", ["nnk"] = "Nankina", ["nnl"] = "Northern Rengma Naga", ["nnm"] = "Namia", ["nnn"] = "Ngete", ["nnp"] = "Wancho", ["nnq"] = "Ngindo", ["nnr"] = "Narungga", ["nnt"] = "Nanticoke", ["nnu"] = "Dwang", ["nnv"] = "Nukunu", ["nnw"] = "Southern Nuni", ["nnx"] = "Ngong", ["nny"] = "Nyangga", ["nnz"] = "Nda'nda'", ["no"] = "Norwegian", ["noa"] = "Woun Meu", ["noc"] = "Nuk", ["nod"] = "Northern Thai", ["noe"] = "Nimadi", ["nof"] = "Nomane", ["nog"] = "Nogai", ["noh"] = "Nomu", ["noi"] = "Noiri", ["noj"] = "Nonuya", ["nok"] = "Nooksack", ["nol"] = "Nomlaki", ["nom"] = "Nocamán", ["non"] = "Old Norse", ["nop"] = "Numanggang", ["noq"] = "Ngongo", ["nos"] = "Eastern Nisu", ["not"] = "Nomatsiguenga", ["nou"] = "Ewage-Notu", ["nov"] = "Novial", ["now"] = "Nyambo", ["noy"] = "Noy", ["noz"] = "Nayi", ["npa"] = "Nar Phu", ["npb"] = "Nupbikha", ["npg"] = "Ponyo", ["nph"] = "Phom", ["npl"] = "Southeastern Puebla Nahuatl", ["npn"] = "Mondropolon", ["npo"] = "Pochuri Naga", ["nps"] = "Nipsan", ["npu"] = "Puimei Naga", ["npy"] = "Napu", ["nqg"] = "Ede Nago", ["nqk"] = "Kura Ede Nago", ["nql"] = "Ngendelengo", ["nqm"] = "Ndom", ["nqn"] = "Nen", ["nqo"] = "N'Ko", ["nqq"] = "Kyan-Karyaw Naga", ["nqy"] = "Akyaung Ari", ["nr"] = "Southern Ndebele", ["nra"] = "Ngom", ["nrb"] = "Nara", ["nrc"] = "Noric", ["nre"] = "Southern Rengma Naga", ["nrf"] = "Norman", ["nrg"] = "Narango", ["nri"] = "Chokri Naga", ["nrk"] = "Ngarla", ["nrl"] = "Ngarluma", ["nrm"] = "Narom", ["nrn"] = "Norn", ["nrp"] = "North Picene", ["nrr"] = "Norra", ["nrt"] = "Northern Kalapuya", ["nru"] = "Narua", ["nrx"] = "Ngurmbur", ["nrz"] = "Lala (New Guinea)", ["nsa"] = "Sangtam Naga", ["nsb"] = "Lower Nossob", ["nsc"] = "Nshi", ["nsd"] = "Southern Nisu", ["nse"] = "Nsenga", ["nsg"] = "Ngasa", ["nsh"] = "Ngoshie", ["nsi"] = "Nigerian Sign Language", ["nsk"] = "Naskapi", ["nsl"] = "Norwegian Sign Language", ["nsm"] = "Sema", ["nsn"] = "Nehan", ["nso"] = "Northern Sotho", ["nsp"] = "Nepalese Sign Language", ["nsq"] = "Northern Sierra Miwok", ["nsr"] = "Maritime Sign Language", ["nss"] = "Nali", ["nst"] = "Tangsa", ["nsu"] = "Sierra Negra Nahuatl", ["nsv"] = "Southwestern Nisu", ["nsw"] = "Navut", ["nsx"] = "Nsongo", ["nsy"] = "Nasal", ["nsz"] = "Nisenan", ["ntd"] = "Northern Tidong", ["nte"] = "Nathembo", ["ntg"] = "Ngantangarra", ["nti"] = "Natioro", ["ntj"] = "Ngaanyatjarra", ["ntk"] = "Ikoma", ["ntm"] = "Nateni", ["nto"] = "Ntomba", ["ntp"] = "Northern Tepehuan", ["ntr"] = "Delo", ["nts"] = "Natagaimas", ["ntu"] = "Natügu", ["ntw"] = "Nottoway", ["ntx"] = "Somra", ["nty"] = "Mantsi", ["nua"] = "Yuaga", ["nub-har"] = "Haraza", ["nub-pro"] = "Proto-Nubian", ["nuc"] = "Nukuini", ["nud"] = "Ngala", ["nue"] = "Ngundu", ["nuf"] = "Nusu", ["nug"] = "Nungali", ["nuh"] = "Ndunda", ["nui"] = "Ngumbi", ["nuj"] = "Nyole (Uganda)", ["nuk"] = "Nootka", ["nul"] = "Nusa Laut", ["num"] = "Niuafo'ou", ["nun"] = "Anong", ["nuo"] = "Nguôn", ["nup"] = "Nupe", ["nuq"] = "Nukumanu", ["nur"] = "Nuguria", ["nus"] = "Nuer", ["nut"] = "Nung", ["nuu"] = "Ngbundu", ["nuv"] = "Northern Nuni", ["nuw"] = "Nguluwan", ["nux"] = "Mehek", ["nuy"] = "Nunggubuyu", ["nuz"] = "Tlamacazapa Nahuatl", ["nv"] = "Navajo", ["nvh"] = "Nasarian", ["nvm"] = "Namiae", ["nvo"] = "Nyokon", ["nwa"] = "Nawathinehena", ["nwb"] = "Nyabwa", ["nwc"] = "Classical Newar", ["nwe"] = "Ngwe", ["nwi"] = "Southwest Tanna", ["nwm"] = "Nyamusa-Molo", ["nwo"] = "Nauo", ["nwr"] = "Nawaru", ["nwx"] = "Middle Newar", ["nwy"] = "Nottoway-Meherrin", ["nxa"] = "Nauete", ["nxd"] = "Ngando (Congo)", ["nxe"] = "Nage", ["nxg"] = "Ngadha", ["nxi"] = "Nindi", ["nxl"] = "South Nuaulu", ["nxm"] = "Numidian", ["nxn"] = "Ngawun", ["nxo"] = "Ndambomo", ["nxq"] = "Naxi", ["nxr"] = "Ninggerum", ["nxu"] = "Narau", ["nxx"] = "Nafri", ["ny"] = "Chichewa", ["nyb"] = "Nyangbo", ["nyc"] = "Nyanga-li", ["nyd"] = "Nyole (Kenya)", ["nye"] = "Nyengo", ["nyf"] = "Giryama", ["nyg"] = "Nyindu", ["nyh"] = "Nyigina", ["nyi"] = "Nyimang", ["nyj"] = "Nyanga (Congo)", ["nyk"] = "Nyaneka", ["nyl"] = "Nyeu", ["nym"] = "Nyamwezi", ["nyn"] = "Nyankole", ["nyo"] = "Nyoro", ["nyp"] = "Nyang'i", ["nys"] = "Nyunga", ["nyt"] = "Nyawaygi", ["nyu"] = "Nyungwe", ["nyv"] = "Nyulnyul", ["nyw"] = "Nyaw", ["nyx"] = "Nganyaywana", ["nyy"] = "Nyakyusa", ["nza"] = "Tigon Mbembe", ["nzb"] = "Njebi", ["nzd"] = "Nzadi", ["nzi"] = "Nzima", ["nzk"] = "Nzakara", ["nzm"] = "Zeme Naga", ["nzs"] = "New Zealand Sign Language", ["nzu"] = "Central Teke", ["nzy"] = "Nzakambay", ["nzz"] = "Nanga Dama Dogon", ["oaa"] = "Orok", ["oac"] = "Oroch", ["oav"] = "Old Avar", ["obi"] = "Obispeño", ["obk"] = "Southern Bontoc", ["obl"] = "Oblo", ["obm"] = "Moabite", ["obo"] = "Obo Manobo", ["obr"] = "Old Burmese", ["obt"] = "Old Breton", ["obu"] = "Obulom", ["oc"] = "Occitan", ["oca"] = "Ocaina", ["och"] = "Old Chinese", ["oco"] = "Old Cornish", ["ocu"] = "Tlahuica", ["oda"] = "Odut", ["odk"] = "Od", ["odt"] = "Old Dutch", ["odu"] = "Odual", ["ofo"] = "Ofo", ["ofs"] = "Old Frisian", ["ofu"] = "Efutop", ["ogb"] = "Ogbia", ["ogc"] = "Ogbah", ["oge"] = "Old Georgian", ["ogg"] = "Ogbogolo", ["ogo"] = "Khana", ["ogu"] = "Ogbronuagum", ["ohu"] = "Old Hungarian", ["oia"] = "Oirata", ["oin"] = "Inebu One", ["oj"] = "Ojibwe", ["ojb"] = "Northwestern Ojibwa", ["ojc"] = "Central Ojibwa", ["ojg"] = "Eastern Ojibwa", ["ojp"] = "Old Japanese", ["ojs"] = "Severn Ojibwa", ["ojv"] = "Ontong Java", ["ojw"] = "Western Ojibwa", ["oka"] = "Okanagan", ["okb"] = "Okobo", ["okd"] = "Okodia", ["oke"] = "Okpe (Southwestern Edo)", ["okg"] = "Kok-Paponk", ["okh"] = "Koresh-e Rostam", ["oki"] = "Okiek", ["okj"] = "Oko-Juwoi", ["okk"] = "Kwamtim One", ["okl"] = "Old Kentish Sign Language", ["okm"] = "Middle Korean", ["okn"] = "Oki-No-Erabu", ["oko"] = "Old Korean", ["okr"] = "Kirike", ["oks"] = "Oko-Eni-Osayen", ["oku"] = "Oku", ["okv"] = "Orokaiva", ["okx"] = "Okpe (Northwestern Edo)", ["okz"] = "Old Khmer", ["old"] = "Mochi", ["ole"] = "Olekha", ["olm"] = "Oloma", ["olo"] = "Livvi", ["olr"] = "Olrat", ["olt"] = "Old Lithuanian", ["olu"] = "Kuvale", ["om"] = "Oromo", ["oma"] = "Omaha-Ponca", ["omb"] = "Omba", ["omc"] = "Mochica", ["omg"] = "Omagua", ["omi"] = "Omi", ["omk"] = "Omok", ["oml"] = "Ombo", ["omn"] = "Minoan", ["omo"] = "Utarmbung", ["omp"] = "Old Manipuri", ["omq-cha-pro"] = "Proto-Chatino", ["omq-maz-pro"] = "Proto-Mazatec", ["omq-mix-pro"] = "Proto-Mixtecan", ["omq-mxt-pro"] = "Proto-Mixtec", ["omq-otp-pro"] = "Proto-Oto-Pamean", ["omq-pro"] = "Proto-Oto-Manguean", ["omq-tel"] = "Teposcolula Mixtec", ["omq-teo"] = "Teojomulco Chatino", ["omq-tri-pro"] = "Proto-Trique", ["omq-zap-pro"] = "Proto-Zapotecan", ["omq-zpc-pro"] = "Proto-Zapotec", ["omr"] = "Old Marathi", ["omt"] = "Omotik", ["omu"] = "Omurano", ["omv-aro-pro"] = "Proto-Aroid", ["omv-diz-pro"] = "Proto-Dizoid", ["omv-pro"] = "Proto-Omotic", ["omw"] = "South Tairora", ["omx"] = "Old Mon", ["ona"] = "Selk'nam", ["onb"] = "Lingao", ["one"] = "Oneida", ["ong"] = "Olo", ["oni"] = "Onin", ["onj"] = "Onjob", ["onk"] = "Kabore One", ["onn"] = "Onobasulu", ["ono"] = "Onondaga", ["onp"] = "Sartang", ["onr"] = "Northern One", ["ons"] = "Ono", ["ont"] = "Ontenu", ["onu"] = "Unua", ["onw"] = "Old Nubian", ["onx"] = "Pidgin Onin", ["ood"] = "O'odham", ["oog"] = "Ong", ["oon"] = "Önge", ["oor"] = "Oorlams", ["oos"] = "Old Ossetic", ["opa"] = "Okpamheri", ["opk"] = "Kopkaka", ["opm"] = "Oksapmin", ["opo"] = "Opao", ["opt"] = "Opata", ["opy"] = "Ofayé", ["or"] = "Oriya", ["ora"] = "Oroha", ["ore"] = "Orejón", ["org"] = "Oring", ["orh"] = "Oroqen", ["oro"] = "Orokolo", ["orr"] = "Oruma", ["ort"] = "Adivasi Oriya", ["oru"] = "Ormuri", ["orv"] = "Old East Slavic", ["orw"] = "Oro Win", ["orx"] = "Oro", ["orz"] = "Ormu", ["os"] = "Ossetian", ["os-pro"] = "Proto-Ossetic", ["osa"] = "Osage", ["osc"] = "Oscan", ["osi"] = "Osing", ["osn"] = "Old Sundanese", ["oso"] = "Ososo", ["osp"] = "Old Spanish", ["ost"] = "Osatu", ["osu"] = "Southern One", ["osx"] = "Old Saxon", ["ota"] = "Ottoman Turkish", ["otb"] = "Old Tibetan", ["otd"] = "Ot Danum", ["ote"] = "Mezquital Otomi", ["oti"] = "Oti", ["otk"] = "Old Turkic", ["otl"] = "Tilapa Otomi", ["otm"] = "Eastern Highland Otomi", ["otn"] = "Tenango Otomi", ["oto-otm-pro"] = "Proto-Otomi", ["oto-pro"] = "Proto-Otomian", ["otq"] = "Querétaro Otomi", ["otr"] = "Otoro", ["ots"] = "Estado de México Otomi", ["ott"] = "Temoaya Otomi", ["otu"] = "Otuke", ["otw"] = "Ottawa", ["otx"] = "Texcatepec Otomi", ["oty"] = "Old Tamil", ["otz"] = "Ixtenco Otomi", ["oub"] = "Glio-Oubi", ["oue"] = "Oune", ["oui"] = "Old Uyghur", ["oum"] = "Ouma", ["ovd"] = "Elfdalian", ["owi"] = "Owiniga", ["owl"] = "Old Welsh", ["oyb"] = "Oy", ["oyd"] = "Oyda", ["oym"] = "Wayampi", ["oyy"] = "Oya'oya", ["ozm"] = "Koonzime", ["pa"] = "Punjabi", ["paa-kom"] = "Kómnzo", ["paa-kwn"] = "Kuwani", ["paa-nha-pro"] = "Proto-North Halmahera", ["paa-nun"] = "Nungon", ["pab"] = "Pareci", ["pac"] = "Pacoh", ["pad"] = "Paumarí", ["pae"] = "Pagibete", ["paf"] = "Paranawát", ["pag"] = "Pangasinan", ["pah"] = "Tenharim", ["pai"] = "Pe", ["pak"] = "Parakanã", ["pal"] = "Middle Persian", ["pam"] = "Kapampangan", ["pao"] = "Northern Paiute", ["pap"] = "Papiamentu", ["paq"] = "Parya", ["par"] = "Panamint", ["pas"] = "Papasena", ["pat"] = "Papitalai", ["pau"] = "Palauan", ["pav"] = "Wari'", ["paw"] = "Pawnee", ["pax"] = "Pankararé", ["pay"] = "Pech", ["paz"] = "Pankararú", ["pbb"] = "Páez", ["pbc"] = "Patamona", ["pbe"] = "Mezontla Popoloca", ["pbf"] = "Coyotepec Popoloca", ["pbg"] = "Paraujano", ["pbh"] = "Panare", ["pbi"] = "Podoko", ["pbl"] = "Mak (Nigeria)", ["pbm"] = "Puebla Mazatec", ["pbn"] = "Kpasam", ["pbo"] = "Papel", ["pbp"] = "Badyara", ["pbr"] = "Pangwa", ["pbs"] = "Central Pame", ["pbv"] = "Pnar", ["pby"] = "Pyu", ["pca"] = "Santa Inés Ahuatempan Popoloca", ["pcb"] = "Pear", ["pcc"] = "Bouyei", ["pcd"] = "Picard", ["pce"] = "Ruching Palaung", ["pcf"] = "Paliyan", ["pcg"] = "Paniya", ["pch"] = "Pardhan", ["pci"] = "Duruwa", ["pcj"] = "Parenga", ["pck"] = "Paite", ["pcl"] = "Pardhi", ["pcm"] = "Nigerian Pidgin", ["pcn"] = "Piti", ["pcp"] = "Pacahuara", ["pcw"] = "Pyapun", ["pda"] = "Anam", ["pdc"] = "Pennsylvania German", ["pdi"] = "Pa Di", ["pdn"] = "Fedan", ["pdo"] = "Padoe", ["pdt"] = "Plautdietsch", ["pdu"] = "Kayan", ["pea"] = "Peranakan Indonesian", ["peb"] = "Eastern Pomo", ["ped"] = "Mala (New Guinea)", ["pee"] = "Taje", ["pef"] = "Northeastern Pomo", ["peg"] = "Pengo", ["peh"] = "Bonan", ["pei"] = "Chichimeca-Jonaz", ["pej"] = "Northern Pomo", ["pek"] = "Penchal", ["pel"] = "Pekal", ["pem"] = "Phende", ["peo"] = "Old Persian", ["pep"] = "Kunja", ["peq"] = "Southern Pomo", ["pev"] = "Pémono", ["pex"] = "Petats", ["pey"] = "Petjo", ["pez"] = "Eastern Penan", ["pfa"] = "Pááfang", ["pfe"] = "Peere", ["pga"] = "Juba Arabic", ["pgd"] = "Gandhari", ["pgg"] = "Pangwali", ["pgi"] = "Pagi", ["pgk"] = "Rerep", ["pgl"] = "Primitive Irish", ["pgn"] = "Paelignian", ["pgs"] = "Pangseng", ["pgu"] = "Pagu", ["pgz"] = "Papua New Guinean Sign Language", ["pha"] = "Pa-Hng", ["phd"] = "Phudagi", ["phg"] = "Phuong", ["phh"] = "Phukha", ["phi-din"] = "Dinapigue Agta", ["phi-kal-pro"] = "Proto-Kalamian", ["phi-nag"] = "Nagtipunan Agta", ["phi-pro"] = "Proto-Philippine", ["phk"] = "Phake", ["phl"] = "Phalura", ["phm"] = "Phimbi", ["phn"] = "Phoenician", ["pho"] = "Phunoi", ["phq"] = "Phana'", ["phr"] = "Pahari-Potwari", ["pht"] = "Phu Thai", ["phu"] = "Phuan", ["phv"] = "Pahlavani", ["phw"] = "Phangduwali", ["pi"] = "Pali", ["pia"] = "Pima Bajo", ["pib"] = "Yine", ["pic"] = "Pinji", ["pid"] = "Piaroa", ["pie"] = "Piro", ["pif"] = "Pingelapese", ["pig"] = "Pisabo", ["pih"] = "Pitcairn-Norfolk", ["pii"] = "Pini", ["pij"] = "Pijao", ["pil"] = "Yom", ["pim"] = "Powhatan", ["pin"] = "Piame", ["pio"] = "Piapoco", ["pip"] = "Pero", ["pir"] = "Piratapuyo", ["pis"] = "Pijin", ["pit"] = "Pitta-Pitta", ["piu"] = "Pintupi-Luritja", ["piv"] = "Pileni", ["piw"] = "Pimbwe", ["pix"] = "Piu", ["piy"] = "Piya-Kwonci", ["piz"] = "Pije", ["pjt"] = "Pitjantjatjara", ["pka"] = "Ardhamagadhi Prakrit", ["pkb"] = "Kipfokomo", ["pkc"] = "Baekje", ["pkg"] = "Pak-Tong", ["pkh"] = "Pankhu", ["pkn"] = "Pakanha", ["pko"] = "Pökoot", ["pkp"] = "Pukapukan", ["pkr"] = "Attapady Kurumba", ["pks"] = "Pakistan Sign Language", ["pkt"] = "Maleng", ["pku"] = "Paku", ["pl"] = "Polish", ["pla"] = "Miani", ["plb"] = "Polonombauk", ["plc"] = "Central Palawano", ["ple"] = "Palu'e", ["plg"] = "Pilagá", ["plh"] = "Paulohi", ["plj"] = "Polci", ["plk"] = "Kohistani Shina", ["pll"] = "Shwe Palaung", ["pln"] = "Palenquero", ["plo"] = "Oluta Popoluca", ["plq"] = "Palaic", ["plr"] = "Palaka Senoufo", ["pls"] = "San Marcos Tlalcoyalco Popoloca", ["plu"] = "Palikur", ["plv"] = "Southwest Palawano", ["plw"] = "Brooke's Point Palawano", ["ply"] = "Bolyu", ["plz"] = "Paluan", ["pma"] = "Paama", ["pmb"] = "Pambia", ["pmd"] = "Pallanganmiddang", ["pme"] = "Pwaamei", ["pmf"] = "Pamona", ["pmh"] = "Maharastri Prakrit", ["pmi"] = "Northern Pumi", ["pmj"] = "Southern Pumi", ["pmk"] = "Pamlico", ["pml"] = "Sabir", ["pmm"] = "Pol", ["pmn"] = "Pam", ["pmo"] = "Pom", ["pmq"] = "Northern Pame", ["pmr"] = "Paynamar", ["pms"] = "Piedmontese", ["pmt"] = "Tuamotuan", ["pmu"] = "Mirpur Panjabi", ["pmw"] = "Plains Miwok", ["pmx"] = "Poumei Naga", ["pmy"] = "Papuan Malay", ["pmz"] = "Southern Pame", ["pna"] = "Punan Bah-Biau", ["pnb"] = "Western Panjabi", ["pnc"] = "Pannei", ["pnd"] = "Mpinda", ["pne"] = "Western Penan", ["png"] = "Pongu", ["pnh"] = "Penrhyn", ["pni"] = "Aoheng", ["pnj"] = "Pinjarup", ["pnk"] = "Paunaca", ["pnl"] = "Paleni", ["pnm"] = "Punan Batu", ["pnn"] = "Pinai-Hagahai", ["pno"] = "Panobo", ["pnp"] = "Pancana", ["pnq"] = "Pana (West Africa)", ["pnr"] = "Panim", ["pns"] = "Ponosakan", ["pnt"] = "Pontic Greek", ["pnu"] = "Jiongnai Bunu", ["pnv"] = "Pinigura", ["pnw"] = "Panyjima", ["pnx"] = "Phong-Kniang", ["pny"] = "Pinyin", ["pnz"] = "Pana (Central Africa)", ["poc"] = "Poqomam", ["poe"] = "San Juan Atzingo Popoloca", ["pof"] = "Poke", ["pog"] = "Potiguára", ["poh"] = "Poqomchi'", ["poi"] = "Highland Popoluca", ["pok"] = "Pokangá", ["pom"] = "Southeastern Pomo", ["pon"] = "Pohnpeian", ["poo"] = "Central Pomo", ["pop"] = "Pwapwa", ["poq"] = "Texistepec Popoluca", ["pos"] = "Sayula Popoluca", ["pot"] = "Potawatomi", ["pov"] = "Guinea-Bissau Creole", ["pow"] = "San Felipe Otlaltepec Popoloca", ["pox"] = "Polabian", ["poy"] = "Pogolo", ["poz-abi"] = "Abai", ["poz-bal"] = "Baliledo", ["poz-btk-pro"] = "Proto-Bungku-Tolaki", ["poz-cet-pro"] = "Proto-Central-Eastern Malayo-Polynesian", ["poz-hce-pro"] = "Proto-Halmahera-Cenderawasih", ["poz-lgx-pro"] = "Proto-Lampungic", ["poz-mcm-pro"] = "Proto-Malayo-Chamic", ["poz-mly-pro"] = "Proto-Malayic", ["poz-msa-pro"] = "Proto-Malayo-Sumbawan", ["poz-oce-pro"] = "Proto-Oceanic", ["poz-pep-pro"] = "Proto-Eastern Polynesian", ["poz-pnp-pro"] = "Proto-Nuclear Polynesian", ["poz-pol-pro"] = "Proto-Polynesian", ["poz-pro"] = "Proto-Malayo-Polynesian", ["poz-ssw-pro"] = "Proto-South Sulawesi", ["poz-sus-pro"] = "Proto-Sunda-Sulawesi", ["poz-swa-pro"] = "Proto-North Sarawak", ["ppa"] = "Pao", ["ppe"] = "Papi", ["ppi"] = "Paipai", ["ppk"] = "Uma", ["ppl"] = "Pipil", ["ppm"] = "Papuma", ["ppn"] = "Papapana", ["ppo"] = "Folopa", ["ppq"] = "Pei", ["pps"] = "San Luís Temalacayuca Popoloca", ["ppt"] = "Pa", ["ppu"] = "Papora", ["pqa"] = "Pa'a", ["pqe-pro"] = "Proto-Eastern Malayo-Polynesian", ["pqm"] = "Malecite-Passamaquoddy", ["pra-niy"] = "Niya Prakrit", ["prc"] = "Parachi", ["pre"] = "Principense", ["prf"] = "Paranan", ["prg"] = "Old Prussian", ["prh"] = "Porohanon", ["pri"] = "Paicî", ["prk"] = "Parauk", ["prl"] = "Peruvian Sign Language", ["prm"] = "Kibiri", ["prn"] = "Prasuni", ["pro"] = "Old Occitan", ["prq"] = "Ashéninka Perené", ["prr"] = "Puri", ["prt"] = "Phai", ["pru"] = "Puragi", ["prw"] = "Parawen", ["prx"] = "Purik", ["prz"] = "Providencia Sign Language", ["ps"] = "Pashto", ["psa"] = "Asue Awyu", ["psc"] = "Persian Sign Language", ["psd"] = "Plains Indian Sign Language", ["pse"] = "Central Malay", ["psg"] = "Penang Sign Language", ["psh"] = "Southwest Pashayi", ["psi"] = "Southeast Pashayi", ["psl"] = "Puerto Rican Sign Language", ["psm"] = "Pauserna", ["psn"] = "Panasuan", ["pso"] = "Polish Sign Language", ["psp"] = "Philippine Sign Language", ["psq"] = "Pasi", ["psr"] = "Portuguese Sign Language", ["pss"] = "Kaulong", ["psu"] = "Sauraseni Prakrit", ["psw"] = "Port Sandwich", ["psy"] = "Piscataway", ["pt"] = "Portuguese", ["pta"] = "Pai Tavytera", ["pth"] = "Pataxó Hã-Ha-Hãe", ["pti"] = "Pintiini", ["ptn"] = "Patani", ["pto"] = "Zo'é", ["ptp"] = "Patep", ["ptq"] = "Pattapu", ["ptr"] = "Piamatsina", ["ptt"] = "Enrekang", ["ptu"] = "Bambam", ["ptv"] = "Port Vato", ["ptw"] = "Pentlatch", ["pty"] = "Pathiya", ["pua"] = "Purepecha", ["pub"] = "Purum", ["puc"] = "Punan Merap", ["pud"] = "Punan Aput", ["pue"] = "Puelche", ["puf"] = "Punan Merah", ["pug"] = "Phuie", ["pui"] = "Puinave", ["puj"] = "Punan Tubu", ["pum"] = "Puma", ["puo"] = "Puoc", ["pup"] = "Pulabu", ["puq"] = "Puquina", ["pur"] = "Puruborá", ["put"] = "Putoh", ["puu"] = "Punu", ["puw"] = "Puluwat", ["pux"] = "Puare", ["puy"] = "Purisimeño", ["pwa"] = "Pawaia", ["pwb"] = "Panawa", ["pwg"] = "Gapapaiwa", ["pwi"] = "Patwin", ["pwm"] = "Molbog", ["pwn"] = "Paiwan", ["pwo"] = "Western Pwo", ["pwr"] = "Powari", ["pww"] = "Northern Pwo", ["pxm"] = "Quetzaltepec Mixe", ["pye"] = "Pye Krumen", ["pym"] = "Fyam", ["pyn"] = "Poyanáwa", ["pys"] = "Paraguayan Sign Language", ["pyu"] = "Puyuma", ["pyx"] = "Tircul", ["pyy"] = "Pyen", ["pzh"] = "Pazeh", ["pzn"] = "Para Naga", ["qfa-adm-pro"] = "Proto-Great Andamanese", ["qfa-bet-pro"] = "Proto-Be-Tai", ["qfa-cka-pro"] = "Proto-Chukotko-Kamchatkan", ["qfa-hur-pro"] = "Proto-Hurro-Urartian", ["qfa-kad-pro"] = "Proto-Kadu", ["qfa-kms-pro"] = "Proto-Kam-Sui", ["qfa-kor-pro"] = "Proto-Koreanic", ["qfa-kra-pro"] = "Proto-Kra", ["qfa-lic-pro"] = "Proto-Hlai", ["qfa-onb-pro"] = "Proto-Be", ["qfa-ong-pro"] = "Proto-Ongan", ["qfa-tak-pro"] = "Proto-Kra-Dai", ["qfa-xgx-tuh"] = "Tuyuhun", ["qfa-xgx-tuo"] = "Tuoba", ["qfa-xgx-wuh"] = "Wuhuan", ["qfa-xgx-xbi"] = "Xianbei", ["qfa-yen-pro"] = "Proto-Yeniseian", ["qfa-yuk-pro"] = "Proto-Yukaghir", ["qu"] = "Quechua", ["qua"] = "Quapaw", ["quc"] = "K'iche'", ["qui"] = "Quileute", ["qum"] = "Sipakapense", ["qun"] = "Quinault", ["quq"] = "Quinqui", ["quv"] = "Sacapulteco", ["qvy"] = "Queyu", ["qwc"] = "Classical Quechua", ["qwe-kch"] = "Kichwa", ["qwm"] = "Kipchak", ["qwt"] = "Kwalhioqua-Tlatskanai", ["qxs"] = "Southern Qiang", ["qya"] = "Quenya", ["qyp"] = "Quiripi", ["raa"] = "Dungmali", ["rab"] = "Chamling", ["rac"] = "Rasawa", ["rad"] = "Rade", ["raf"] = "Western Meohang", ["rag"] = "Logooli", ["rah"] = "Rabha", ["rai"] = "Ramoaaina", ["raj"] = "Rajasthani", ["rak"] = "Tulu-Bohuai", ["ral"] = "Ralte", ["ram"] = "Canela", ["ran"] = "Riantana", ["rao"] = "Rao", ["rap"] = "Rapa Nui", ["raq"] = "Saam", ["rar"] = "Rarotongan", ["ras"] = "Tegali", ["rat"] = "Razajerdi", ["rau"] = "Raute", ["rav"] = "Sampang", ["raw"] = "Rawang", ["rax"] = "Rang", ["ray"] = "Rapa", ["raz"] = "Rahambuu", ["rbb"] = "Rumai Palaung", ["rbk"] = "Northern Bontoc", ["rbl"] = "Miraya Bikol", ["rcf"] = "Réunion Creole French", ["rdb"] = "Rudbari", ["rea"] = "Rerau", ["reb"] = "Rembong", ["ree"] = "Rejang Kayan", ["reg"] = "Kara (Tanzania)", ["rei"] = "Reli", ["rej"] = "Rejang", ["rel"] = "Rendille", ["rem"] = "Remo", ["ren"] = "Rengao", ["rer"] = "Rer Bare", ["res"] = "Reshe", ["ret"] = "Retta", ["rey"] = "Reyesano", ["rga"] = "Roria", ["rge"] = "Romani Greek", ["rgk"] = "Rangkas", ["rgn"] = "Romagnol", ["rgr"] = "Resígaro", ["rgs"] = "Southern Roglai", ["rgu"] = "Ringgou", ["rhg"] = "Rohingya", ["rhp"] = "Yahang", ["ria"] = "Reang", ["rif"] = "Tarifit", ["ril"] = "Riang", ["rim"] = "Nyaturu", ["rin"] = "Nungu", ["rir"] = "Ribun", ["rit"] = "Ritarungo", ["riu"] = "Riung", ["rjg"] = "Rajong", ["rji"] = "Raji", ["rjs"] = "Rajbanshi", ["rka"] = "Kraol", ["rkb"] = "Rikbaktsa", ["rkh"] = "Rakahanga-Manihiki", ["rki"] = "Rakhine", ["rkm"] = "Marka", ["rkt"] = "Kamta", ["rkw"] = "Arakwal", ["rm"] = "Romansch", ["rma"] = "Rama", ["rmb"] = "Rembarunga", ["rmc"] = "Carpathian Romani", ["rmd"] = "Traveller Danish", ["rme"] = "Angloromani", ["rmf"] = "Kalo Finnish Romani", ["rmg"] = "Traveller Norwegian", ["rmh"] = "Murkim", ["rmi"] = "Lomavren", ["rmk"] = "Romkun", ["rml"] = "Baltic Romani", ["rmm"] = "Roma", ["rmn"] = "Balkan Romani", ["rmo"] = "Sinte Romani", ["rmp"] = "Rempi", ["rmq"] = "Caló", ["rms"] = "Romanian Sign Language", ["rmt"] = "Domari", ["rmu"] = "Tavringer Romani", ["rmv"] = "Romanova", ["rmw"] = "Welsh Romani", ["rmx"] = "Romam", ["rmy"] = "Vlax Romani", ["rmz"] = "Marma", ["rnd"] = "Ruwund", ["rng"] = "Ronga", ["rnl"] = "Ranglong", ["rnn"] = "Roon", ["rnp"] = "Rongpo", ["rnw"] = "Rungwa", ["ro"] = "Romanian", ["roa-ang"] = "Angevin", ["roa-bbn"] = "Bourbonnais-Berrichon", ["roa-brg"] = "Bourguignon", ["roa-cha"] = "Champenois", ["roa-fcm"] = "Franc-Comtois", ["roa-gal"] = "Gallo", ["roa-leo"] = "Leonese", ["roa-lor"] = "Lorrain", ["roa-oan"] = "Navarro-Aragonese", ["roa-oca"] = "Old Catalan", ["roa-ole"] = "Old Leonese", ["roa-opt"] = "Old Galician-Portuguese", ["roa-orl"] = "Orléanais", ["roa-poi"] = "Poitevin-Saintongeais", ["roa-tar"] = "Tarantino", ["roa-tou"] = "Tourangeau", ["rob"] = "Tae'", ["roc"] = "Cacgia Roglai", ["rod"] = "Rogo", ["roe"] = "Ronji", ["rof"] = "Rombo", ["rog"] = "Northern Roglai", ["rol"] = "Romblomanon", ["rom"] = "Romani", ["roo"] = "Rotokas", ["rop"] = "Kriol", ["ror"] = "Rongga", ["rou"] = "Runga", ["row"] = "Dela-Oenale", ["rpn"] = "Repanbitip", ["rpt"] = "Rapting", ["rri"] = "Ririo", ["rro"] = "Roro", ["rrt"] = "Arritinngithigh", ["rsb"] = "Romano-Serbian", ["rsl"] = "Russian Sign Language", ["rsm"] = "Miriwoong Sign Language", ["rtc"] = "Rungtu", ["rth"] = "Ratahan", ["rtm"] = "Rotuman", ["rtw"] = "Rathawi", ["ru"] = "Russian", ["rub"] = "Gungu", ["ruc"] = "Ruuli", ["rue"] = "Rusyn", ["ruf"] = "Luguru", ["rug"] = "Roviana", ["ruh"] = "Ruga", ["rui"] = "Rufiji", ["ruk"] = "Che", ["ruo"] = "Istro-Romanian", ["rup"] = "Aromanian", ["ruq"] = "Megleno-Romanian", ["rut"] = "Rutul", ["ruu"] = "Lanas Lobu", ["ruy"] = "Mala (Nigeria)", ["ruz"] = "Ruma", ["rw"] = "Rwanda-Rundi", ["rwa"] = "Rawo", ["rwk"] = "Rwa", ["rwm"] = "Amba", ["rwo"] = "Rawa", ["rxd"] = "Ngardi", ["rxw"] = "Karuwali", ["ryn"] = "Northern Amami-Oshima", ["rys"] = "Yaeyama", ["ryu"] = "Okinawan", ["rzh"] = "Razihi", ["sa"] = "संस्कृत", ["saa"] = "Saba", ["sab"] = "Buglere", ["sac"] = "Fox", ["sad"] = "Sandawe", ["sae"] = "Sabanê", ["saf"] = "Safaliba", ["sah"] = "Yakut", ["sai-ajg"] = "Ajagua", ["sai-all"] = "Allentiac", ["sai-and"] = "Andoquero", ["sai-ayo"] = "Ayomán", ["sai-bae"] = "Baenan", ["sai-bag"] = "Bagua", ["sai-bet"] = "Betoi", ["sai-bor-pro"] = "Proto-Boran", ["sai-cac"] = "Cacán", ["sai-caq"] = "Caranqui", ["sai-car-pro"] = "Proto-Cariban", ["sai-cat"] = "Catacao", ["sai-cer-pro"] = "Proto-Cerrado", ["sai-chi"] = "Chirino", ["sai-chn"] = "Chaná", ["sai-chp"] = "Chapacura", ["sai-chr"] = "Charrua", ["sai-chu"] = "Churuya", ["sai-cje-pro"] = "Proto-Central Jê", ["sai-cmg"] = "Comechingon", ["sai-cno"] = "Chono", ["sai-cnr"] = "Cañari", ["sai-coe"] = "Coeruna", ["sai-col"] = "Colán", ["sai-cop"] = "Copallén", ["sai-crd"] = "Coroado Puri", ["sai-ctq"] = "Catuquinaru", ["sai-cul"] = "Culli", ["sai-cva"] = "Cueva", ["sai-esm"] = "Esmeralda", ["sai-ewa"] = "Ewarhuyana", ["sai-gam"] = "Gamela", ["sai-gay"] = "Gayón", ["sai-gmo"] = "Guamo", ["sai-gue"] = "Güenoa", ["sai-hau"] = "Haush", ["sai-hoc-pro"] = "Proto-Huitoto-Ocaina", ["sai-jee-pro"] = "Proto-Jê", ["sai-jko"] = "Jeikó", ["sai-jrj"] = "Jirajara", ["sai-kat"] = "Katembri", ["sai-mal"] = "Malalí", ["sai-mar"] = "Maratino", ["sai-mat"] = "Matanawi", ["sai-mcn"] = "Mocana", ["sai-men"] = "Menien", ["sai-mil"] = "Millcayac", ["sai-mlb"] = "Malibu", ["sai-msk"] = "Masakará", ["sai-muc"] = "Mucuchí", ["sai-mue"] = "Muellama", ["sai-muz"] = "Muzo", ["sai-mys"] = "Maynas", ["sai-nat"] = "Natú", ["sai-nje-pro"] = "Proto-Northern Jê", ["sai-opo"] = "Opón", ["sai-oto"] = "Otomaco", ["sai-pal"] = "Palta", ["sai-pam"] = "Pamigua", ["sai-par"] = "Paratió", ["sai-pnz"] = "Panzaleo", ["sai-prh"] = "Puruhá", ["sai-ptg"] = "Patagón", ["sai-pur"] = "Purukotó", ["sai-pyg"] = "Payaguá", ["sai-pyk"] = "Pykobjê", ["sai-qmb"] = "Quimbaya", ["sai-qtm"] = "Quitemo", ["sai-rab"] = "Rabona", ["sai-ram"] = "Ramanos", ["sai-sac"] = "Sácata", ["sai-san"] = "Sanaviron", ["sai-sap"] = "Sapará", ["sai-sec"] = "Sechura", ["sai-sin"] = "Sinúfana", ["sai-sje-pro"] = "Proto-Southern Jê", ["sai-tab"] = "Tabancale", ["sai-tal"] = "Tallán", ["sai-tap"] = "Tapayuna", ["sai-tar-pro"] = "Proto-Taranoan", ["sai-teu"] = "Teushen", ["sai-tim"] = "Timote", ["sai-tpr"] = "Taparita", ["sai-trr"] = "Tarairiú", ["sai-wai"] = "Waitaká", ["sai-way"] = "Wayumará", ["sai-wit-pro"] = "Proto-Witotoan", ["sai-wnm"] = "Wanham", ["sai-xoc"] = "Xocó", ["sai-yao"] = "Yao (South America)", ["sai-yar"] = "Yarumá", ["sai-yri"] = "Yuri", ["sai-yup"] = "Yupua", ["sai-yur"] = "Yurumanguí", ["saj"] = "Sahu", ["sak"] = "Sake", ["sal-pro"] = "Proto-Salish", ["sam"] = "Samaritan Aramaic", ["sao"] = "Sause", ["saq"] = "Samburu", ["sar"] = "Saraveca", ["sas"] = "Sasak", ["sat"] = "Santali", ["sau"] = "Saleman", ["sav"] = "Saafi-Saafi", ["saw"] = "Sawi", ["sax"] = "Sa", ["say"] = "Saya", ["saz"] = "Saurashtra", ["sba"] = "Ngambay", ["sbb"] = "Simbo", ["sbc"] = "Gele'", ["sbd"] = "Southern Samo", ["sbe"] = "Saliba (New Guinea)", ["sbf"] = "Shabo", ["sbg"] = "Seget", ["sbh"] = "Sori-Harengan", ["sbi"] = "Seti", ["sbj"] = "Surbakhal", ["sbk"] = "Safwa", ["sbl"] = "Botolan Sambal", ["sbm"] = "Sagala", ["sbn"] = "Sindhi Bhil", ["sbo"] = "Sabüm", ["sbp"] = "Sangu (Tanzania)", ["sbq"] = "Sileibi", ["sbr"] = "Sembakung Murut", ["sbs"] = "Subiya", ["sbt"] = "Kimki", ["sbu"] = "Stod Bhoti", ["sbv"] = "Sabine", ["sbw"] = "Simba", ["sbx"] = "Seberuang", ["sby"] = "Soli", ["sbz"] = "Sara Kaba", ["sc"] = "Sardinian", ["scb"] = "Chut", ["sce"] = "Dongxiang", ["scf"] = "San Miguel Creole French", ["scg"] = "Sanggau", ["sch"] = "Sakachep", ["sci"] = "Sri Lankan Creole Malay", ["sck"] = "Sadri", ["scl"] = "Shina", ["scn"] = "Sicilian", ["sco"] = "Scots", ["scp"] = "Yolmo", ["scq"] = "Sa'och", ["scs"] = "North Slavey", ["scu"] = "Shumcho", ["scv"] = "Sheni", ["scw"] = "Sha", ["scx"] = "Sicel", ["sd"] = "Sindhi", ["sda"] = "Toraja-Sa'dan", ["sdb"] = "Shabak", ["sdc"] = "Sassarese", ["sde"] = "Surubu", ["sdf"] = "Sarli", ["sdg"] = "Savi", ["sdh"] = "Southern Kurdish", ["sdj"] = "Suundi", ["sdk"] = "Sos Kundi", ["sdl"] = "Saudi Arabian Sign Language", ["sdm"] = "Semandang", ["sdn"] = "Gallurese", ["sdo"] = "Bukar-Sadung Bidayuh", ["sdp"] = "Sherdukpen", ["sdr"] = "Oraon Sadri", ["sds"] = "Tunisian Berber", ["sdu"] = "Sarudu", ["sdv-daj-pro"] = "Proto-Daju", ["sdv-eje-pro"] = "Proto-Eastern Jebel", ["sdv-nil-pro"] = "Proto-Nilotic", ["sdv-nyi-pro"] = "Proto-Nyima", ["sdv-tmn-pro"] = "Proto-Taman", ["sdx"] = "Sibu Melanau", ["se"] = "Northern Sami", ["sea"] = "Semai", ["sec"] = "Sechelt", ["sed"] = "Sedang", ["see"] = "Seneca", ["sef"] = "Cebaara Senoufo", ["seg"] = "Segeju", ["seh"] = "Sena", ["sei"] = "Seri", ["sej"] = "Sene", ["sek"] = "Sekani", ["sel-nor"] = "Northern Selkup", ["sel-pro"] = "Proto-Selkup", ["sel-sou"] = "Southern Selkup", ["sem-amm"] = "Ammonite", ["sem-amo"] = "Amorite", ["sem-cha"] = "Chaha", ["sem-dad"] = "Dadanitic", ["sem-dum"] = "Dumaitic", ["sem-has"] = "Hasaitic", ["sem-him"] = "Himyaritic", ["sem-his"] = "Hismaic", ["sem-mhr"] = "Muher", ["sem-pro"] = "Proto-Semitic", ["sem-saf"] = "Safaitic", ["sem-srb"] = "Old South Arabian", ["sem-tay"] = "Taymanitic", ["sem-tha"] = "Thamudic", ["sem-wes-pro"] = "Proto-West Semitic", ["sen"] = "Nanerigé Sénoufo", ["seo"] = "Suarmin", ["sep"] = "Sìcìté Sénoufo", ["seq"] = "Senara Sénoufo", ["ser"] = "Serrano", ["ses"] = "Koyraboro Senni", ["set"] = "Sentani", ["seu"] = "Serui-Laut", ["sev"] = "Nyarafolo Senoufo", ["sew"] = "Sewa Bay", ["sey"] = "Secoya", ["sez"] = "Senthang Chin", ["sfb"] = "French Belgian Sign Language", ["sfm"] = "Small Flowery Miao", ["sfs"] = "South African Sign Language", ["sfw"] = "Sehwi", ["sg"] = "Sango", ["sga"] = "Old Irish", ["sgb"] = "Mag-Anchi Ayta", ["sgc"] = "Kipsigis", ["sgd"] = "Surigaonon", ["sge"] = "Segai", ["sgg"] = "Swiss-German Sign Language", ["sgh"] = "Shughni", ["sgi"] = "Suga", ["sgk"] = "Sangkong", ["sgm"] = "Singa", ["sgp"] = "Singpho", ["sgr"] = "Sangisari", ["sgs"] = "Samogitian", ["sgt"] = "Brokpake", ["sgu"] = "Salas", ["sgw"] = "Sebat Bet Gurage", ["sgx"] = "Sierra Leone Sign Language", ["sgy"] = "Sanglechi", ["sgz"] = "Sursurunga", ["sh"] = "Serbo-Croatian", ["sha"] = "Shall-Zwall", ["shb"] = "Ninam", ["shc"] = "Sonde", ["shd"] = "Kundal Shahi", ["she"] = "Sheko", ["shg"] = "Shua", ["shh"] = "Shoshone", ["shi"] = "Tashelhit", ["shj"] = "Shatt", ["shk"] = "Shilluk", ["shl"] = "Shendu", ["shm"] = "Shahrudi", ["shn"] = "Shan", ["sho"] = "Shanga", ["shp"] = "Shipibo-Conibo", ["shq"] = "Sala", ["shr"] = "Shi", ["shs"] = "Shuswap", ["sht"] = "Shasta", ["shu"] = "Chadian Arabic", ["shv"] = "Shehri", ["shw"] = "Shwai", ["shx"] = "She", ["shy"] = "Tachawit", ["shz"] = "Syenara Senoufo", ["si"] = "Sinhalese", ["sia"] = "Akkala Sami", ["sib"] = "Sebop", ["sid"] = "Sidamo", ["sie"] = "Simaa", ["sif"] = "Siamou", ["sig"] = "Paasaal", ["sih"] = "Zire", ["sii"] = "Shom Peng", ["sij"] = "Numbami", ["sik"] = "Sikiana", ["sil"] = "Tumulung Sisaala", ["sim"] = "Seim", ["sio-pro"] = "Proto-Siouan", ["sip"] = "Sikkimese", ["siq"] = "Sonia", ["sir"] = "Siri", ["sis"] = "Siuslaw", ["sit-bok"] = "Bokar", ["sit-cha"] = "Chairel", ["sit-gkh"] = "Gokhy", ["sit-hrs-pro"] = "Proto-Hrusish", ["sit-jap"] = "Japhug", ["sit-kha-pro"] = "Proto-Kham", ["sit-liz"] = "Lizu", ["sit-luu-pro"] = "Proto-Luish", ["sit-mor"] = "Moran", ["sit-prn"] = "Puiron", ["sit-pro"] = "Proto-Sino-Tibetan", ["sit-sit"] = "Situ", ["sit-tan-pro"] = "Proto-Tani", ["sit-tgm"] = "Tangam", ["sit-tos"] = "Tosu", ["sit-tsh"] = "Tshobdun", ["sit-zbu"] = "Zbu", ["siu"] = "Sinagen", ["siv"] = "Sumariup", ["siw"] = "Siwai", ["six"] = "Sumau", ["siy"] = "Sivandi", ["siz"] = "Siwi", ["sja"] = "Epena", ["sjb"] = "Sajau Basap", ["sjd"] = "Kildin Sami", ["sje"] = "Pite Sami", ["sjg"] = "Assangori", ["sjk"] = "Kemi Sami", ["sjl"] = "Miji", ["sjm"] = "Mapun", ["sjn"] = "Sindarin", ["sjo"] = "Xibe", ["sjp"] = "Surjapuri", ["sjr"] = "Siar-Lak", ["sjs"] = "Senhaja De Srair", ["sjt"] = "Ter Sami", ["sju"] = "Ume Sami", ["sjw"] = "Shawnee", ["sk"] = "Slovak", ["ska"] = "Skagit", ["skb"] = "Saek", ["skc"] = "Ma Manda", ["skd"] = "Southern Sierra Miwok", ["ske"] = "Ske", ["skf"] = "Sakirabiá", ["skh"] = "Sikule", ["ski"] = "Sika", ["skj"] = "Seke", ["skk"] = "Sok", ["skm"] = "Sakam", ["skn"] = "Kolibugan Subanon", ["sko"] = "Seko Tengah", ["skp"] = "Sekapan", ["skq"] = "Sininkere", ["skr"] = "Saraiki", ["sks"] = "Maia", ["skt"] = "Sakata", ["sku"] = "Sakao", ["skv"] = "Skou", ["skw"] = "Skepi Creole Dutch", ["skx"] = "Seko Padang", ["sky"] = "Sikaiana", ["skz"] = "Sekar", ["sl"] = "Slovene", ["sla-pro"] = "Proto-Slavic", ["slc"] = "Saliba (Colombia)", ["sld"] = "Sissala", ["sle"] = "Sholaga", ["slf"] = "Swiss-Italian Sign Language", ["slg"] = "Selungai Murut", ["slh"] = "Southern Puget Sound Salish", ["slj"] = "Salumá", ["sll"] = "Salt-Yui", ["slm"] = "Pangutaran Sama", ["sln"] = "Salinan", ["slp"] = "Lamaholot", ["slq"] = "Salchuq", ["slr"] = "Salar", ["sls"] = "Singapore Sign Language", ["slt"] = "Sila", ["slu"] = "Selaru", ["slw"] = "Sialum", ["slx"] = "Salampasu", ["sly"] = "Selayar", ["slz"] = "Ma'ya", ["sm"] = "Samoan", ["sma"] = "Southern Sami", ["smb"] = "Simbari", ["smc"] = "Som", ["smd"] = "Sama", ["smf"] = "Auwe", ["smg"] = "Simbali", ["smh"] = "Samei", ["smi-pro"] = "Proto-Samic", ["smj"] = "Lule Sami", ["smk"] = "Bolinao", ["sml"] = "Central Sama", ["smm"] = "Musasa", ["smn"] = "Inari Sami", ["smp"] = "Samaritan Hebrew", ["smq"] = "Samo", ["smr"] = "Simeulue", ["sms"] = "Skolt Sami", ["smt"] = "Simte", ["smu"] = "Somray", ["smv"] = "Samvedi", ["smw"] = "Sumbawa", ["smx"] = "Samba", ["smy"] = "Semnani", ["smz"] = "Simeku", ["sn"] = "Shona", ["snb"] = "Sebuyau", ["snc"] = "Sinaugoro", ["sne"] = "Bau Bidayuh", ["snf"] = "Noon", ["sng"] = "Sanga (Congo)", ["sni"] = "Sensi", ["snj"] = "Riverain Sango", ["snk"] = "Soninke", ["snl"] = "Sangil", ["snm"] = "Southern Ma'di", ["snn"] = "Siona", ["sno"] = "Snohomish", ["snp"] = "Siane", ["snq"] = "Sangu (Gabon)", ["snr"] = "Sihan", ["sns"] = "Nahavaq", ["snu"] = "Senggi", ["snv"] = "Sa'ban", ["snw"] = "Selee", ["snx"] = "Sam", ["sny"] = "Saniyo-Hiyewe", ["snz"] = "Kou", ["so"] = "Somali", ["soa"] = "Thai Song", ["sob"] = "Sobei", ["soc"] = "Soko", ["sod"] = "Songoora", ["soe"] = "Songomeno", ["sog"] = "Sogdian", ["soh"] = "Aka (Sudan)", ["soi"] = "Sonha", ["sok"] = "Sokoro", ["sol"] = "Solos", ["son-pro"] = "Proto-Songhay", ["soo"] = "Nsong", ["sop"] = "Songe", ["soq"] = "Kanasi", ["sor"] = "Somrai", ["sos"] = "Seenku", ["sou"] = "Southern Thai", ["sov"] = "Sonsorolese", ["sow"] = "Sowanda", ["sox"] = "Swo", ["soy"] = "Miyobe", ["soz"] = "Temi", ["spb"] = "Sepa (Indonesia)", ["spc"] = "Sapé", ["spd"] = "Saep", ["spe"] = "Sepa (New Guinea)", ["spg"] = "Sian", ["spi"] = "Saponi", ["spk"] = "Sengo", ["spl"] = "Selepet", ["spm"] = "Sepen", ["spn"] = "Sanapaná", ["spo"] = "Spokane", ["spp"] = "Supyire", ["spr"] = "Saparua", ["sps"] = "Saposa", ["spt"] = "Spiti Bhoti", ["spu"] = "Sapuan", ["spv"] = "Sambalpuri", ["spx"] = "South Picene", ["spy"] = "Sabaot", ["sq"] = "Albanian", ["sqa"] = "Shama-Sambuga", ["sqh"] = "Shau", ["sqj-pro"] = "Proto-Albanian", ["sqk"] = "Albanian Sign Language", ["sqm"] = "Suma", ["sqn"] = "Susquehannock", ["sqo"] = "Sorkhei", ["sqq"] = "Sou", ["sqr"] = "Siculo-Arabic", ["sqs"] = "Sri Lankan Sign Language", ["sqt"] = "Soqotri", ["squ"] = "Squamish", ["sra"] = "Saruga", ["srb"] = "Sora", ["sre"] = "Sara", ["srf"] = "Nafi", ["srg"] = "Sulod", ["srh"] = "Sarikoli", ["sri"] = "Siriano", ["srk"] = "Serudung Murut", ["srl"] = "Isirawa", ["srm"] = "Saramaccan", ["srn"] = "Sranan Tongo", ["srq"] = "Sirionó", ["srr"] = "Serer", ["srs"] = "Sarcee", ["srt"] = "Sauri", ["sru"] = "Suruí", ["srv"] = "Waray Sorsogon", ["srw"] = "Serua", ["srx"] = "Sirmauri", ["sry"] = "Sera", ["srz"] = "Shahmirzadi", ["ss"] = "Swazi", ["ssa-klk-pro"] = "Proto-Kuliak", ["ssa-kom-pro"] = "Proto-Koman", ["ssa-pro"] = "Proto-Nilo-Saharan", ["ssb"] = "Southern Sama", ["ssc"] = "Suba-Simbiti", ["ssd"] = "Siroi", ["sse"] = "Balangingi", ["ssf"] = "Thao", ["ssg"] = "Seimat", ["ssh"] = "Shihhi Arabic", ["ssi"] = "Sansi", ["ssj"] = "Sausi", ["ssk"] = "Sunam", ["ssl"] = "Western Sisaala", ["ssm"] = "Semnam", ["sso"] = "Sissano", ["ssp"] = "Spanish Sign Language", ["ssq"] = "So'a", ["ssr"] = "Swiss-French Sign Language", ["sss"] = "Sô", ["sst"] = "Sinasina", ["ssu"] = "Susuami", ["ssv"] = "Shark Bay", ["ssx"] = "Samberigi", ["ssy"] = "Saho", ["ssz"] = "Sengseng", ["st"] = "Sotho", ["stb"] = "Northern Subanen", ["std"] = "Sentinelese", ["ste"] = "Liana-Seti", ["stf"] = "Seta", ["stg"] = "Trieng", ["sth"] = "Shelta", ["sti"] = "Bulo Stieng", ["stj"] = "Matya Samo", ["stk"] = "Arammba", ["stm"] = "Setaman", ["stn"] = "Owa", ["sto"] = "Stoney", ["stp"] = "Southeastern Tepehuan", ["stq"] = "Saterland Frisian", ["str"] = "Saanich", ["sts"] = "Shumashti", ["stt"] = "Budeh Stieng", ["stu"] = "Samtao", ["stv"] = "Silt'e", ["stw"] = "Satawalese", ["sty"] = "Siberian Tatar", ["su"] = "Sundanese", ["sua"] = "Sulka", ["sub"] = "Suku", ["suc"] = "Western Subanon", ["sue"] = "Suena", ["sug"] = "Suganga", ["sui"] = "Suki", ["suk"] = "Sukuma", ["suq"] = "Suri", ["sur"] = "Mwaghavul", ["sus"] = "Susu", ["sut"] = "Subtiaba", ["suv"] = "Sulung", ["suw"] = "Sumbwa", ["sux"] = "Sumerian", ["suy"] = "Suyá", ["suz"] = "Sunwar", ["sv"] = "Swedish", ["sva"] = "Svan", ["svb"] = "Ulau-Suain", ["svc"] = "Vincentian Creole English", ["sve"] = "Serili", ["svk"] = "Slovakian Sign Language", ["svm"] = "Slavomolisano", ["svs"] = "Savosavo", ["svx"] = "Skalvian", ["sw"] = "Swahili", ["swb"] = "Maore Comorian", ["swf"] = "Sere", ["swg"] = "Swabian", ["swi"] = "Sui", ["swj"] = "Sira", ["swl"] = "Swedish Sign Language", ["swm"] = "Samosa", ["swn"] = "Sokna", ["swo"] = "Shanenawa", ["swp"] = "Suau", ["swq"] = "Sharwa", ["swr"] = "Saweru", ["sws"] = "Seluwasan", ["swt"] = "Sawila", ["swu"] = "Suwawa", ["sww"] = "Sowa", ["swx"] = "Suruahá", ["swy"] = "Sarua", ["sxb"] = "Suba", ["sxc"] = "Sicanian", ["sxe"] = "Sighu", ["sxg"] = "Shixing", ["sxk"] = "Southern Kalapuya", ["sxl"] = "Selonian", ["sxm"] = "Samre", ["sxn"] = "Sangir", ["sxo"] = "Sorothaptic", ["sxr"] = "Saaroa", ["sxs"] = "Sasaru", ["sxw"] = "Saxwe Gbe", ["sya"] = "Siang", ["syb"] = "Central Subanen", ["syc"] = "Classical Syriac", ["syd-fne"] = "Forest Nenets", ["syd-pro"] = "Proto-Samoyedic", ["syi"] = "Seki", ["syk"] = "Sukur", ["syl"] = "Sylheti", ["sym"] = "Maya Samo", ["syn"] = "Senaya", ["syo"] = "Suoy", ["sys"] = "Sinyar", ["syw"] = "Kagate", ["syx"] = "Osamayi", ["syy"] = "Al-Sayyid Bedouin Sign Language", ["sza"] = "Semelai", ["szb"] = "Ngalum", ["szc"] = "Semaq Beri", ["szd"] = "Seru", ["sze"] = "Seze", ["szg"] = "Sengele", ["szl"] = "Silesian", ["szn"] = "Sula", ["szp"] = "Suabo", ["szv"] = "Isubu", ["szw"] = "Sawai", ["szy"] = "Sakizaya", ["ta"] = "Tamil", ["taa"] = "Lower Tanana", ["tab"] = "Tabasaran", ["tac"] = "Lowland Tarahumara", ["tad"] = "Tause", ["tae"] = "Tariana", ["taf"] = "Tapirapé", ["tag"] = "Tagoi", ["tai-pro"] = "Proto-Tai", ["tai-swe-pro"] = "Proto-Southwestern Tai", ["taj"] = "Eastern Tamang", ["tak"] = "Tala", ["tal"] = "Tal", ["tan"] = "Tangale", ["tao"] = "Yami", ["tap"] = "Taabwa", ["tar"] = "Central Tarahumara", ["tas"] = "Tây Bồi", ["tau"] = "Upper Tanana", ["tav"] = "Tatuyo", ["taw"] = "Tai", ["tax"] = "Tamki", ["tay"] = "Atayal", ["taz"] = "Tocho", ["tba"] = "Aikanã", ["tbb"] = "Tapeba", ["tbc"] = "Takia", ["tbd"] = "Kaki Ae", ["tbe"] = "Tanimbili", ["tbf"] = "Mandara", ["tbg"] = "North Tairora", ["tbh"] = "Thurawal", ["tbi"] = "Gaam", ["tbj"] = "Tiang", ["tbk"] = "Calamian Tagbanwa", ["tbl"] = "Tboli", ["tbm"] = "Tagbu", ["tbn"] = "Barro Negro Tunebo", ["tbo"] = "Tawala", ["tbp"] = "Taworta", ["tbq-bdg-pro"] = "Proto-Bodo-Garo", ["tbq-kuk-pro"] = "Proto-Kuki-Chin", ["tbq-lal-pro"] = "Proto-Lalo", ["tbq-laz"] = "Laze", ["tbq-lob-pro"] = "Proto-Lolo-Burmese", ["tbq-lol-pro"] = "Proto-Loloish", ["tbq-ngo"] = "Ngochang", ["tbq-plg"] = "Pai-lang", ["tbr"] = "Tumtum", ["tbs"] = "Tanguat", ["tbt"] = "Kitembo", ["tbu"] = "Tubar", ["tbv"] = "Tobo", ["tbw"] = "Tagbanwa", ["tbx"] = "Kapin", ["tby"] = "Tabaru", ["tbz"] = "Ditammari", ["tca"] = "Ticuna", ["tcb"] = "Tanacross", ["tcc"] = "Datooga", ["tcd"] = "Tafi", ["tce"] = "Southern Tutchone", ["tcf"] = "Malinaltepec Tlapanec", ["tcg"] = "Tamagario", ["tch"] = "Turks and Caicos Creole English", ["tci"] = "Wára", ["tck"] = "Tchitchege", ["tcl"] = "Taman (Myanmar)", ["tcm"] = "Tanahmerah", ["tco"] = "Taungyo", ["tcp"] = "Tawr Chin", ["tcq"] = "Kaiy", ["tcs"] = "Torres Strait Creole", ["tct"] = "T'en", ["tcu"] = "Southeastern Tarahumara", ["tcw"] = "Tecpatlán Totonac", ["tcx"] = "Toda", ["tcy"] = "Tulu", ["tcz"] = "Thado Chin", ["tda"] = "Tagdal", ["tdb"] = "Panchpargania", ["tdc"] = "Emberá-Tadó", ["tdd"] = "Tai Nüa", ["tde"] = "Tiranige Diga Dogon", ["tdf"] = "Talieng", ["tdg"] = "Western Tamang", ["tdh"] = "Thulung", ["tdi"] = "Tomadino", ["tdj"] = "Tajio", ["tdk"] = "Tambas", ["tdl"] = "Sur", ["tdm"] = "Taruma", ["tdn"] = "Tondano", ["tdo"] = "Teme", ["tdq"] = "Tita", ["tdr"] = "Todrah", ["tds"] = "Doutai", ["tdt"] = "Tetun Dili", ["tdu"] = "Tempasuk Dusun", ["tdv"] = "Toro", ["tdy"] = "Tadyawan", ["te"] = "Telugu", ["tea"] = "Temiar", ["teb"] = "Tetete", ["tec"] = "Terik", ["ted"] = "Tepo Krumen", ["tee"] = "Huehuetla Tepehua", ["tef"] = "Teressa", ["teg"] = "Teke-Tege", ["teh"] = "Tehuelche", ["tei"] = "Torricelli", ["tek"] = "Ibali Teke", ["tem"] = "Temne", ["ten"] = "Tama (Colombia)", ["teo"] = "Ateso", ["tep"] = "Tepecano", ["teq"] = "Temein", ["ter"] = "Tereno", ["tes"] = "Tengger", ["tet"] = "Tetum", ["teu"] = "Soo", ["tev"] = "Teor", ["tew"] = "Tewa", ["tex"] = "Tennet", ["tey"] = "Tulishi", ["tez"] = "Tetserret", ["tfi"] = "Tofin Gbe", ["tfn"] = "Dena'ina", ["tfo"] = "Tefaro", ["tfr"] = "Teribe", ["tft"] = "Ternate", ["tg"] = "Tajik", ["tga"] = "Sagalla", ["tgb"] = "Tobilung", ["tgc"] = "Tigak", ["tgd"] = "Ciwogai", ["tge"] = "Eastern Gorkha Tamang", ["tgf"] = "Chali", ["tgh"] = "Tobagonian Creole English", ["tgi"] = "Lawunuia", ["tgn"] = "Tandaganon", ["tgo"] = "Sudest", ["tgp"] = "Tangoa", ["tgq"] = "Tring", ["tgr"] = "Tareng", ["tgs"] = "Nume", ["tgt"] = "Central Tagbanwa", ["tgu"] = "Tanggu", ["tgv"] = "Tingui-Boto", ["tgw"] = "Tagwana Senoufo", ["tgx"] = "Tagish", ["tgy"] = "Togoyo", ["th"] = "Thai", ["thc"] = "Tai Hang Tong", ["thd"] = "Kuuk Thaayorre", ["the"] = "Chitwania Tharu", ["thf"] = "Thangmi", ["thh"] = "Northern Tarahumara", ["thi"] = "Tai Long", ["thk"] = "Tharaka", ["thl"] = "Dangaura Tharu", ["thm"] = "Thavung", ["thn"] = "Thachanadan", ["thp"] = "Thompson", ["thq"] = "Kochila Tharu", ["thr"] = "Rana Tharu", ["ths"] = "Thakali", ["tht"] = "Tahltan", ["thu"] = "Thuri", ["thy"] = "Tha", ["ti"] = "Tigrinya", ["tic"] = "Tira", ["tif"] = "Tifal", ["tig"] = "Tigre", ["tih"] = "Timugon Murut", ["tii"] = "Tiene", ["tij"] = "Tilung", ["tik"] = "Tikar", ["til"] = "Tillamook", ["tim"] = "Timbe", ["tin"] = "Tindi", ["tio"] = "Teop", ["tip"] = "Trimuris", ["tiq"] = "Tiéfo", ["tis"] = "Masadiit Itneg", ["tit"] = "Tinigua", ["tiu"] = "Adasen", ["tiv"] = "Tiv", ["tiw"] = "Tiwi", ["tix"] = "Southern Tiwa", ["tiy"] = "Tiruray", ["tiz"] = "Tai Hongjin", ["tja"] = "Tajuasohn", ["tjg"] = "Tunjung", ["tji"] = "Northern Tujia", ["tjl"] = "Tai Laing", ["tjm"] = "Timucua", ["tjn"] = "Tonjon", ["tjs"] = "Southern Tujia", ["tju"] = "Tjurruru", ["tjw"] = "Chaap Wuurong", ["tk"] = "Turkmen", ["tka"] = "Truká", ["tkb"] = "Buksa", ["tkd"] = "Tukudede", ["tke"] = "Takwane", ["tkf"] = "Tukumanféd", ["tkl"] = "Tokelauan", ["tkm"] = "Takelma", ["tkn"] = "Toku-No-Shima", ["tkp"] = "Tikopia", ["tkq"] = "Tee", ["tkr"] = "Tsakhur", ["tks"] = "Ramandi", ["tkt"] = "Kathoriya Tharu", ["tku"] = "Upper Necaxa Totonac", ["tkv"] = "Mur Pano", ["tkw"] = "Teanu", ["tkx"] = "Tangko", ["tkz"] = "Takua", ["tl"] = "Tagalog", ["tla"] = "Southwestern Tepehuan", ["tlb"] = "Tobelo", ["tlc"] = "Misantla Totonac", ["tld"] = "Talaud", ["tlf"] = "Telefol", ["tlg"] = "Tofanma", ["tlh"] = "Klingon", ["tli"] = "Tlingit", ["tlj"] = "Talinga-Bwisi", ["tlk"] = "Taloki", ["tll"] = "Tetela", ["tlm"] = "Tolomako", ["tln"] = "Talondo'", ["tlo"] = "Talodi", ["tlp"] = "Filomena Mata-Coahuitlán Totonac", ["tlq"] = "Tai Loi", ["tlr"] = "Talise", ["tls"] = "Tambotalo", ["tlt"] = "Teluti", ["tlu"] = "Tulehu", ["tlv"] = "Taliabu", ["tlx"] = "Khehek", ["tly"] = "Talysh", ["tma"] = "Tama (Chad)", ["tmb"] = "Avava", ["tmc"] = "Tumak", ["tmd"] = "Haruai", ["tme"] = "Tremembé", ["tmf"] = "Toba-Maskoy", ["tmg"] = "Ternateño", ["tmh"] = "Tuareg", ["tmi"] = "Tutuba", ["tmj"] = "Samarokena", ["tmk"] = "Northwestern Tamang", ["tml"] = "Tamnim Citak", ["tmm"] = "Tai Thanh", ["tmn"] = "Taman (Indonesia)", ["tmo"] = "Temoq", ["tmq"] = "Tumleo", ["tms"] = "Tima", ["tmt"] = "Tasmate", ["tmu"] = "Iau", ["tmv"] = "Motembo", ["tmy"] = "Tami", ["tmz"] = "Tamanaku", ["tn"] = "Tswana", ["tna"] = "Tacana", ["tnb"] = "Western Tunebo", ["tnc"] = "Tanimuca-Retuarã", ["tnd"] = "Angosturas Tunebo", ["tne"] = "Tinoc Kallahan", ["tng"] = "Tobanga", ["tnh"] = "Maiani", ["tni"] = "Tandia", ["tnk"] = "Kwamera", ["tnl"] = "Lenakel", ["tnm"] = "Tabla", ["tnn"] = "North Tanna", ["tno"] = "Toromono", ["tnp"] = "Whitesands", ["tnq"] = "Taíno", ["tnr"] = "Bedik", ["tns"] = "Tenis", ["tnt"] = "Tontemboan", ["tnu"] = "Tay Khang", ["tnv"] = "Tangchangya", ["tnw"] = "Tonsawang", ["tnx"] = "Tanema", ["tny"] = "Tongwe", ["tnz"] = "Ten'edn", ["to"] = "Tongan", ["tob"] = "Toba", ["toc"] = "Coyutla Totonac", ["tod"] = "Toma", ["tof"] = "Gizrra", ["tog"] = "Tonga (Malawi)", ["toh"] = "Tonga (Mozambique)", ["toi"] = "Tonga (Zambia)", ["toj"] = "Tojolabal", ["tok"] = "Toki Pona", ["tol"] = "Tolowa", ["tom"] = "Tombulu", ["too"] = "Xicotepec de Juárez Totonac", ["top"] = "Papantla Totonac", ["toq"] = "Toposa", ["tor"] = "Togbo-Vara Banda", ["tos"] = "Highland Totonac", ["tou"] = "Tho", ["tov"] = "Upper Taromi", ["tow"] = "Jemez", ["tox"] = "Tobian", ["toy"] = "Topoiyo", ["toz"] = "To", ["tpa"] = "Taupota", ["tpc"] = "Azoyú Me'phaa", ["tpe"] = "Tippera", ["tpf"] = "Tarpia", ["tpg"] = "Kula", ["tpi"] = "Tok Pisin", ["tpj"] = "Tapieté", ["tpk"] = "Tupinikin", ["tpl"] = "Tlacoapa Me'phaa", ["tpm"] = "Tampulma", ["tpn"] = "Tupinambá", ["tpo"] = "Tai Pao", ["tpp"] = "Pisaflores Tepehua", ["tpq"] = "Tukpa", ["tpr"] = "Tuparí", ["tpt"] = "Tlachichilco Tepehua", ["tpu"] = "Tampuan", ["tpv"] = "Tanapag", ["tpw"] = "Old Tupi", ["tpx"] = "Acatepec Me'phaa", ["tpy"] = "Trumai", ["tpz"] = "Tinputz", ["tqb"] = "Tembé", ["tql"] = "Lehali", ["tqm"] = "Turumsa", ["tqn"] = "Tenino", ["tqo"] = "Toaripi", ["tqp"] = "Tomoip", ["tqq"] = "Tunni", ["tqr"] = "Torona", ["tqt"] = "Western Totonac", ["tqu"] = "Touo", ["tqw"] = "Tonkawa", ["tr"] = "Turkish", ["tra"] = "Tirahi", ["trb"] = "Terebu", ["trc"] = "Copala Triqui", ["trd"] = "Turi", ["tre"] = "East Tarangan", ["trf"] = "Trinidadian Creole English", ["trg"] = "Lishán Didán", ["trh"] = "Turaka", ["tri"] = "Trió", ["trj"] = "Toram", ["trk-dkh"] = "Dukhan", ["trk-oat"] = "Old Anatolian Turkish", ["trk-pro"] = "Proto-Turkic", ["trl"] = "Traveller Scottish", ["trm"] = "Tregami", ["trn"] = "Trinitario", ["tro"] = "Tarao", ["trp"] = "Kokborok", ["trq"] = "San Martín Itunyoso Triqui", ["trr"] = "Taushiro", ["trs"] = "Chicahuaxtla Triqui", ["trt"] = "Tunggare", ["tru"] = "Turoyo", ["trv"] = "Taroko", ["trw"] = "Torwali", ["trx"] = "Tringgus", ["try"] = "Turung", ["trz"] = "Torá", ["ts"] = "Tsonga", ["tsa"] = "Tsaangi", ["tsb"] = "Tsamai", ["tsc"] = "Tswa", ["tsd"] = "Tsakonian", ["tse"] = "Tunisian Sign Language", ["tsf"] = "Southwestern Tamang", ["tsg"] = "Tausug", ["tsh"] = "Tsuvan", ["tsi"] = "Tsimshian", ["tsj"] = "Tshangla", ["tsl"] = "Ts'ün-Lao", ["tsm"] = "Turkish Sign Language", ["tsp"] = "Northern Toussian", ["tsq"] = "Thai Sign Language", ["tsr"] = "Akei", ["tss"] = "Taiwan Sign Language", ["tsu"] = "Tsou", ["tsv"] = "Tsogo", ["tsw"] = "Tsishingini", ["tsx"] = "Mubami", ["tsy"] = "Tebul Sign Language", ["tt"] = "Tatar", ["tta"] = "Tutelo", ["ttb"] = "Gaa", ["ttc"] = "Tektiteko", ["ttd"] = "Tauade", ["tte"] = "Bwanabwana", ["ttf"] = "Tuotomb", ["ttg"] = "Tutong", ["tth"] = "Upper Ta'oih", ["tti"] = "Tobati", ["ttj"] = "Tooro", ["ttk"] = "Totoro", ["ttl"] = "Totela", ["ttm"] = "Northern Tutchone", ["ttn"] = "Towei", ["tto"] = "Lower Ta'oih", ["ttp"] = "Tombelala", ["ttr"] = "Tera", ["tts"] = "Isan", ["ttt"] = "Tat", ["ttu"] = "Torau", ["ttv"] = "Titan", ["ttw"] = "Long Wat", ["tty"] = "Sikaritai", ["ttz"] = "Tsum", ["tua"] = "Wiarumus", ["tub"] = "Tübatulabal", ["tuc"] = "Mutu", ["tud"] = "Tuxá", ["tue"] = "Tuyuca", ["tuf"] = "Central Tunebo", ["tug"] = "Tunia", ["tuh"] = "Taulil", ["tui"] = "Tupuri", ["tuj"] = "Tugutil", ["tul"] = "Tula", ["tum"] = "Tumbuka", ["tun"] = "Tunica", ["tuo"] = "Tucano", ["tup-gua-pro"] = "Proto-Tupi-Guarani", ["tup-kab"] = "Kabishiana", ["tup-pro"] = "Proto-Tupian", ["tuq"] = "Tedaga", ["tus"] = "Tuscarora", ["tuu"] = "Tututni", ["tuv"] = "Turkana", ["tuw-kkl"] = "Kyakala", ["tuw-pro"] = "Proto-Tungusic", ["tuw-sol"] = "Solon", ["tux"] = "Tuxináwa", ["tuy"] = "Tugen", ["tuz"] = "Turka", ["tva"] = "Vaghua", ["tvd"] = "Tsuvadi", ["tve"] = "Te'un", ["tvk"] = "Southeast Ambrym", ["tvl"] = "Tuvaluan", ["tvm"] = "Tela-Masbuar", ["tvn"] = "Tavoyan", ["tvo"] = "Tidore", ["tvs"] = "Taveta", ["tvt"] = "Tutsa Naga", ["tvu"] = "Tunen", ["tvw"] = "Sedoa", ["tvx"] = "Taivoan", ["tvy"] = "Timor Pidgin", ["twa"] = "Twana", ["twb"] = "Western Tawbuid", ["twc"] = "Teshenawa", ["twe"] = "Teiwa", ["twf"] = "Taos", ["twg"] = "Tereweng", ["twh"] = "Tai Dón", ["twm"] = "Tawang Monpa", ["twn"] = "Twendi", ["two"] = "Tswapong", ["twp"] = "Ere", ["twq"] = "Tasawaq", ["twr"] = "Southwestern Tarahumara", ["twt"] = "Turiwára", ["twu"] = "Termanu", ["tww"] = "Tuwari", ["twy"] = "Tawoyan", ["txa"] = "Tombonuo", ["txb"] = "Tocharian B", ["txc"] = "Tsetsaut", ["txe"] = "Totoli", ["txg"] = "Tangut", ["txh"] = "Thracian", ["txi"] = "Ikpeng", ["txj"] = "Tarjumo", ["txm"] = "Tomini", ["txn"] = "West Tarangan", ["txo"] = "Toto", ["txq"] = "Tii", ["txr"] = "Tartessian", ["txs"] = "Tonsea", ["txt"] = "Citak", ["txu"] = "Kayapó", ["txx"] = "Tatana", ["ty"] = "Tahitian", ["tya"] = "Tauya", ["tye"] = "Kyenga", ["tyh"] = "O'du", ["tyi"] = "Teke-Tsaayi", ["tyj"] = "Tai Do", ["tyl"] = "Thu Lao", ["tyn"] = "Kombai", ["typ"] = "Kuku-Thaypan", ["tyr"] = "Tai Daeng", ["tys"] = "Sapa", ["tyt"] = "Tày Tac", ["tyu"] = "Kua", ["tyv"] = "Tuvan", ["tyx"] = "Teke-Tyee", ["tyz"] = "Tày", ["tza"] = "Tanzanian Sign Language", ["tzh"] = "Tzeltal", ["tzj"] = "Tz'utujil", ["tzl"] = "Talossan", ["tzm"] = "Central Atlas Tamazight", ["tzn"] = "Tugun", ["tzo"] = "Tzotzil", ["tzx"] = "Tabriak", ["uam"] = "Uamué", ["uan"] = "Kuan", ["uar"] = "Tairuma", ["uba"] = "Ubang", ["ubi"] = "Ubi", ["ubl"] = "Buhi'non Bikol", ["ubr"] = "Ubir", ["ubu"] = "Umbu-Ungu", ["uby"] = "Ubykh", ["uda"] = "Uda", ["ude"] = "Udihe", ["udg"] = "Muduga", ["udi"] = "Udi", ["udj"] = "Ujir", ["udl"] = "Uldeme", ["udm"] = "Udmurt", ["udu"] = "Uduk", ["ues"] = "Kioko", ["ufi"] = "Ufim", ["ug"] = "Uyghur", ["uga"] = "Ugaritic", ["ugb"] = "Kuku-Ugbanh", ["uge"] = "Ughele", ["ugn"] = "Ugandan Sign Language", ["ugo"] = "Gong", ["ugy"] = "Uruguayan Sign Language", ["uha"] = "Uhami", ["uhn"] = "Damal", ["uis"] = "Uisai", ["uiv"] = "Iyive", ["uji"] = "Tanjijili", ["uk"] = "Ukrainian", ["uka"] = "Kaburi", ["ukg"] = "Ukuriguma", ["ukh"] = "Ukhwejo", ["ukk"] = "Muak Sa-aak", ["ukl"] = "Ukrainian Sign Language", ["ukp"] = "Ukpe-Bayobiri", ["ukq"] = "Ukwa", ["uks"] = "Kaapor Sign Language", ["uku"] = "Ukue", ["ukw"] = "Ukwuani-Aboh-Ndoni", ["uky"] = "Kuuk Yak", ["ula"] = "Fungwa", ["ulb"] = "Olukumi", ["ulc"] = "Ulch", ["ule"] = "Lule", ["ulf"] = "Afra", ["uli"] = "Ulithian", ["ulk"] = "Meriam", ["ull"] = "Ullatan", ["ulm"] = "Ulumanda'", ["uln"] = "Unserdeutsch", ["ulu"] = "Uma' Lung", ["ulw"] = "Ulwa", ["uma"] = "Umatilla", ["umb"] = "Umbundu", ["umc"] = "Marrucinian", ["umd"] = "Umbindhamu", ["umg"] = "Umbuygamu", ["umi"] = "Ukit", ["umm"] = "Umon", ["umn"] = "Makyan Naga", ["umo"] = "Umotína", ["ump"] = "Umpila", ["umr"] = "Umbugarla", ["ums"] = "Pendau", ["umu"] = "Munsee", ["una"] = "North Watut", ["und"] = "Undetermined", ["und-isa"] = "Isaurian", ["und-kas"] = "Kassite", ["und-mil"] = "Milang", ["und-mmd"] = "Mimi of Decorse", ["und-mmn"] = "Mimi of Nachtigal", ["und-phi"] = "Philistine", ["und-wji"] = "Western Jicaque", ["une"] = "Uneme", ["ung"] = "Ngarinyin", ["unk"] = "Enawené-Nawé", ["unm"] = "Unami", ["unn"] = "Kurnai", ["unr"] = "Mundari", ["unu"] = "Unubahe", ["unx"] = "Munda", ["unz"] = "Unde Kaili", ["uok"] = "Uokha", ["uon"] = "Kulon", ["upi"] = "Umeda", ["upv"] = "Uripiv-Wala-Rano-Atchin", ["ur"] = "Urdu", ["ura"] = "Urarina", ["urb"] = "Urubú-Kaapor", ["urc"] = "Urningangg", ["ure"] = "Uru", ["urf"] = "Uradhi", ["urg"] = "Urigina", ["urh"] = "Urhobo", ["uri"] = "Urim", ["urj-fin-pro"] = "Proto-Finnic", ["urj-koo"] = "Old Komi", ["urj-kuk"] = "Kukkuzi", ["urj-kya"] = "Komi-Yazva", ["urj-mdv-pro"] = "Proto-Mordvinic", ["urj-prm-pro"] = "Proto-Permic", ["urj-pro"] = "Proto-Uralic", ["urj-ugr-pro"] = "Proto-Ugric", ["urk"] = "Urak Lawoi'", ["url"] = "Urali", ["urm"] = "Urapmin", ["urn"] = "Uruangnirin", ["uro"] = "Ura (New Guinea)", ["urp"] = "Uru-Pa-In", ["urr"] = "Lehalurup", ["urt"] = "Urat", ["uru"] = "Urumi", ["urv"] = "Uruava", ["urw"] = "Sop", ["urx"] = "Urimo", ["ury"] = "Orya", ["urz"] = "Uru-Eu-Wau-Wau", ["usa"] = "Usarufa", ["ush"] = "Ushojo", ["usi"] = "Usui", ["usk"] = "Usaghade", ["usp"] = "Uspanteco", ["uss"] = "Saare", ["usu"] = "Uya", ["uta"] = "Otank", ["ute"] = "Ute", ["uth"] = "Hun", ["utp"] = "Aba", ["utr"] = "Etulo", ["utu"] = "Utu", ["uum"] = "Urum", ["uun"] = "Kulon-Pazeh", ["uur"] = "Ura (Vanuatu)", ["uuu"] = "U", ["uve"] = "West Uvean", ["uvh"] = "Uri", ["uvl"] = "Lote", ["uwa"] = "Kuku-Uwanh", ["uya"] = "Doko-Uyanga", ["uz"] = "Uzbek", ["vaa"] = "Vaagri Booli", ["vae"] = "Vale", ["vag"] = "Vagla", ["vah"] = "Varhadi", ["vai"] = "Vai", ["vaj"] = "Sekele", ["val"] = "Vehes", ["vam"] = "Vanimo", ["van"] = "Valman", ["vao"] = "Vao", ["vap"] = "Vaiphei", ["var"] = "Huarijio", ["vas"] = "Vasavi", ["vau"] = "Vanuma", ["vav"] = "Varli", ["vay"] = "Vayu", ["vbb"] = "Southeast Babar", ["vbk"] = "Southwestern Bontoc", ["ve"] = "Venda", ["vec"] = "Venetian", ["ved"] = "Veddah", ["vem"] = "Vemgo-Mabas", ["veo"] = "Ventureño", ["vep"] = "Veps", ["ver"] = "Mom Jango", ["vgr"] = "Vaghri", ["vgt"] = "Flemish Sign Language", ["vi"] = "Vietnamese", ["vic"] = "Virgin Islands Creole", ["vid"] = "Vidunda", ["vif"] = "Vili", ["vig"] = "Viemo", ["vil"] = "Vilela", ["vis"] = "Vishavan", ["vit"] = "Viti", ["viv"] = "Iduna", ["vka"] = "Kariyarra", ["vki"] = "Ija-Zuba", ["vkj"] = "Kujarge", ["vkk"] = "Kaur", ["vkl"] = "Kulisusu", ["vkm"] = "Kamakan", ["vko"] = "Kodeoha", ["vkp"] = "Korlai Creole Portuguese", ["vkt"] = "Tenggarong Kutai Malay", ["vku"] = "Kurrama", ["vlp"] = "Valpei", ["vls"] = "West Flemish", ["vma"] = "Martuthunira", ["vmb"] = "Mbabaram", ["vmc"] = "Juxtlahuaca Mixtec", ["vmd"] = "Mudu Koraga", ["vme"] = "East Masela", ["vmf"] = "East Franconian", ["vmg"] = "Minigir", ["vmh"] = "Maraghei", ["vmi"] = "Miwa", ["vmj"] = "Ixtayutla Mixtec", ["vmk"] = "Makhuwa-Shirima", ["vml"] = "Malgana", ["vmm"] = "Mitlatongo Mixtec", ["vmp"] = "Soyaltepec Mazatec", ["vmq"] = "Soyaltepec Mixtec", ["vmr"] = "Marenje", ["vmu"] = "Muluridyi", ["vmv"] = "Valley Maidu", ["vmw"] = "Makhuwa", ["vmx"] = "Tamazola Mixtec", ["vmy"] = "Ayautla Mazatec", ["vmz"] = "Mazatlán Mazatec", ["vnk"] = "Lovono", ["vnm"] = "Neve'ei", ["vnp"] = "Vunapu", ["vo"] = "Volapük", ["vor"] = "Voro", ["vot"] = "Votic", ["vra"] = "Vera'a", ["vro"] = "Võro", ["vrs"] = "Varisi", ["vrt"] = "Banam Bay", ["vsi"] = "Moldova Sign Language", ["vsl"] = "Venezuelan Sign Language", ["vsv"] = "Valencian Sign Language", ["vto"] = "Vitou", ["vum"] = "Vumbu", ["vun"] = "Vunjo", ["vut"] = "Vute", ["vwa"] = "Awa (China)", ["wa"] = "Walloon", ["waa"] = "Walla Walla", ["wab"] = "Wab", ["wac"] = "Wasco-Wishram", ["wad"] = "Wandamen", ["waf"] = "Wakoná", ["wag"] = "Wa'ema", ["wah"] = "Watubela", ["waj"] = "Waffa", ["wal"] = "Wolaytta", ["wam"] = "Massachusett", ["wan"] = "Wan", ["wao"] = "Wappo", ["wap"] = "Wapishana", ["waq"] = "Wageman", ["war"] = "Waray-Waray", ["was"] = "Washo", ["wat"] = "Kaninuwa", ["wau"] = "Wauja", ["wav"] = "Waka", ["waw"] = "Waiwai", ["wax"] = "Watam", ["way"] = "Wayana", ["waz"] = "Wampur", ["wba"] = "Warao", ["wbb"] = "Wabo", ["wbe"] = "Waritai", ["wbf"] = "Wara", ["wbh"] = "Wanda", ["wbi"] = "Wanji", ["wbj"] = "Alagwa", ["wbk"] = "Waigali", ["wbl"] = "Wakhi", ["wbm"] = "Wa", ["wbp"] = "Warlpiri", ["wbq"] = "Waddar", ["wbr"] = "Wagdi", ["wbt"] = "Wanman", ["wbv"] = "Wajarri", ["wbw"] = "Woi", ["wca"] = "Yanomámi", ["wci"] = "Waci Gbe", ["wdd"] = "Wandji", ["wdg"] = "Wadaginam", ["wdj"] = "Wadjiginy", ["wdt"] = "Wendat", ["wdu"] = "Wadjigu", ["wdy"] = "Wadjabangayi", ["wea"] = "Wewaw", ["wec"] = "Wè Western", ["wed"] = "Wedau", ["weh"] = "Weh", ["wei"] = "Kiunum", ["wem"] = "Weme Gbe", ["weo"] = "Wemale", ["wer"] = "Weri", ["wes"] = "Cameroon Pidgin", ["wet"] = "Perai", ["weu"] = "Welaung", ["wew"] = "Weyewa", ["wfg"] = "Yafi", ["wga"] = "Wagaya", ["wgb"] = "Wagawaga", ["wgg"] = "Wangganguru", ["wgi"] = "Wahgi", ["wgo"] = "Waigeo", ["wgu"] = "Wirangu", ["wgy"] = "Warrgamay", ["wha"] = "Manusela", ["whg"] = "North Wahgi", ["whk"] = "Wahau Kenyah", ["whu"] = "Wahau Kayan", ["wib"] = "Southern Toussian", ["wic"] = "Wichita", ["wie"] = "Wik-Epa", ["wif"] = "Wik-Keyangan", ["wig"] = "Wik-Ngathana", ["wih"] = "Wik-Me'anha", ["wii"] = "Minidien", ["wij"] = "Wik-Iiyanh", ["wik"] = "Wikalkan", ["wil"] = "Wilawila", ["wim"] = "Wik-Mungkan", ["win"] = "Winnebago", ["wir"] = "Wiraféd", ["wiu"] = "Wiru", ["wiv"] = "Muduapa", ["wiy"] = "Wiyot", ["wja"] = "Waja", ["wji"] = "Warji", ["wka"] = "Kw'adza", ["wkb"] = "Kumbaran", ["wkd"] = "Mo", ["wkl"] = "Kalanadi", ["wku"] = "Kunduvadi", ["wkw"] = "Wakawaka", ["wky"] = "Wangkayutyuru", ["wla"] = "Walio", ["wlc"] = "Mwali Comorian", ["wle"] = "Wolane", ["wlg"] = "Kunbarlang", ["wli"] = "Waioli", ["wlk"] = "Wailaki", ["wll"] = "Wali (Sudan)", ["wlm"] = "Middle Welsh", ["wlo"] = "Wolio", ["wlr"] = "Wailapa", ["wls"] = "Wallisian", ["wlu"] = "Wuliwuli", ["wlv"] = "Wichí Lhamtés Vejoz", ["wlw"] = "Walak", ["wlx"] = "Wali (Ghana)", ["wly"] = "Waling", ["wmb"] = "Wambaya", ["wmc"] = "Wamas", ["wmd"] = "Mamaindé", ["wme"] = "Wambule", ["wmh"] = "Waima'a", ["wmi"] = "Wamin", ["wmm"] = "Maiwa (Indonesia)", ["wmn"] = "Waamwang", ["wmo"] = "Wam", ["wms"] = "Wambon", ["wmt"] = "Walmajarri", ["wmw"] = "Mwani", ["wmx"] = "Womo", ["wnb"] = "Wanambre", ["wnc"] = "Wantoat", ["wnd"] = "Wandarang", ["wne"] = "Waneci", ["wng"] = "Wanggom", ["wni"] = "Ndzwani Comorian", ["wnk"] = "Wanukaka", ["wnm"] = "Wanggamala", ["wno"] = "Wano", ["wnp"] = "Wanap", ["wnu"] = "Usan", ["wnw"] = "Wintu", ["wny"] = "Wanyi", ["wo"] = "Wolof", ["woa"] = "Tyaraity", ["wob"] = "Wè Northern", ["woc"] = "Wogeo", ["wod"] = "Wolani", ["woe"] = "Woleaian", ["wog"] = "Wogamusin", ["woi"] = "Kamang", ["wok"] = "Longto", ["wom"] = "Perema", ["won"] = "Wongo", ["woo"] = "Manombai", ["wor"] = "Woria", ["wos"] = "Hanga Hundi", ["wow"] = "Wawonii", ["wpc"] = "Wirö", ["wra"] = "Warapu", ["wrb"] = "Warluwara", ["wrg"] = "Warungu", ["wrh"] = "Wiradhuri", ["wri"] = "Wariyangga", ["wrk"] = "Garawa", ["wrl"] = "Warlmanpa", ["wrm"] = "Warumungu", ["wrn"] = "Warnang", ["wro"] = "Worora", ["wrp"] = "Waropen", ["wrr"] = "Wardaman", ["wrs"] = "Waris", ["wru"] = "Waru", ["wrv"] = "Waruna", ["wrw"] = "Gugu Warra", ["wrx"] = "Wae Rana", ["wrz"] = "Warray", ["wsa"] = "Warembori", ["wsi"] = "Wusi", ["wsk"] = "Waskia", ["wsr"] = "Owenia", ["wss"] = "Wasa", ["wsu"] = "Wasu", ["wsv"] = "Wotapuri-Katarqalai", ["wtf"] = "Watiwa", ["wth"] = "Wathaurong", ["wti"] = "Berta", ["wtk"] = "Watakataui", ["wtm"] = "Mewati", ["wtw"] = "Wotu", ["wua"] = "Wikngenchera", ["wub"] = "Wunambal", ["wud"] = "Wudu", ["wuh"] = "Wutunhua", ["wul"] = "Silimo", ["wum"] = "Wumbvu", ["wun"] = "Bungu", ["wur"] = "Wurrugu", ["wut"] = "Wutung", ["wuu"] = "Wu", ["wuv"] = "Wuvulu-Aua", ["wux"] = "Wulna", ["wuy"] = "Wauyai", ["wwa"] = "Waama", ["wwo"] = "Dorig", ["wwr"] = "Warrwa", ["www"] = "Wawa", ["wxa"] = "Waxianghua", ["wxw"] = "Wardandi", ["wya"] = "Wyandot", ["wyb"] = "Ngiyambaa", ["wyi"] = "Woiwurrung", ["wym"] = "Vilamovian", ["wyr"] = "Wayoró", ["wyy"] = "Western Fijian", ["xaa"] = "Andalusian Arabic", ["xab"] = "Sambe", ["xac"] = "Kachari", ["xad"] = "Adai", ["xae"] = "Aequian", ["xag"] = "Aghwan", ["xai"] = "Kaimbé", ["xaj"] = "Ararandewára", ["xak"] = "Maku", ["xal"] = "Kalmyk", ["xam"] = "ǀXam", ["xan"] = "Xamtanga", ["xao"] = "Khao", ["xap"] = "Apalachee", ["xaq"] = "Aquitanian", ["xar"] = "Karami", ["xas"] = "Kamassian", ["xat"] = "Katawixi", ["xau"] = "Kauwera", ["xav"] = "Xavante", ["xaw"] = "Kawaiisu", ["xay"] = "Kayan Mahakam", ["xbb"] = "Lower Burdekin", ["xbc"] = "Bactrian", ["xbd"] = "Bindal", ["xbe"] = "Bigambal", ["xbg"] = "Bunganditj", ["xbi"] = "Kombio", ["xbj"] = "Birrpayi", ["xbm"] = "Middle Breton", ["xbn"] = "Kenaboi", ["xbo"] = "Bulgar", ["xbp"] = "Bibbulman", ["xbr"] = "Kambera", ["xbw"] = "Kambiwá", ["xby"] = "Butchulla", ["xcb"] = "Cumbric", ["xcc"] = "Camunic", ["xce"] = "Celtiberian", ["xch"] = "Chemakum", ["xcl"] = "Old Armenian", ["xcm"] = "Comecrudo", ["xcn"] = "Cotoname", ["xco"] = "Khwarezmian", ["xcr"] = "Carian", ["xct"] = "Classical Tibetan", ["xcu"] = "Curonian", ["xcv"] = "Chuvan", ["xcw"] = "Coahuilteco", ["xcy"] = "Cayuse", ["xda"] = "Darkinjung", ["xdc"] = "Dacian", ["xdk"] = "Dharug", ["xdm"] = "Edomite", ["xdy"] = "Malayic Dayak", ["xeb"] = "Eblaite", ["xed"] = "Hdi", ["xeg"] = "ǁXegwi", ["xel"] = "Kelo", ["xem"] = "Kembayan", ["xep"] = "Epi-Olmec", ["xer"] = "Xerénte", ["xes"] = "Kesawai", ["xet"] = "Xetá", ["xeu"] = "Keoru-Ahia", ["xfa"] = "Faliscan", ["xga"] = "Galatian", ["xgb"] = "Gbin", ["xgd"] = "Gudang", ["xgf"] = "Gabrielino-Fernandeño", ["xgg"] = "Goreng", ["xgi"] = "Garingbal", ["xgl"] = "Galindan", ["xgm"] = "Darumbal", ["xgn-mgl"] = "Mongghul", ["xgn-mgr"] = "Mangghuer", ["xgn-pro"] = "Proto-Mongolic", ["xgn-rou"] = "Rouran", ["xgr"] = "Garza", ["xgu"] = "Unggumi", ["xgw"] = "Guwa", ["xh"] = "Xhosa", ["xha"] = "Harami", ["xhc"] = "Hunnic", ["xhd"] = "Hadrami", ["xhe"] = "Khetrani", ["xhm"] = "Middle Khmer", ["xhr"] = "Hernican", ["xht"] = "Hattic", ["xhu"] = "Hurrian", ["xhv"] = "Khua", ["xib"] = "Iberian", ["xii"] = "Xiri", ["xil"] = "Illyrian", ["xin"] = "Xinca", ["xir"] = "Xiriâna", ["xis"] = "Kisan", ["xiv"] = "Indus Valley Language", ["xiy"] = "Xipaya", ["xjb"] = "Minjungbal", ["xka"] = "Kalkoti", ["xkb"] = "Manigri-Kambolé Ede Nago", ["xkc"] = "Khoini", ["xkd"] = "Mendalam Kayan", ["xke"] = "Kereho", ["xkf"] = "Khengkha", ["xkg"] = "Kagoro", ["xki"] = "Kenyan Sign Language", ["xkj"] = "Kajali", ["xkk"] = "Kaco'", ["xkl"] = "Bakung", ["xkn"] = "Kayan River Kayan", ["xko"] = "Kiorr", ["xkp"] = "Kabatei", ["xkq"] = "Koroni", ["xkr"] = "Xakriabá", ["xks"] = "Kumbewaha", ["xkt"] = "Kantosi", ["xku"] = "Kaamba", ["xkv"] = "Kgalagadi", ["xkw"] = "Kembra", ["xkx"] = "Karore", ["xky"] = "Uma' Lasan", ["xkz"] = "Kurtöp", ["xla"] = "Kamula", ["xlb"] = "Loup B", ["xlc"] = "Lycian", ["xld"] = "Lydian", ["xle"] = "Lemnian", ["xlg"] = "Ancient Ligurian", ["xli"] = "Liburnian", ["xlo"] = "Loup A", ["xlp"] = "Lepontic", ["xls"] = "Lusitanian", ["xlu"] = "Luwian", ["xly"] = "Elymian", ["xmb"] = "Mbonga", ["xmc"] = "Makhuwa-Marrevone", ["xmd"] = "Mbudum", ["xme-ker"] = "Kermanic", ["xme-kls"] = "Kalasuri", ["xme-klt"] = "Kilit", ["xme-mid"] = "Middle Median", ["xme-old"] = "Old Median", ["xme-ott"] = "Old Tati", ["xme-taf"] = "Tafreshi", ["xme-ttc-pro"] = "Proto-Tatic", ["xmf"] = "Mingrelian", ["xmg"] = "Mengaka", ["xmh"] = "Kugu-Muminh", ["xmj"] = "Majera", ["xmk"] = "Ancient Macedonian", ["xml"] = "Malaysian Sign Language", ["xmm"] = "Manado Malay", ["xmo"] = "Morerebi", ["xmp"] = "Kuku-Mu'inh", ["xmq"] = "Kuku-Mangk", ["xmr"] = "Meroitic", ["xms"] = "Moroccan Sign Language", ["xmt"] = "Matbat", ["xmu"] = "Kamu", ["xmx"] = "Maden", ["xmy"] = "Mayaguduna", ["xmz"] = "Mori Bawah", ["xna"] = "Ancient North Arabian", ["xnb"] = "Kanakanabu", ["xnd-pro"] = "Proto-Na-Dene", ["xng"] = "Middle Mongol", ["xnh"] = "Kuanhua", ["xni"] = "Ngarigu", ["xnk"] = "Nganakarti", ["xnn"] = "Northern Kankanay", ["xnr"] = "Kangri", ["xns"] = "Kanashi", ["xnt"] = "Narragansett", ["xnu"] = "Nukunul", ["xny"] = "Nyiyaparli", ["xoc"] = "O'chi'chi'", ["xod"] = "Kokoda", ["xog"] = "Soga", ["xoi"] = "Kominimung", ["xok"] = "Xokleng", ["xom"] = "Komo", ["xon"] = "Konkomba", ["xoo"] = "Xukurú", ["xop"] = "Kopar", ["xor"] = "Korubo", ["xow"] = "Kowaki", ["xpa"] = "Pirriya", ["xpb"] = "Pyemmairre", ["xpc"] = "Pecheneg", ["xpd"] = "Paredarerme", ["xpe"] = "Liberia Kpelle", ["xpf"] = "Southeast Tasmanian", ["xpg"] = "Phrygian", ["xph"] = "Tyerrernotepanner", ["xpi"] = "Pictish", ["xpj"] = "Mpalitjanh", ["xpk"] = "Kulina", ["xpl"] = "Port Sorell", ["xpm"] = "Pumpokol", ["xpn"] = "Kapinawá", ["xpo"] = "Pochutec", ["xpp"] = "Puyo-Paekche", ["xpq"] = "Mohegan-Pequot", ["xpr"] = "Parthian", ["xps"] = "Pisidian", ["xpu"] = "Punic", ["xpv"] = "Tommeginne", ["xpw"] = "Peerapper", ["xpx"] = "Toogee", ["xpy"] = "Buyeo", ["xpz"] = "Bruny Island", ["xqa"] = "Karakhanid", ["xqt"] = "Qatabanian", ["xra"] = "Krahô", ["xrb"] = "Eastern Karaboro", ["xrd"] = "Gundungurra", ["xre"] = "Kreye", ["xrg"] = "Minang", ["xri"] = "Krikati-Timbira", ["xrm"] = "Armazic", ["xrn"] = "Arin", ["xrq"] = "Karranga", ["xrr"] = "Raetic", ["xrt"] = "Aranama-Tamique", ["xru"] = "Marriammu", ["xrw"] = "Karawa", ["xsa"] = "Sabaean", ["xsb"] = "Sambali", ["xsc-pro"] = "Proto-Scythian", ["xsc-sak-pro"] = "Proto-Saka", ["xsc-skw-pro"] = "Proto-Saka-Wakhi", ["xsd"] = "Sidetic", ["xse"] = "Sempan", ["xsh"] = "Shamang", ["xsi"] = "Sio", ["xsj"] = "Subi", ["xsl"] = "South Slavey", ["xsm"] = "Kasem", ["xsn"] = "Sanga (Nigeria)", ["xso"] = "Solano", ["xsp"] = "Silopi", ["xsq"] = "Makhuwa-Saka", ["xsr"] = "Sherpa", ["xss"] = "Assan", ["xsu"] = "Sanumá", ["xsv"] = "Sudovian", ["xsy"] = "Saisiyat", ["xta"] = "Alcozauca Mixtec", ["xtb"] = "Chazumba Mixtec", ["xtc"] = "Kadugli", ["xtd"] = "Diuxi-Tilantongo Mixtec", ["xte"] = "Ketengban", ["xth"] = "Yitha Yitha", ["xti"] = "Sinicahua Mixtec", ["xtj"] = "San Juan Teita Mixtec", ["xtl"] = "Tijaltepec Mixtec", ["xtm"] = "Magdalena Peñasco Mixtec", ["xtn"] = "Northern Tlaxiaco Mixtec", ["xto"] = "Tocharian A", ["xtp"] = "San Miguel Piedras Mixtec", ["xtq"] = "Tumshuqese", ["xtr"] = "Early Tripuri", ["xts"] = "Sindihui Mixtec", ["xtt"] = "Tacahua Mixtec", ["xtu"] = "Cuyamecalco Mixtec", ["xtv"] = "Thawa", ["xtw"] = "Tawandê", ["xty"] = "Yoloxochitl Mixtec", ["xtz"] = "Tasmanian", ["xua"] = "Alu Kurumba", ["xub"] = "Betta Kurumba", ["xud"] = "Umiida", ["xug"] = "Kunigami", ["xuj"] = "Jennu Kurumba", ["xul"] = "Ngunawal", ["xum"] = "Umbrian", ["xun"] = "Unggaranggu", ["xuo"] = "Kuo", ["xup"] = "Upper Umpqua", ["xur"] = "Urartian", ["xut"] = "Kuthant", ["xuu"] = "Khwe", ["xve"] = "Venetic", ["xvn"] = "Vandalic", ["xvo"] = "Volscian", ["xvs"] = "Vestinian", ["xwa"] = "Kwaza", ["xwc"] = "Woccon", ["xwd"] = "Wadi Wadi", ["xwe"] = "Xwela Gbe", ["xwg"] = "Kwegu", ["xwj"] = "Wajuk", ["xwk"] = "Wangkumara", ["xwl"] = "Western Xwla Gbe", ["xwo"] = "Written Oirat", ["xwr"] = "Kwerba Mamberamo", ["xww"] = "Wemba-Wemba", ["xxb"] = "Boro", ["xxk"] = "Ke'o", ["xxm"] = "Minkin", ["xxr"] = "Koropó", ["xxt"] = "Tambora", ["xya"] = "Yaygir", ["xyb"] = "Yandjibara", ["xyl"] = "Yalakalore", ["xyt"] = "Mayi-Thakurti", ["xyy"] = "Yorta Yorta", ["xzh"] = "Zhang-Zhung", ["xzm"] = "Zemgalian", ["xzp"] = "Ancient Zapotec", ["yaa"] = "Yaminahua", ["yab"] = "Yuhup", ["yac"] = "Pass Valley Yali", ["yad"] = "Yagua", ["yae"] = "Pumé", ["yaf"] = "Yaka", ["yag"] = "Yámana", ["yah"] = "Yazghulami", ["yai"] = "Yagnobi", ["yaj"] = "Banda-Yangere", ["yak"] = "Yakima", ["yal"] = "Yalunka", ["yam"] = "Yamba", ["yan"] = "Mayangna", ["yao"] = "Yao", ["yap"] = "Yapese", ["yaq"] = "Yaqui", ["yar"] = "Yabarana", ["yas"] = "Gunu", ["yat"] = "Yambeta", ["yau"] = "Yuwana", ["yav"] = "Yangben", ["yaw"] = "Yawalapití", ["yay"] = "Agwagwune", ["yaz"] = "Lokaa", ["yba"] = "Yala", ["ybb"] = "Yemba", ["ybe"] = "Western Yugur", ["ybh"] = "Yakkha", ["ybi"] = "Yamphu", ["ybj"] = "Hasha", ["ybk"] = "Bokha", ["ybl"] = "Yukuben", ["ybm"] = "Yaben", ["ybn"] = "Yabaâna", ["ybo"] = "Yabong", ["ybx"] = "Yawiyo", ["yby"] = "Yaweyuha", ["ych"] = "Chesu", ["ycl"] = "Lolopo", ["ycn"] = "Yucuna", ["ycp"] = "Chepya", ["ycr"] = "Yilan Creole", ["yda"] = "Yanda", ["yde"] = "Yangum Dey", ["ydg"] = "Yidgha", ["ydk"] = "Yoidik", ["yea"] = "Ravula", ["yec"] = "Yeniche", ["yee"] = "Yimas", ["yei"] = "Yeni", ["yej"] = "Yevanic", ["yen"] = "Yendang", ["yer"] = "Tarok", ["yes"] = "Yeskwa", ["yet"] = "Yetfa", ["yeu"] = "Yerukula", ["yev"] = "Yapunda", ["yey"] = "Yeyi", ["ygi"] = "Yiningayi", ["ygl"] = "Yangum Gel", ["ygm"] = "Yagomi", ["ygp"] = "Gepo", ["ygr"] = "Yagaria", ["ygs"] = "Yolngu Sign Language", ["ygu"] = "Yugul", ["ygw"] = "Yagwoia", ["yha"] = "Baha", ["yhl"] = "Hlepho Phowa", ["yi"] = "Yiddish", ["yia"] = "Yinggarda", ["yif"] = "Ache", ["yig"] = "Wusa Nasu", ["yii"] = "Yidiny", ["yij"] = "Yindjibarndi", ["yik"] = "Dongshanba Lalo", ["yil"] = "Yindjilandji", ["yim"] = "Yimchungru Naga", ["yin"] = "Yinchia", ["yip"] = "Pholo", ["yiq"] = "Miqie", ["yir"] = "North Awyu", ["yis"] = "Yis", ["yit"] = "Eastern Lalu", ["yiu"] = "Awu", ["yiv"] = "Northern Nisu", ["yix"] = "Axi Yi", ["yiy"] = "Yir-Yoront", ["yiz"] = "Azhe", ["yka"] = "Yakan", ["ykg"] = "Northern Yukaghir", ["ykh"] = "Khamnigan Mongol", ["yki"] = "Yoke", ["ykk"] = "Yakaikeke", ["ykl"] = "Khlula", ["ykm"] = "Kap", ["ykn"] = "Kua-nsi", ["yko"] = "Yasa", ["ykr"] = "Yekora", ["ykt"] = "Kathu", ["yku"] = "Kuamasi", ["yky"] = "Yakoma", ["yla"] = "Yaul", ["ylb"] = "Yaleba", ["yle"] = "Yele", ["ylg"] = "Yelogu", ["yli"] = "Angguruk Yali", ["yll"] = "Yil", ["ylm"] = "Limi", ["yln"] = "Langnian Buyang", ["ylo"] = "Naluo Yi", ["ylr"] = "Yalarnnga", ["ylu"] = "Aribwaung", ["yly"] = "Nyâlayu", ["ymb"] = "Yambes", ["ymc"] = "Southern Muji", ["ymd"] = "Muda", ["yme"] = "Yameo", ["ymg"] = "Yamongeri", ["ymh"] = "Mili", ["ymi"] = "Moji", ["ymk"] = "Makwe", ["yml"] = "Iamalele", ["ymm"] = "Maay", ["ymn"] = "Sunum", ["ymo"] = "Yangum Mon", ["ymp"] = "Yamap", ["ymq"] = "Qila Muji", ["ymr"] = "Malasar", ["yms"] = "Mysian", ["ymx"] = "Northern Muji", ["ymz"] = "Muzi", ["yna"] = "Aluo", ["ynd"] = "Yandruwandha", ["yne"] = "Lang'e", ["yng"] = "Yango", ["ynk"] = "Naukanski", ["ynl"] = "Yangulam", ["ynn"] = "Yana", ["yno"] = "Yong", ["yns"] = "Yansi", ["ynu"] = "Yahuna", ["yo"] = "Yoruba", ["yob"] = "Yoba", ["yog"] = "Yogad", ["yoi"] = "Yonaguni", ["yol"] = "Yola", ["yom"] = "Yombe", ["yon"] = "Yongkom", ["yox"] = "Yoron", ["yoy"] = "Yoy", ["ypa"] = "Phala", ["ypb"] = "Labo Phowa", ["ypg"] = "Phola", ["yph"] = "Phupha", ["ypk-pro"] = "Proto-Yupik", ["ypm"] = "Phuma", ["ypn"] = "Ani Phowa", ["ypo"] = "Alo Phola", ["ypp"] = "Phupa", ["ypz"] = "Phuza", ["yra"] = "Yerakai", ["yrb"] = "Yareba", ["yre"] = "Yaouré", ["yri"] = "Yarí", ["yrk"] = "Tundra Nenets", ["yrl"] = "Nheengatu", ["yrn"] = "Yerong", ["yro"] = "Yaroamë", ["yrw"] = "Yarawata", ["yry"] = "Yarluyandi", ["ysc"] = "Jassic", ["ysd"] = "Samatao", ["ysg"] = "Sonaga", ["ysl"] = "Yugoslavian Sign Language", ["ysn"] = "Sani", ["yso"] = "Nisi", ["ysp"] = "Southern Lolopo", ["ysr"] = "Sirenik", ["yss"] = "Yessan-Mayo", ["ysy"] = "Sanie", ["yta"] = "Talu", ["ytl"] = "Tanglang", ["ytp"] = "Thopho", ["ytw"] = "Yout Wam", ["yty"] = "Yatay", ["yua"] = "Yucatec Maya", ["yub"] = "Yugambal", ["yuc"] = "Yuchi", ["yue"] = "Cantonese", ["yuf"] = "Havasupai-Walapai-Yavapai", ["yug"] = "Yug", ["yui"] = "Yurutí", ["yuj"] = "Karkar-Yuri", ["yuk"] = "Yuki", ["yul"] = "Yulu", ["yum"] = "Yuma", ["yun"] = "Bena", ["yup"] = "Yukpa", ["yuq"] = "Yuqui", ["yur"] = "Yurok", ["yut"] = "Yopno", ["yuw"] = "Finisterre Yau", ["yux"] = "Southern Yukaghir", ["yuy"] = "East Yugur", ["yuz"] = "Yuracare", ["yva"] = "Yawa", ["yvt"] = "Yavitero", ["ywa"] = "Kalou", ["ywg"] = "Yinhawangka", ["ywl"] = "Western Lalu", ["ywn"] = "Yawanawa", ["ywq"] = "Nasu", ["ywr"] = "Yawuru", ["ywt"] = "Xishanba Lalo", ["ywu"] = "Wumeng Nasu", ["yww"] = "Yawarawarga", ["yxa"] = "Mayawali", ["yxg"] = "Yagara", ["yxl"] = "Yarli", ["yxm"] = "Yinwum", ["yxu"] = "Yuyu", ["yxy"] = "Yabula Yabula", ["yyu"] = "Torricelli Yau", ["yyz"] = "Ayizi", ["yzg"] = "E'ma Buyang", ["yzk"] = "Zokhuo", ["za"] = "Zhuang", ["zaa"] = "Sierra de Juárez Zapotec", ["zab"] = "San Juan Guelavía Zapotec", ["zac"] = "Ocotlán Zapotec", ["zad"] = "Cajonos Zapotec", ["zae"] = "Yareni Zapotec", ["zaf"] = "Ayoquesco Zapotec", ["zag"] = "Zaghawa", ["zah"] = "Zangwal", ["zai"] = "Isthmus Zapotec", ["zaj"] = "Zaramo", ["zak"] = "Zanaki", ["zal"] = "Zauzou", ["zam"] = "Central Mahuatlán Zapoteco", ["zao"] = "Ozolotepec Zapotec", ["zap"] = "Zapotec", ["zaq"] = "Aloápam Zapotec", ["zar"] = "Rincón Zapotec", ["zas"] = "Santo Domingo Albarradas Zapotec", ["zat"] = "Tabaa Zapotec", ["zau"] = "Zangskari", ["zav"] = "Yatzachi Zapotec", ["zaw"] = "Mitla Zapotec", ["zax"] = "Xadani Zapotec", ["zay"] = "Zayse-Zergulla", ["zaz"] = "Zari", ["zbt"] = "Batui", ["zca"] = "Coatecas Altas Zapotec", ["zdj"] = "Ngazidja Comorian", ["zea"] = "Zealandic", ["zeg"] = "Zenag", ["zen"] = "Zenaga", ["zga"] = "Kinga", ["zgh"] = "Moroccan Amazigh", ["zgr"] = "Magori", ["zh"] = "Chinese", ["zhb"] = "Zhaba", ["zhi"] = "Zhire", ["zhn"] = "Nong Zhuang", ["zhw"] = "Zhoa", ["zhx-min-pro"] = "Proto-Min", ["zhx-sht"] = "Shaozhou Tuhua", ["zhx-tai"] = "Taishanese", ["zhx-teo"] = "Teochew", ["zia"] = "Zia", ["zib"] = "Zimbabwe Sign Language", ["zik"] = "Zimakani", ["zil"] = "Zialo", ["zim"] = "Mesme", ["zin"] = "Zinza", ["zir"] = "Ziriya", ["ziw"] = "Zigula", ["ziz"] = "Zizilivakan", ["zka"] = "Kaimbulawa", ["zkb"] = "Koibal", ["zkg"] = "Goguryeo", ["zkh"] = "Khorezmian Turkic", ["zkk"] = "Karankawa", ["zko"] = "Kott", ["zkp"] = "São Paulo Kaingáng", ["zkr"] = "Zakhring", ["zkt"] = "Khitan", ["zku"] = "Kaurna", ["zkv"] = "Krevinian", ["zkz"] = "Khazar", ["zle-ono"] = "Old Novgorodian", ["zle-ort"] = "Old Ruthenian", ["zlw-ocs"] = "Old Czech", ["zlw-opl"] = "Old Polish", ["zlw-pom-pro"] = "Proto-Pomeranian", ["zlw-slv"] = "Slovincian", ["zma"] = "Manda (Australia)", ["zmb"] = "Zimba", ["zmc"] = "Margany", ["zmd"] = "Maridan", ["zme"] = "Mangerr", ["zmf"] = "Mfinu", ["zmg"] = "Marti Ke", ["zmh"] = "Makolkol", ["zmi"] = "Negeri Sembilan Malay", ["zmj"] = "Maridjabin", ["zmk"] = "Mandandanyi", ["zml"] = "Madngele", ["zmm"] = "Marimanindji", ["zmn"] = "Mbangwe", ["zmo"] = "Molo", ["zmp"] = "Mbuun", ["zmq"] = "Mituku", ["zmr"] = "Maranungku", ["zms"] = "Mbesa", ["zmt"] = "Maringarr", ["zmu"] = "Muruwari", ["zmv"] = "Mbariman-Gudhinma", ["zmw"] = "Mbo (Congo)", ["zmx"] = "Bomitaba", ["zmy"] = "Mariyedi", ["zmz"] = "Mbandja", ["zna"] = "Zan Gula", ["zne"] = "Zande", ["zng"] = "Mang", ["znk"] = "Manangkari", ["zns"] = "Mangas", ["zoc"] = "Copainalá Zoque", ["zoh"] = "Chimalapa Zoque", ["zom"] = "Zou", ["zoo"] = "Asunción Mixtepec Zapotec", ["zoq"] = "Tabasco Zoque", ["zor"] = "Rayón Zoque", ["zos"] = "Francisco León Zoque", ["zpa"] = "Lachiguiri Zapotec", ["zpb"] = "Yautepec Zapotec", ["zpc"] = "Choapan Zapotec", ["zpd"] = "Southeastern Ixtlán Zapotec", ["zpe"] = "Petapa Zapotec", ["zpf"] = "San Pedro Quiatoni Zapotec", ["zpg"] = "Guevea de Humboldt Zapotec", ["zph"] = "Totomachapan Zapotec", ["zpi"] = "Santa María Quiegolani Zapotec", ["zpj"] = "Quiavicuzas Zapotec", ["zpk"] = "Tlacolulita Zapotec", ["zpl"] = "Lachixío Zapotec", ["zpm"] = "Mixtepec Zapotec", ["zpn"] = "Santa Inés Yatzechi Zapotec", ["zpo"] = "Amatlán Zapotec", ["zpp"] = "El Alto Zapotec", ["zpq"] = "Zoogocho Zapotec", ["zpr"] = "Santiago Xanica Zapotec", ["zps"] = "Coatlán Zapotec", ["zpt"] = "San Vicente Coatlán Zapotec", ["zpu"] = "Yalálag Zapotec", ["zpv"] = "Chichicapan Zapotec", ["zpw"] = "Zaniza Zapotec", ["zpx"] = "San Baltazar Loxicha Zapotec", ["zpy"] = "Mazaltepec Zapotec", ["zpz"] = "Texmelucan Zapotec", ["zra"] = "Kaya", ["zrg"] = "Mirgan", ["zrn"] = "Zirenkel", ["zro"] = "Záparo", ["zrs"] = "Mairasi", ["zsa"] = "Sarasira", ["zsk"] = "Kaskean", ["zsl"] = "Zambian Sign Language", ["zsr"] = "Southern Rincon Zapotec", ["zsu"] = "Sukurum", ["zte"] = "Elotepec Zapotec", ["ztg"] = "Xanaguía Zapotec", ["ztl"] = "Lapaguía-Guivini Zapotec", ["ztm"] = "San Agustín Mixtepec Zapotec", ["ztn"] = "Santa Catarina Albarradas Zapotec", ["ztp"] = "Loxicha Zapotec", ["ztq"] = "Quioquitani-Quierí Zapotec", ["zts"] = "Tilquiapan Zapotec", ["ztt"] = "Tejalapan Zapotec", ["ztu"] = "San Pablo Güilá Zapotec", ["ztx"] = "Zaachila Zapotec", ["zty"] = "Yatee Zapotec", ["zu"] = "Zulu", ["zua"] = "Zeem", ["zuh"] = "Tokano", ["zum"] = "Kumzari", ["zun"] = "Zuni", ["zuy"] = "Zumaya", ["zwa"] = "Zay", ["zyp"] = "Zyphe", ["zza"] = "Zazaki", ["zzj"] = "Zuojiang Zhuang", } pnjl6lojz0zpg906o32wssmr237n320 मॉड्यूल:languages/data/exceptional 828 304700 487557 477711 2026-09-01T15:51:50Z SM7 6218 असमिया 487557 Scribunto text/plain local u = mw.ustring.char local m_langdata = require("Module:languages/data") local c = m_langdata.chars local p = m_langdata.puaChars local s = m_langdata.shared local m = {} m["aav-khs-pro"] = { "Proto-Khasian", nil, "aav-khs", "Latinx", type = "reconstructed", } m["aav-nic-pro"] = { "Proto-Nicobarese", nil, "aav-nic", "Latinx", type = "reconstructed", } m["aav-pkl-pro"] = { "Proto-Pnar-Khasi-Lyngngam", nil, "aav-pkl", "Latinx", type = "reconstructed", } m["aav-pro"] = { --The mkh-pro will merge into this. "Proto-Austroasiatic", nil, "aav", "Latinx", type = "reconstructed", } m["afa-pro"] = { "Proto-Afroasiatic", 269125, "afa", "Latinx", type = "reconstructed", } m["alg-aga"] = { "Agawam", nil, "alg-eas", "Latn", } m["alg-pro"] = { "Proto-Algonquian", 7251834, "alg", "Latinx", type = "reconstructed", sort_key = {remove_diacritics = "·"}, } m["alv-ama"] = { "Amasi", 4740400, "nic-grs", "Latn", entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron}, } m["alv-bgu"] = { "Baïnounk Gubëeher", 17002646, "alv-bny", "Latn", } m["alv-bua-pro"] = { "Proto-Bua", nil, "alv-bua", "Latn", type = "reconstructed", } m["alv-cng-pro"] = { "Proto-Cangin", nil, "alv-cng", "Latn", type = "reconstructed", } m["alv-edo-pro"] = { "Proto-Edoid", nil, "alv-edo", "Latn", type = "reconstructed", } m["alv-fli-pro"] = { "Proto-Fali", nil, "alv-fli", "Latn", type = "reconstructed", } m["alv-gbe-pro"] = { "Proto-Gbe", nil, "alv-gbe", "Latn", type = "reconstructed", } m["alv-gng-pro"] = { "Proto-Guang", nil, "alv-gng", "Latn", type = "reconstructed", } m["alv-gtm-pro"] = { "Proto-Central Togo", nil, "alv-gtm", "Latn", type = "reconstructed", } m["alv-gwa"] = { "Gwara", 16945580, "nic-pla", "Latn", } m["alv-hei-pro"] = { "Proto-Heiban", nil, "alv-hei", "Latn", type = "reconstructed", } m["alv-ido-pro"] = { "Proto-Idomoid", nil, "alv-ido", "Latn", type = "reconstructed", } m["alv-igb-pro"] = { "Proto-Igboid", nil, "alv-igb", "Latn", type = "reconstructed", } m["alv-kwa-pro"] = { "Proto-Kwa", nil, "alv-kwa", "Latn", type = "reconstructed", } m["alv-mum-pro"] = { "Proto-Mumuye", nil, "alv-mum", "Latn", type = "reconstructed", } m["alv-nup-pro"] = { "Proto-Nupoid", nil, "alv-nup", "Latn", type = "reconstructed", } m["alv-pro"] = { "Proto-Atlantic-Congo", nil, "alv", "Latn", type = "reconstructed", } m["alv-edk-pro"] = { "Proto-Edekiri", nil, "alv-edk", "Latn", type = "reconstructed", } m["alv-yor-pro"] = { "Proto-Yoruba", nil, "alv-yor", "Latn", type = "reconstructed", } m["alv-yrd-pro"] = { "Proto-Yoruboid", nil, "alv-yrd", "Latn", type = "reconstructed", } m["alv-von-pro"] = { "Proto-Volta-Niger", nil, "alv-von", "Latn", type = "reconstructed", } m["apa-pro"] = { "Proto-Apachean", nil, "apa", "Latinx", type = "reconstructed", } m["aql-pro"] = { "Proto-Algic", 18389588, "aql", "Latinx", type = "reconstructed", sort_key = {remove_diacritics = "·"}, } m["art-blk"] = { "Bolak", 2909283, "art", "Latn", type = "appendix-constructed", } m["art-bsp"] = { "Black Speech", 686210, "art", "Latn, Teng", type = "appendix-constructed", } m["art-com"] = { "Communicationssprache", 35227, "art", "Latn", type = "appendix-constructed", } m["art-dtk"] = { "Dothraki", 2914733, "art", "Latn", type = "appendix-constructed", } m["art-elo"] = { "Eloi", nil, "art", "Latn", type = "appendix-constructed", } m["art-gld"] = { "Goa'uld", 19823, "art", "Latn, Egyp, Mero", type = "appendix-constructed", } m["art-lap"] = { "Lapine", 6488195, "art", "Latn", type = "appendix-constructed", } m["art-man"] = { "Mandalorian", 54289, "art", "Latn", type = "appendix-constructed", } m["art-mun"] = { "Mundolinco", 851355, "art", "Latn", type = "appendix-constructed", } m["art-nav"] = { "Na'vi", 316939, "art", "Latn", type = "appendix-constructed", } m["art-nox"] = { "Noxilo", nil, "art", "Latn", type = "appendix-constructed", } m["art-una"] = { "Unas", nil, "art", "Latn", type = "appendix-constructed", } m["ath-nic"] = { "Nicola", 20609, "ath-nor", "Latn", } m["ath-pro"] = { "Proto-Athabaskan", nil, "ath", "Latinx", type = "reconstructed", } m["auf-pro"] = { "Proto-Arawa", nil, "auf", "Latinx", type = "reconstructed", } m["aus-alu"] = { "Alungul", 16827670, "aus-pmn", "Latn", } m["aus-and"] = { "Andjingith", 4754509, "aus-pmn", "Latn", } m["aus-ang"] = { "Angkula", 16828520, "aus-pmn", "Latn", } m["aus-arn-pro"] = { "Proto-Arnhem", nil, "aus-arn", "Latinx", type = "reconstructed", } m["aus-bra"] = { "Barranbinya", 4863220, "aus-pmn", "Latn", } m["aus-brm"] = { "Barunggam", 4865914, "aus-pmn", "Latn", } m["aus-cww-pro"] = { "Proto-Central New South Wales", nil, "aus-cww", "Latinx", type = "reconstructed", } m["aus-dal-pro"] = { "Proto-Daly", nil, "aus-dal", "Latinx", type = "reconstructed", } m["aus-guw"] = { "Guwar", 6652138, "aus-pam", "Latn", } m["aus-lsw"] = { "Little Swanport", 6652138, nil, "Latn", } m["aus-mbi"] = { "Mbiywom", 6799701, "aus-pmn", "Latn", } m["aus-ngk"] = { "Ngkoth", 7022405, "aus-pmn", "Latn", } m["aus-nyu-pro"] = { "Proto-Nyulnyulan", nil, "aus-nyu", "Latinx", type = "reconstructed", } m["aus-pam-pro"] = { "Proto-Pama-Nyungan", 33942, "aus-pam", "Latinx", type = "reconstructed", } m["aus-tul"] = { "Tulua", 16938541, "aus-pam", "Latn", } m["aus-uwi"] = { "Uwinymil", 7903995, "aus-arn", "Latn", } m["aus-wdj-pro"] = { "Proto-Iwaidjan", nil, "aus-wdj", "Latinx", type = "reconstructed", } m["aus-won"] = { "Wong-gie", nil, "aus-pam", "Latn", } m["aus-wul"] = { "Wulguru", 8039196, "aus-dyb", "Latn", } m["aus-ynk"] = { -- contrast nny "Yangkaal", 3913770, "aus-tnk", "Latn", } m["awd-amc-pro"] = { "Proto-Amuesha-Chamicuro", nil, "awd", "Latn", type = "reconstructed", ancestors = "awd-pro", } m["awd-kmp-pro"] = { "Proto-Kampa", nil, "awd", "Latn", type = "reconstructed", ancestors = "awd-pro", } m["awd-prw-pro"] = { "Proto-Paresi-Waura", nil, "awd", "Latn", type = "reconstructed", ancestors = "awd-pro", } m["awd-ama"] = { "Amarizana", 16827787, "awd", "Latn", } m["awd-ana"] = { "Anauyá", 16828252, "awd", "Latn", } m["awd-apo"] = { "Apolista", 16916645, "awd", "Latn", } m["awd-cav"] = { "Cavere", nil, "awd", "Latn", } m["awd-gnu"] = { "Guinau", 3504087, "awd", "Latn", } m["awd-kar"] = { "Cariay", 16920253, "awd", "Latn", } m["awd-kaw"] = { "Kawishana", 6379993, "awd-nwk", "Latn", } m["awd-kus"] = { "Kustenau", 5196293, "awd", "Latn", } m["awd-man"] = { "Manao", 6746920, "awd", "Latn", } m["awd-mar"] = { "Marawan", 6755108, "awd", "Latn", } m["awd-mpr"] = { "Maypure", nil, "awd", "Latn", } m["awd-mrt"] = { "Mariaté", 16910017, "awd-nwk", "Latn", } m["awd-nwk-pro"] = { "Proto-Nawiki", nil, "awd-nwk", "Latn", type = "reconstructed", } m["awd-pai"] = { "Paikoneka", nil, "awd", "Latn", } m["awd-pas"] = { "Passé", nil, "awd-nwk", "Latn", } m["awd-pro"] = { "Proto-Arawak", nil, "awd", "Latn", type = "reconstructed", } m["awd-she"] = { "Shebayo", 7492248, "awd", "Latn", } m["awd-taa-pro"] = { "Proto-Ta-Arawak", nil, "awd-taa", "Latn", type = "reconstructed", } m["awd-wai"] = { "Wainumá", 16910017, "awd-nwk", "Latn", } m["awd-yum"] = { "Yumana", 8061062, "awd-nwk", "Latn", } m["azc-caz"] = { "Cazcan", 5055514, "azc", "Latn", } m["azc-cup-pro"] = { "Proto-Cupan", nil, "azc-cup", "Latinx", type = "reconstructed", } m["azc-ktn"] = { "Kitanemuk", 3197558, "azc-tak", "Latn", } m["azc-nah-pro"] = { "Proto-Nahuan", 7251860, "azc-nah", "Latinx", type = "reconstructed", } m["azc-num-pro"] = { "Proto-Numic", nil, "azc-num", "Latinx", type = "reconstructed", } m["azc-pro"] = { "Proto-Uto-Aztecan", 96400333, "azc", "Latinx", type = "reconstructed", } m["azc-tak-pro"] = { "Proto-Takic", nil, "azc-tak", "Latinx", type = "reconstructed", } m["azc-tat"] = { "Tataviam", 743736, "azc", "Latn", } m["ber-pro"] = { "Proto-Berber", 2855698, "ber", "Latinx", type = "reconstructed", } m["ber-fog"] = { "Fogaha", 107610173, "ber", "Latn", } m["ber-zuw"] = { "Zuwara", 4117169, "ber", "Latn", } m["bnt-bal"] = { "Balong", 93935237, "bnt-bbo", "Latn", } m["bnt-bon"] = { "Boma Nkuu", nil, "bnt", "Latn", } m["bnt-boy"] = { "Boma Yumu", nil, "bnt", "Latn", } m["bnt-bwa"] = { "Bwala", nil, "bnt-tek", "Latn", } m["bnt-cmw"] = { "Chimwiini", 4958328, "bnt-swh", "Latn", } m["bnt-ind"] = { "Indanga", 51412803, "bnt", "Latn", } m["bnt-lal"] = { "Lala (South Africa)", 6480154, "bnt-ngu", "Latn", } m["bnt-lwl"] = { "Lwel", 93936908, "bnt-bdz", "Latn", } m["bnt-mpi"] = { "Mpiin", 93937013, "bnt-bdz", "Latn", } m["bnt-mpu"] = { "Mpuono", --not to be confused with Mbuun zmp 36056, "bnt", "Latn", } m["bnt-ngu-pro"] = { "Proto-Nguni", 961559, "bnt-ngu", "Latinx", type = "reconstructed", sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.caron}, } m["bnt-phu"] = { "Phuthi", 33796, "bnt-ngu", "Latn", entry_name = {remove_diacritics = c.grave .. c.acute}, } m["bnt-pro"] = { "Proto-Bantu", 3408025, "bnt", "Latinx", type = "reconstructed", sort_key = "bnt-pro-sortkey", } m["bnt-sbo"] = { "South Boma", nil, "bnt", "Latn", } m["bnt-sts-pro"] = { "Proto-Sotho-Tswana", nil, "bnt-sts", "Latn", type = "reconstructed", } m["btk-pro"] = { "Proto-Batak", nil, "btk", "Latinx", type = "reconstructed", } m["cau-abz-pro"] = { "Proto-Abkhaz-Abaza", 7251831, "cau-abz", "Latinx", type = "reconstructed", } m["cau-ava-pro"] = { "Proto-Avaro-Andian", nil, "cau-ava", "Latinx", type = "reconstructed", } m["cau-cir-pro"] = { "Proto-Circassian", 7251838, "cau-cir", "Latinx", type = "reconstructed", } m["cau-drg-pro"] = { "Proto-Dargwa", nil, "cau-drg", "Latinx", type = "reconstructed", } m["cau-lzg-pro"] = { "Proto-Lezghian", nil, "cau-lzg", "Latinx", type = "reconstructed", } m["cau-nec-pro"] = { "Proto-Northeast Caucasian", nil, "cau-nec", "Latinx", type = "reconstructed", } m["cau-nkh-pro"] = { "Proto-Nakh", nil, "cau-nkh", "Latinx", type = "reconstructed", } m["cau-nwc-pro"] = { "Proto-Northwest Caucasian", 7251861, "cau-nwc", "Latinx", type = "reconstructed", } m["cau-tsz-pro"] = { "Proto-Tsezian", nil, "cau-tsz", "Latinx", type = "reconstructed", } m["cba-ata"] = { "Atanques", 4812783, "cba", "Latn", } m["cba-cat"] = { "Catío Chibcha", 7083619, "cba", "Latn", } m["cba-dor"] = { "Dorasque", 5297532, "cba", "Latn", } m["cba-dui"] = { "Duit", 3041061, "cba", "Latn", } m["cba-hue"] = { "Huetar", 35514, "cba", "Latn", } m["cba-nut"] = { "Nutabe", 7070405, "cba", "Latn", } m["cba-pro"] = { "Proto-Chibchan", nil, "cba", "Latinx", type = "reconstructed", } m["ccn-pro"] = { "Proto-North Caucasian", nil, "ccn", "Latinx", type = "reconstructed", } m["ccs-pro"] = { "Proto-Kartvelian", 2608203, "ccs", "Latinx", type = "reconstructed", entry_name = { from = {"q̣", "p̣", "ʓ", "ċ"}, to = {"q̇", "ṗ", "ʒ", "c̣"} }, } m["ccs-gzn-pro"] = { "Proto-Georgian-Zan", 23808119, "ccs-gzn", "Latinx", type = "reconstructed", entry_name = { from = {"q̣", "p̣", "ʓ", "ċ"}, to = {"q̇", "ṗ", "ʒ", "c̣"} }, } m["cdc-cbm-pro"] = { "Proto-Central Chadic", nil, "cdc-cbm", "Latn", type = "reconstructed", } m["cdc-mas-pro"] = { "Proto-Masa", nil, "cdc-mas", "Latn", type = "reconstructed", } m["cdc-pro"] = { "Proto-Chadic", nil, "cdc", "Latn", type = "reconstructed", } m["cdd-pro"] = { "Proto-Caddoan", nil, "cdd", "Latinx", type = "reconstructed", } m["cel-bry-pro"] = { "Proto-Brythonic", 156877, "cel-bry", "Latinx, Grek", sort_key = "cel-bry-pro-sortkey", } m["cel-gal"] = { "Gallaecian", 3094789, "cel", } m["cel-gau"] = { "Gaulish", 29977, "cel", "Latn, Grek, Ital", entry_name = {remove_diacritics = c.macron .. c.breve .. c.diaer}, } m["cel-pro"] = { "Proto-Celtic", 653649, "cel", "Latinx", type = "reconstructed", sort_key = "cel-pro-sortkey", } m["chi-pro"] = { "Proto-Chimakuan", nil, "chi", "Latinx", type = "reconstructed", } m["chm-pro"] = { "Proto-Mari", nil, "chm", "Latn", type = "reconstructed", } m["cmc-pro"] = { "Proto-Chamic", nil, "cmc", "Latinx", type = "reconstructed", } m["cpe-mar"] = { "Maroon Spirit Language", 1093206, "crp", "Latn", ancestors = "en", } m["cpe-spp"] = { "Samoan Plantation Pidgin", 7409948, "crp", "Latn", ancestors = "en", } m["crp-gep"] = { "West Greenlandic Pidgin", 17036301, "crp", "Latn", ancestors = "kl", } m["crp-mpp"] = { "Macau Pidgin Portuguese", nil, "crp", "Hant, Latn", ancestors = "pt", sort_key = {Hant = "Hani-sortkey"}, } m["crp-rsn"] = { "Russenorsk", 505125, "crp", "Cyrl, Latn", ancestors = "nn, ru", } m["crp-tnw"] = { "Tangwang", 7683179, "crp", "Arab, Latn", ancestors = "cmn, sce", } m["crp-tpr"] = { "Taimyr Pidgin Russian", 16930506, "crp", "Cyrl", ancestors = "ru", } m["csu-bba-pro"] = { "Proto-Bongo-Bagirmi", nil, "csu-bba", "Latinx", type = "reconstructed", } m["csu-maa-pro"] = { "Proto-Mangbetu", nil, "csu-maa", "Latinx", type = "reconstructed", } m["csu-pro"] = { "Proto-Central Sudanic", nil, "csu", "Latinx", type = "reconstructed", } m["csu-sar-pro"] = { "Proto-Sara", nil, "csu-sar", "Latinx", type = "reconstructed", } m["ctp-san"] = { "San Juan Quiahije Chatino", nil, "omq-cha", "Latinx", } m["cus-ash"] = { "Ashraaf", 4805855, "cus-som", "Latn", } m["cus-hec-pro"] = { "Proto-Highland East Cushitic", nil, "cus-hec", "Latinx", type = "reconstructed", } m["cus-som-pro"] = { "Proto-Somaloid", nil, "cus-som", "Latinx", type = "reconstructed", } m["cus-sou-pro"] = { "Proto-South Cushitic", nil, "cus-sou", "Latinx", type = "reconstructed", } m["cus-pro"] = { "Proto-Cushitic", nil, "cus", "Latinx", type = "reconstructed", } m["dmn-dam"] = { "Dama (Sierra Leone)", 19601574, "dmn", "Latn", } m["dra-mkn"] = { "Middle Kannada", nil, "dra", "Knda", ancestors = "dra-okn", translit = "kn-translit", } m["dra-okn"] = { "Old Kannada", 15723156, "dra", "Knda", ancestors = "dra-pro", translit = "kn-translit", } m["dra-ote"] = { "Old Telugu", nil, "dra", "Telu", ancestors = "dra-pro", translit = "te-translit", } m["dra-pro"] = { "Proto-Dravidian", 1702853, "dra", "Latinx", type = "reconstructed", } m["egx-dem"] = { "Demotic", 36765, "egx", "Latinx, Egyd", ancestors = "egy", sort_key = { from = {"ṱ", "t"}, to = {"h̭", "ḫ"} }, } m["elu-prk"] = { "Helu", 15080869, "inc-mid", "Brah", ancestors = "inc-pra", translit = "Brah-translit", } m["dmn-pro"] = { "Proto-Mande", nil, "dmn", "Latinx", type = "reconstructed", } m["dmn-mdw-pro"] = { "Proto-Western Mande", nil, "dmn-mdw", "Latinx", type = "reconstructed", } m["dru-pro"] = { "Proto-Rukai", nil, "map", "Latinx", type = "reconstructed", } m["esx-esk-pro"] = { "Proto-Eskimo", 7251842, "esx-esk", "Latinx", type = "reconstructed", } m["esx-ink"] = { "Inuktun", 1671647, "esx-inu", "Latn", } m["esx-inq"] = { "Inuinnaqtun", 28070, "esx-inu", "Latn", } m["esx-inu-pro"] = { "Proto-Inuit", nil, "esx-inu", "Latinx", type = "reconstructed", } m["esx-pro"] = { "Proto-Eskimo-Aleut", 7251843, "esx", "Latinx", type = "reconstructed", } m["esx-tut"] = { "Tunumiisut", 15665389, "esx-inu", "Latn", } m["euq-pro"] = { "Proto-Basque", 938011, "euq", "Latinx", type = "reconstructed", } m["gem-bur"] = { "Burgundian", nil, "gme", "Latn", } m["gem-pro"] = { "Proto-Germanic", 669623, "gem", "Latinx", type = "reconstructed", sort_key = "gem-pro-sortkey", } m["gme-cgo"] = { "Crimean Gothic", 36211, "gme", "Latn", } m["gmq-gut"] = { "Gutnish", 1256646, "gmq", "Latn", ancestors = "non", } m["gmq-jmk"] = { "Jamtish", nil, "gmq", "Latn", ancestors = "non", } m["gmq-mno"] = { "Middle Norwegian", 3417070, "gmq", "Latn", ancestors = "non", } m["gmq-oda"] = { "Old Danish", nil, "gmq", "Latn", ancestors = "non", entry_name = {remove_diacritics = c.macron}, } m["gmq-osw"] = { "Old Swedish", 2417210, "gmq", "Latn", ancestors = "non", entry_name = {remove_diacritics = c.macron}, } m["gmq-pro"] = { "Proto-Norse", 1671294, "gmq", "Runr", translit = "Runr-translit", } m["gmq-scy"] = { "Scanian", 768017, "gmq", "Latn", ancestors = "non", } m["gmw-bgh"] = { "Bergish", 329030, "gmw", "Latn", ancestors = "odt", } m["gmw-cfr"] = { "Central Franconian", nil, "gmw", "Latn", ancestors = "gmh", wikimedia_codes = "ksh", } m["gmw-ecg"] = { "East Central German", 499344, -- subsumes Q699284, Q152965 "gmw", "Latn", ancestors = "gmh", } m["gmw-gts"] = { "Gottscheerish", 533109, "gmw", "Latn", ancestors = "bar", } m["gmw-jdt"] = { "Jersey Dutch", 1687911, "gmw", "Latn", ancestors = "nl", } m["gmw-pro"] = { "Proto-West Germanic", 78079021, "gmw", "Latinx", type = "reconstructed", sort_key = "gmw-pro-sortkey", } m["gmw-rfr"] = { "Rhine Franconian", 707007, "gmw", "Latn", ancestors = "gmh", } m["gmw-stm"] = { "Sathmar Swabian", 2223059, "gmw", "Latn", ancestors = "swg", } m["gmw-tsx"] = { "Transylvanian Saxon", 260942, "gmw", "Latn", ancestors = "gmw-cfr", } m["gmw-vog"] = { "Volga German", 312574, "gmw", "Latn", ancestors = "gmw-rfr", } m["gmw-zps"] = { "Zipser German", 205548, "gmw", "Latn", ancestors = "gmh", } m["gn-cls"] = { "Classical Guaraní", 17478065, "tup-gua", "Latn", ancestors = "gn", } m["grk-cal"] = { "Calabrian Greek", 1146398, "grk", "Latn", ancestors = "grk-ita", } m["grk-ita"] = { "Italiot Greek", nil, "grk", "Latn, Grek", ancestors = "gkm", entry_name = {remove_diacritics = c.caron .. c.diaerbelow .. c.brevebelow}, sort_key = s["Grek-sortkey"], } m["grk-mar"] = { "Mariupol Greek", 4400023, "grk", "Cyrl, Latn, Grek", ancestors = "gkm", translit = "grk-mar-translit", override_translit = true, entry_name = "grk-mar-entryname", sort_key = s["Grek-sortkey"], } m["grk-pro"] = { "Proto-Hellenic", 1231805, "grk", "Latinx", type = "reconstructed", sort_key = { from = {"[áā]", "[éēḗ]", "[íī]", "[óōṓ]", "[úū]", "ď", "ľ", "ň", "ř", "ʰ", "ʷ", c.acute, c.macron}, to = {"a", "e", "i", "o", "u", "d", "l", "n", "r", "¯h", "¯w"} }, } m["hmn-pro"] = { "Proto-Hmong", nil, "hmn", "Latinx", type = "reconstructed", } m["hmx-mie-pro"] = { "Proto-Mien", nil, "hmx-mie", "Latinx", type = "reconstructed", } m["hmx-pro"] = { "Proto-Hmong-Mien", 7251846, "hmx", "Latinx", type = "reconstructed", } m["hyx-pro"] = { "Proto-Armenian", 3848498, "hyx", "Latn", type = "reconstructed", } m["iir-nur-pro"] = { "Proto-Nuristani", nil, "iir-nur", "Latinx", type = "reconstructed", } m["iir-pro"] = { "Proto-Indo-Iranian", 966439, "iir", "Latinx", type = "reconstructed", } m["ijo-pro"] = { "Proto-Ijoid", nil, "ijo", "Latinx", type = "reconstructed", } m["inc-ash"] = { "Ashokan Prakrit", nil, "inc-mid", "Brah, Khar", ancestors = "sa", translit = { Brah = "Brah-translit", Khar = "Khar-translit", }, } m["inc-gup"] = { "Gurjar Apabhramsa", nil, "inc-mid", "Deva", ancestors = "psu", } m["inc-kam"] = { "Kamarupi Prakrit", 6356097, "inc-mid", "Brah, Sidd", ancestors = "inc-mgd", } m["inc-kha"] = { "Khasa Prakrit", nil, "inc-nor", "Latn", ancestors = "inc-pra", } m["inc-kho"] = { "Kholosi", 24952008, "inc-snd", "Latn", ancestors = "inc-vra", } m["inc-mas"] = { "मध्य असमिया", nil, "inc-eas", "as-Beng", ancestors = "inc-oas", translit = "inc-mas-translit", } m["inc-mbn"] = { "Middle Bengali", nil, "inc-eas", "Beng", ancestors = "inc-obn", translit = "inc-mbn-translit", } m["inc-mgd"] = { "Magadhi Prakrit", 2652214, "inc-mid", "Brah", ancestors = "inc-pra", translit = "Brah-translit", } m["inc-mgu"] = { "Middle Gujarati", 24907429, "inc-wes", "Deva", ancestors = "inc-ogu", } m["inc-mor"] = { "Middle Oriya", nil, "inc-eas", "Orya", ancestors = "inc-oor", } m["inc-oas"] = { "प्रारंभिक असमिया", nil, "inc-eas", "as-Beng", ancestors = "inc-kam", translit = "inc-oas-translit", } m["inc-obn"] = { "Old Bengali", nil, "inc-eas", "Beng", ancestors = "inc-mgd", } m["inc-ogu"] = { "Old Gujarati", 24907427, "inc-wes", "Deva", ancestors = "inc-gup", translit = "sa-translit", } m["inc-ohi"] = { "Old Hindi", 48767781, "inc-hiw", "Deva", ancestors = "inc-sap", translit = "sa-translit", } m["inc-oor"] = { "Old Oriya", nil, "inc-eas", "Orya", ancestors = "inc-mgd", } m["inc-opa"] = { "Old Punjabi", nil, "inc-pan", "Guru, pa-Arab", ancestors = "inc-tak", translit = { Guru = "inc-opa-Guru-translit", ["pa-Arab"] = "pa-Arab-translit", }, entry_name = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun}, } m["inc-ork"] = { "Old Kamta", nil, "inc-eas", "as-Beng", ancestors = "inc-kam", translit = "as-translit", } m["inc-pra"] = { "Prakrit", 192170, "inc-mid", "Brah, Deva, Knda", ancestors = "inc-ash", translit = { Brah = "Brah-translit", Deva = "inc-pra-Deva-translit", Knda = "inc-pra-Knda-translit", }, entry_name = { from = {"ऎ", "ऒ", u(0x0946), u(0x094A), "य़", "ಯ಼", u(0x11071), u(0x11072), u(0x11073), u(0x11074)}, to = {"ए", "ओ", u(0x0947), u(0x094B), "य", "ಯ", "𑀏", "𑀑", u(0x11042), u(0x11044)} } , } m["inc-pro"] = { "Proto-Indo-Aryan", 23808344, "inc", "Latinx", type = "reconstructed", } m["inc-psc"] = { "Paisaci Prakrit", 2995607, "inc-mid", "Brah", ancestors = "inc-ash", translit = "Brah-translit", } m["inc-sap"] = { "Sauraseni Apabhramsa", nil, "inc-mid", "Deva", ancestors = "psu", } m["inc-tak"] = { "Takka Apabhramsa", nil, "inc-mid", "Deva", ancestors = "inc-pra", translit = "sa-translit", } m["inc-vra"] = { "Vracada Apabhramsa", nil, "inc-mid", "Deva", ancestors = "inc-pra", translit = "sa-translit", } m["inc-cen-pro"] = { "Proto-Central Indo-Aryan", nil, "inc-cen", "Latinx", type = "reconstructed", ancestors = "psu", } m["ine-ana-pro"] = { "Proto-Anatolian", 7251833, "ine-ana", "Latinx", type = "reconstructed", } m["ine-bsl-pro"] = { "Proto-Balto-Slavic", 1703347, "ine-bsl", "Latinx", type = "reconstructed", sort_key = { from = {"[áā]", "[éēḗ]", "[íī]", "[óōṓ]", "[úū]", c.acute, c.macron, "ˀ"}, to = {"a", "e", "i", "o", "u"} }, } m["ine-pae"] = { "Paeonian", 2705672, "ine", "polytonic", translit = "grc-translit", entry_name = {remove_diacritics = c.macron .. c.breve}, sort_key = s["Grek-sortkey"], } m["ine-pro"] = { "Proto-Indo-European", 37178, "ine", "Latinx", type = "reconstructed", sort_key = { from = {"[áā]", "[éēḗ]", "[íī]", "[óōṓ]", "[úū]", "ĺ", "ḿ", "ń", "ŕ", "ǵ", "ḱ", "ʰ", "ʷ", "₁", "₂", "₃", c.ringbelow, c.acute, c.macron}, to = {"a", "e", "i", "o", "u", "l", "m", "n", "r", "g'", "k'", "¯h", "¯w", "1", "2", "3"} }, } m["ine-toc-pro"] = { "Proto-Tocharian", 37029, "ine-toc", "Latinx", type = "reconstructed", } m["xme-old"] = { "Old Median", 36461, "xme", "Grek, Latn", } m["xme-mid"] = { "Middle Median", nil, "xme", "Latn", ancestors = "xme-old", } m["xme-ker"] = { "Kermanic", 129850, "xme", "fa-Arab, Latn", ancestors = "xme-mid", } m["xme-taf"] = { "Tafreshi", nil, "xme", "fa-Arab, Latn", ancestors = "xme-mid", } m["xme-ttc-pro"] = { "Proto-Tatic", nil, "xme-ttc", "Latn", ancestors = "xme-mid", } m["xme-kls"] = { "Kalasuri", nil, "xme-ttc", ancestors = "xme-ttc-nor", } m["xme-klt"] = { "Kilit", 3612452, "xme-ttc", "Cyrl", -- and fa-Arab? ancestors = "xme-ttc-pro", } m["xme-ott"] = { "Old Tati", 434697, "xme-ttc", "fa-Arab, Latinx", ancestors = "xme-ttc-pro", } m["ira-pro"] = { "Proto-Iranian", 4167865, "ira", "Latinx", type = "reconstructed", } m["ira-mpr-pro"] = { "Proto-Medo-Parthian", nil, "ira-mpr", "Latinx", type = "reconstructed", } m["ira-kms-pro"] = { "Proto-Komisenian", nil, "ira-kms", "Latinx", type = "reconstructed", } m["ira-zgr-pro"] = { "Proto-Zaza-Gorani", nil, "ira-zgr", "Latinx", type = "reconstructed", } m["ira-pat-pro"] = { "Proto-Pathan", nil, "ira-pat", "Latinx", type = "reconstructed", } m["os-pro"] = { "Proto-Ossetic", nil, "xsc", "Latinx", type = "reconstructed", } m["xsc-pro"] = { "Proto-Scythian", nil, "xsc", "Latinx", type = "reconstructed", } m["xsc-skw-pro"] = { "Proto-Saka-Wakhi", nil, "xsc-skw", "Latinx", type = "reconstructed", ancestors = "xsc-pro", } m["xsc-sak-pro"] = { "Proto-Saka", nil, "xsc-sak", "Latinx", type = "reconstructed", ancestors = "xsc-skw-pro", } m["ira-sym-pro"] = { "Proto-Shughni-Yazghulami-Munji", nil, "ira-sym", "Latinx", type = "reconstructed", } m["ira-sgi-pro"] = { "Proto-Sanglechi-Ishkashimi", nil, "ira-sgi", "Latinx", type = "reconstructed", } m["ira-mny-pro"] = { "Proto-Munji-Yidgha", nil, "ira-mny", "Latinx", type = "reconstructed", ancestors = "ira-sym-pro", } m["ira-shy-pro"] = { "Proto-Shughni-Yazghulami", nil, "ira-shy", "Latinx", type = "reconstructed", ancestors = "ira-sym-pro", } m["ira-shr-pro"] = { "Proto-Shughni-Roshani", nil, "ira-shy", "Latinx", type = "reconstructed", ancestors = "ira-shy-pro", } m["ira-sgc-pro"] = { "Proto-Sogdic", nil, "ira-sgc", "Latinx", type = "reconstructed", } m["ira-wnj"] = { "Vanji", nil, "ira-shy", "Latinx", ancestors = "ira-shy-pro", } m["iro-ere"] = { "Erie", 5388365, "iro-nor", "Latn", } m["iro-min"] = { "Mingo", 128531, "iro-nor", "Latn", } m["iro-nor-pro"] = { "Proto-North Iroquoian", nil, "iro-nor", "Latinx", type = "reconstructed", } m["iro-pro"] = { "Proto-Iroquoian", 7251852, "iro", "Latinx", type = "reconstructed", } m["itc-pro"] = { "Proto-Italic", 17102720, "itc", "Latinx", type = "reconstructed", } m["jpx-pro"] = { "Proto-Japonic", nil, "jpx", "Latinx", type = "reconstructed", } m["jpx-ryu-pro"] = { "Proto-Ryukyuan", nil, "jpx-ryu", "Latinx", type = "reconstructed", } m["kar-pro"] = { "Proto-Karen", nil, "kar", "Latinx", type = "reconstructed", } m["khi-kho-pro"] = { "Proto-Khoe", nil, "khi-kho", "Latn", type = "reconstructed", } m["khi-kun"] = { "ǃKung", 32904, "khi-kxa", "Latn", } m["ko-ear"] = { "Early Modern Korean", 756014, "qfa-kor", "Kore", ancestors = "okm", translit = "okm-translit", entry_name = s["Kore-entryname"], } m["kro-pro"] = { "Proto-Kru", nil, "kro", "Latn", type = "reconstructed", } m["ku-pro"] = { "Proto-Kurdish", nil, "ku", "Latinx", type = "reconstructed", } m["map-ata-pro"] = { "Proto-Atayalic", nil, "map-ata", "Latinx", type = "reconstructed", } m["map-bms"] = { "Banyumasan", 33219, "map", "Latn", } m["map-pro"] = { "Proto-Austronesian", 49230, "map", "Latinx", type = "reconstructed", } m["mkh-asl-pro"] = { "Proto-Aslian", 55630680, "mkh-asl", "Latn", type = "reconstructed", } m["mkh-ban-pro"] = { "Proto-Bahnaric", nil, "mkh-ban", "Latn", type = "reconstructed", } m["mkh-kat-pro"] = { "Proto-Katuic", nil, "mkh-kat", "Latinx", type = "reconstructed", } m["mkh-khm-pro"] = { "Proto-Khmuic", nil, "mkh-khm", "Latn", type = "reconstructed", } m["mkh-kmr-pro"] = { "Proto-Khmeric", 55630684, "mkh-kmr", "Latn", type = "reconstructed", } m["mkh-mmn"] = { "Middle Mon", nil, "mkh-mnc", "Latinx, Mymr", --and also Pallava ancestors = "omx", } m["mkh-mnc-pro"] = { "Proto-Monic", nil, "mkh-mnc", "Latn", type = "reconstructed", } m["mkh-mvi"] = { "Middle Vietnamese", 9199, "mkh-vie", "Hani, Latinx", sort_key = {Hani = "Hani-sortkey"}, } m["mkh-pal-pro"] = { "Proto-Palaungic", nil, "mkh-pal", "Latinx", type = "reconstructed", } m["mkh-pea-pro"] = { "Proto-Pearic", nil, "mkh-pea", "Latinx", type = "reconstructed", } m["mkh-pkn-pro"] = { "Proto-Pakanic", nil, "mkh-pkn", "Latn", type = "reconstructed", } m["mkh-pro"] = { --This will be merged into 2015 aav-pro. "Proto-Mon-Khmer", 7251859, "mkh", "Latinx", type = "reconstructed", } m["mkh-vie-pro"] = { "Proto-Vietic", nil, "mkh-vie", "Latinx", type = "reconstructed", } m["mnw-tha"] = { "Thai Mon", nil, "mkh-mnc", "Mymr, Thai", ancestors = "mkh-mmn", sort_key = { from = {"[%p]", "ျ", "ြ", "ွ", "ှ", "ၞ", "ၟ", "ၠ", "ၚ", "ဿ", "[็-๎]", "([เแโใไ])([ก-ฮ])ฺ?"}, to = {"", "္ယ", "္ရ", "္ဝ", "္ဟ", "္န", "္မ", "္လ", "င", "သ္သ", "", "%2%1"} }, } m["mun-pro"] = { "Proto-Munda", nil, "mun", "Latinx", type = "reconstructed", } m["myn-chl"] = { -- the stage after ''emy'' "Ch'olti'", 873995, "myn", "Latinx", } m["myn-pro"] = { "Proto-Mayan", 3321532, "myn", "Latinx", type = "reconstructed", } m["nai-ala"] = { "Alazapa", nil, nil, "Latn", } m["nai-bay"] = { "Bayogoula", 1563704, nil, "Latn", } m["nai-bvy"] = { "Buena Vista Yokuts", 4985474, "nai-yok", "Latn", } m["nai-cal"] = { "Calusa", 51782, nil, "Latn", } m["nai-chi"] = { "Chiquimulilla", 25339627, "nai-xin", "Latn", } m["nai-chu-pro"] = { "Proto-Chumash", nil, "nai-chu", "Latinx", type = "reconstructed", } m["nai-cig"] = { "Ciguayo", 20741700, nil, "Latn", } m["nai-ckn-pro"] = { "Proto-Chinookan", nil, "nai-ckn", "Latinx", type = "reconstructed", } m["nai-dly"] = { "Delta Yokuts", nil, "nai-yok", "Latn", } m["nai-gsy"] = { "Gashowu", nil, "nai-yok", "Latn", } m["nai-guz"] = { "Guazacapán", 19572028, "nai-xin", "Latn", } m["nai-hit"] = { "Hitchiti", 1542882, "nai-mus", "Latn", } m["nai-ipa"] = { "Ipai", 3027474, "nai-yuc", "Latn", } m["nai-jtp"] = { "Jutiapa", nil, "nai-xin", "Latn", } m["nai-jum"] = { "Jumaytepeque", 25339626, "nai-xin", "Latn", } m["nai-kat"] = { "Kathlamet", 6376639, "nai-ckn", "Latn", } m["nai-klp-pro"] = { "Proto-Kalapuyan", nil, "nai-klp", type = "reconstructed", } m["nai-knm"] = { "Konomihu", 3198734, "nai-shs", "Latn", } m["nai-kry"] = { "Kings River Yokuts", 6413014, "nai-yok", "Latn", } m["nai-kum"] = { "Kumeyaay", 4910139, "nai-yuc", "Latn", } m["nai-mac"] = { "Macoris", 21070851, nil, "Latn", } m["nai-mdu-pro"] = { "Proto-Maidun", nil, "nai-mdu", "Latinx", type = "reconstructed", } m["nai-miz-pro"] = { "Proto-Mixe-Zoque", nil, "nai-miz", "Latinx", type = "reconstructed", } m["nai-mus-pro"] = { "Proto-Muskogean", nil, "nai-mus", "Latinx", type = "reconstructed", } m["nai-nao"] = { "Naolan", 6964594, nil, "Latn", } m["nai-nrs"] = { "New River Shasta", 7011254, "nai-shs", "Latn", } m["nai-nvy"] = { "Northern Valley Yokuts", nil, "nai-yok", "Latn", } m["nai-okw"] = { "Okwanuchu", 3350126, "nai-shs", "Latn", } m["nai-per"] = { "Pericú", 3375369, nil, "Latn", } m["nai-pic"] = { "Picuris", 7191257, "nai-kta", "Latn", } m["nai-plp-pro"] = { "Proto-Plateau Penutian", nil, "nai-plp", "Latinx", type = "reconstructed", } m["nai-ply"] = { "Palewyami", 2387391, "nai-yok", "Latn", } m["nai-pom-pro"] = { "Proto-Pomo", nil, "nai-pom", "Latn", type = "reconstructed", } m["nai-qng"] = { "Quinigua", 36360, nil, "Latn", } m["nai-sca-pro"] = { -- NB 'sio-pro' "Proto-Siouan" which is Proto-Western Siouan "Proto-Siouan-Catawban", nil, "nai-sca", "Latinx", type = "reconstructed", } m["nai-sin"] = { "Sinacantán", 24190249, "nai-xin", "Latn", } m["nai-sln"] = { "Salvadoran Lenca", 3229434, "nai-len", "Latn", } m["nai-spt"] = { "Sahaptin", 3833015, "nai-shp", "Latn", } m["nai-svy"] = { "Southern Valley Yokuts", nil, "nai-yok", "Latn", } m["nai-tap"] = { "Tapachultec", 7684401, "nai-miz", "Latn", } m["nai-taw"] = { "Tawasa", 7689233, nil, "Latn", } m["nai-teq"] = { "Tequistlatec", 2964454, "nai-tqn", "Latn", } m["nai-tip"] = { "Tipai", 3027471, "nai-yuc", "Latn", } m["nai-tky"] = { "Tule-Kaweah Yokuts", 7851988, "nai-yok", "Latn", } m["nai-tot-pro"] = { "Proto-Totozoquean", nil, "nai-tot", "Latinx", type = "reconstructed", } m["nai-tsi-pro"] = { "Proto-Tsimshianic", nil, "nai-tsi", "Latinx", type = "reconstructed", } m["nai-utn-pro"] = { "Proto-Utian", nil, "nai-utn", "Latinx", type = "reconstructed", } m["nai-wai"] = { "Waikuri", 3118702, nil, "Latn", } m["nai-yup"] = { "Yupiltepeque", 25339628, "nai-xin", "Latn", } m["nds-de"] = { "German Low German", 25433, "gmw", "Latn", ancestors = "nds", wikimedia_codes = "nds", } m["nds-nl"] = { "Dutch Low Saxon", 516137, "gmw", "Latn", ancestors = "nds", } m["ngf-pro"] = { "Proto-Trans-New Guinea", nil, "ngf", "Latn", type = "reconstructed", } m["nic-bco-pro"] = { "Proto-Benue-Congo", nil, "nic-bco", "Latn", type = "reconstructed", } m["nic-bod-pro"] = { "Proto-Bantoid", nil, "nic-bod", "Latn", type = "reconstructed", } m["nic-eov-pro"] = { "Proto-Eastern Oti-Volta", nil, "nic-eov", "Latn", type = "reconstructed", } m["nic-gns-pro"] = { "Proto-Gurunsi", nil, "nic-gns", "Latn", type = "reconstructed", } m["nic-grf-pro"] = { "Proto-Grassfields", nil, "nic-grf", "Latn", type = "reconstructed", } m["nic-gur-pro"] = { "Proto-Gur", nil, "nic-gur", "Latn", type = "reconstructed", } m["nic-jkn-pro"] = { "Proto-Jukunoid", nil, "nic-jkn", "Latn", type = "reconstructed", } m["nic-lcr-pro"] = { "Proto-Lower Cross River", nil, "nic-lcr", "Latn", type = "reconstructed", } m["nic-ogo-pro"] = { "Proto-Ogoni", nil, "nic-ogo", "Latn", type = "reconstructed", } m["nic-ovo-pro"] = { "Proto-Oti-Volta", nil, "nic-ovo", "Latn", type = "reconstructed", } m["nic-plt-pro"] = { "Proto-Plateau", nil, "nic-plt", "Latn", type = "reconstructed", } m["nic-pro"] = { "Proto-Niger-Congo", nil, "nic", "Latn", type = "reconstructed", } m["nic-ubg-pro"] = { "Proto-Ubangian", nil, "nic-ubg", "Latn", type = "reconstructed", } m["nic-ucr-pro"] = { "Proto-Upper Cross River", nil, "nic-ucr", "Latn", type = "reconstructed", } m["nic-vco-pro"] = { "Proto-Volta-Congo", nil, "nic-vco", "Latn", type = "reconstructed", } m["nub-har"] = { "Haraza", 19572059, "nub", "Arab, Latn", } m["nub-pro"] = { "Proto-Nubian", nil, "nub", "Latn", type = "reconstructed", } m["omq-cha-pro"] = { "Proto-Chatino", nil, "omq-cha", "Latn", type = "reconstructed", } m["omq-maz-pro"] = { "Proto-Mazatec", nil, "omq-maz", "Latn", type = "reconstructed", } m["omq-mix-pro"] = { "Proto-Mixtecan", nil, "omq-mix", "Latn", type = "reconstructed", } m["omq-mxt-pro"] = { "Proto-Mixtec", nil, "omq-mxt", "Latn", type = "reconstructed", } m["omq-otp-pro"] = { "Proto-Oto-Pamean", nil, "omq-otp", "Latn", type = "reconstructed", ancestors = "omq-pro", } m["omq-pro"] = { "Proto-Oto-Manguean", 33669, "omq", "Latn", type = "reconstructed", } m["omq-tel"] = { "Teposcolula Mixtec", nil, "omq-mxt", "Latn", } m["omq-teo"] = { "Teojomulco Chatino", 25340451, "omq-cha", "Latn", } m["omq-tri-pro"] = { "Proto-Trique", nil, "omq-tri", "Latn", type = "reconstructed", } m["omq-zap-pro"] = { "Proto-Zapotecan", nil, "omq-zap", "Latn", type = "reconstructed", } m["omq-zpc-pro"] = { "Proto-Zapotec", nil, "omq-zpc", "Latn", type = "reconstructed", } m["omv-aro-pro"] = { "Proto-Aroid", nil, "omv-aro", "Latn", type = "reconstructed", } m["omv-diz-pro"] = { "Proto-Dizoid", nil, "omv-diz", "Latn", type = "reconstructed", } m["omv-pro"] = { "Proto-Omotic", nil, "omv", "Latn", type = "reconstructed", } m["oto-otm-pro"] = { "Proto-Otomi", nil, "oto-otm", "Latn", type = "reconstructed", ancestors = "oto-pro", } m["oto-pro"] = { "Proto-Otomian", nil, "oto", "Latn", type = "reconstructed", ancestors = "omq-otp-pro", } m["paa-kom"] = { "Kómnzo", 18344310, "paa-yam", "Latn", } m["paa-kwn"] = { "Kuwani", 6449056, "paa", "Latn", } m["paa-nha-pro"] = { "Proto-North Halmahera", nil, "paa-nha", "Latn", type = "reconstructed" } m["paa-nun"] = { "Nungon", nil, "paa", "Latn", } m["phi-din"] = { "Dinapigue Agta", 16945774, "phi", "Latn", } m["phi-kal-pro"] = { "Proto-Kalamian", nil, "phi-kal", "Latn", type = "reconstructed", } m["phi-nag"] = { "Nagtipunan Agta", 16966111, "phi", "Latn", } m["phi-pro"] = { "Proto-Philippine", 18204898, "phi", "Latinx", type = "reconstructed", } m["poz-abi"] = { "Abai", 19570729, "poz-san", "Latn", } m["poz-bal"] = { "Baliledo", 4850912, "poz", "Latn", } m["poz-btk-pro"] = { "Proto-Bungku-Tolaki", nil, "poz-btk", "Latinx", type = "reconstructed", } m["poz-cet-pro"] = { "Proto-Central-Eastern Malayo-Polynesian", 2269883, "poz-cet", "Latinx", type = "reconstructed", } m["poz-hce-pro"] = { "Proto-Halmahera-Cenderawasih", nil, "poz-hce", "Latinx", type = "reconstructed", } m["poz-lgx-pro"] = { "Proto-Lampungic", nil, "poz-lgx", "Latinx", type = "reconstructed", } m["poz-mcm-pro"] = { "Proto-Malayo-Chamic", nil, "poz-mcm", "Latinx", type = "reconstructed", } m["poz-mly-pro"] = { "Proto-Malayic", nil, "poz-mly", "Latinx", type = "reconstructed", } m["poz-msa-pro"] = { "Proto-Malayo-Sumbawan", nil, "poz-msa", "Latinx", type = "reconstructed", } m["poz-oce-pro"] = { "Proto-Oceanic", 141741, "poz-oce", "Latinx", type = "reconstructed", } m["poz-pep-pro"] = { "Proto-Eastern Polynesian", nil, "poz-pep", "Latinx", type = "reconstructed", } m["poz-pnp-pro"] = { "Proto-Nuclear Polynesian", nil, "poz-pnp", "Latinx", type = "reconstructed", } m["poz-pol-pro"] = { "Proto-Polynesian", 1658709, "poz-pol", "Latinx", type = "reconstructed", } m["poz-pro"] = { "Proto-Malayo-Polynesian", 3832960, "poz", "Latinx", type = "reconstructed", } m["poz-ssw-pro"] = { "Proto-South Sulawesi", nil, "poz-ssw", "Latinx", type = "reconstructed", } m["poz-sus-pro"] = { "Proto-Sunda-Sulawesi", nil, "poz-sus", "Latinx", type = "reconstructed", } m["poz-swa-pro"] = { "Proto-North Sarawak", nil, "poz-swa", "Latinx", type = "reconstructed", } m["pqe-pro"] = { "Proto-Eastern Malayo-Polynesian", 2269883, "pqe", "Latinx", type = "reconstructed", } m["pra-niy"] = { "Niya Prakrit", nil, "inc-mid", "Khar", ancestors = "inc-ash", translit = "Khar-translit", } m["qfa-adm-pro"] = { "Proto-Great Andamanese", nil, "qfa-adm", "Latinx", type = "reconstructed", } m["qfa-bet-pro"] = { "Proto-Be-Tai", nil, "qfa-bet", "Latinx", type = "reconstructed", } m["qfa-cka-pro"] = { "Proto-Chukotko-Kamchatkan", 7251837, "qfa-cka", "Latinx", type = "reconstructed", } m["qfa-hur-pro"] = { "Proto-Hurro-Urartian", nil, "qfa-hur", "Latinx", type = "reconstructed", } m["qfa-kad-pro"] = { "Proto-Kadu", nil, "qfa-kad", "Latn", type = "reconstructed", } m["qfa-kms-pro"] = { "Proto-Kam-Sui", nil, "qfa-kms", "Latn", type = "reconstructed", } m["qfa-kor-pro"] = { "Proto-Koreanic", 467883, "qfa-kor", "Latinx", type = "reconstructed", } m["qfa-kra-pro"] = { "Proto-Kra", 7251854, "qfa-kra", "Latinx", type = "reconstructed", } m["qfa-lic-pro"] = { "Proto-Hlai", 7251845, "qfa-lic", "Latinx", type = "reconstructed", } m["qfa-onb-pro"] = { "Proto-Be", nil, "qfa-onb", "Latinx", type = "reconstructed", } m["qfa-ong-pro"] = { "Proto-Ongan", nil, "qfa-ong", "Latinx", type = "reconstructed", } m["qfa-tak-pro"] = { "Proto-Kra-Dai", nil, "qfa-tak", "Latn", type = "reconstructed", } m["qfa-xgx-tuh"] = { "Tuyuhun", 48816625, "qfa-xgx", "Hani, Latinx", sort_key = {Hani = "Hani-sortkey"}, } m["qfa-xgx-tuo"] = { "Tuoba", 48816629, "qfa-xgx", "Hani, Latinx", sort_key = {Hani = "Hani-sortkey"}, } m["qfa-xgx-wuh"] = { "Wuhuan", 118976867, "qfa-xgx", "Hani, Latinx", sort_key = {Hani = "Hani-sortkey"}, } m["qfa-xgx-xbi"] = { "Xianbei", 4448647, "qfa-xgx", "Hani, Latinx", sort_key = {Hani = "Hani-sortkey"}, } m["qfa-yen-pro"] = { "Proto-Yeniseian", 27639, "qfa-yen", "Latinx", type = "reconstructed", } m["qfa-yuk-pro"] = { "Proto-Yukaghir", nil, "qfa-yuk", "Latinx", type = "reconstructed", } m["qwe-kch"] = { "Kichwa", 1740805, "qwe", "Latn", ancestors = "qu", } m["roa-ang"] = { "Angevin", 56782, "roa-oil", "Latn", sort_key = s["roa-oil-sortkey"], } m["roa-bbn"] = { "Bourbonnais-Berrichon", nil, "roa-oil", "Latn", sort_key = s["roa-oil-sortkey"], } m["roa-brg"] = { "Bourguignon", 508332, "roa-oil", "Latn", sort_key = s["roa-oil-sortkey"], } m["roa-cha"] = { "Champenois", 430018, "roa-oil", "Latn", sort_key = s["roa-oil-sortkey"], } m["roa-fcm"] = { "Franc-Comtois", 510561, "roa-oil", "Latn", sort_key = s["roa-oil-sortkey"], } m["roa-gal"] = { "Gallo", 37300, "roa-oil", "Latn", sort_key = s["roa-oil-sortkey"], } m["roa-leo"] = { "Leonese", 34108, "roa-ibe", "Latn", ancestors = "roa-ole", } m["roa-lor"] = { "Lorrain", 671198, "roa-oil", "Latn", sort_key = s["roa-oil-sortkey"], } m["roa-oan"] = { "Navarro-Aragonese", 2736184, "roa-ibe", "Latn", } m["roa-oca"] = { "Old Catalan", 15478520, "roa-ocr", "Latn", sort_key = { from = {"à", "[èé]", "[íï]", "[òó]", "[úü]", "ç", "·"}, to = {"a", "e", "i", "o", "u", "c"} }, } m["roa-ole"] = { "Old Leonese", nil, "roa-ibe", "Latn", } m["roa-opt"] = { "Old Galician-Portuguese", 1072111, "roa-ibe", "Latn", } m["roa-orl"] = { "Orléanais", nil, "roa-oil", "Latn", sort_key = s["roa-oil-sortkey"], } m["roa-poi"] = { "Poitevin-Saintongeais", 514123, "roa-oil", "Latn", sort_key = s["roa-oil-sortkey"], } m["roa-tar"] = { "Tarantino", 695526, "roa-itd", "Latn", ancestors = "nap", wikimedia_codes = "roa-tara", } m["roa-tou"] = { "Tourangeau", nil, "roa-oil", "Latn", sort_key = s["roa-oil-sortkey"], } m["sai-ajg"] = { "Ajagua", nil, nil, "Latn", } m["sai-all"] = { "Allentiac", 19570789, "sai-hrp", "Latn", } m["sai-and"] = { -- not to be confused with 'cbc' or 'ano' "Andoquero", 16828359, "sai-wit", "Latn", } m["sai-ayo"] = { "Ayomán", 16937754, "sai-jir", "Latn", } m["sai-bae"] = { "Baenan", 3401998, nil, "Latn", } m["sai-bag"] = { "Bagua", 5390321, nil, "Latn", } m["sai-bet"] = { "Betoi", 926551, "qfa-iso", "Latn", } m["sai-bor-pro"] = { "Proto-Boran", nil, "sai-bor", "Latn", } m["sai-cac"] = { "Cacán", 945482, nil, "Latn", } m["sai-caq"] = { "Caranqui", 2937753, "sai-bar", "Latn", } m["sai-car-pro"] = { "Proto-Cariban", nil, "sai-car", "Latinx", type = "reconstructed", } m["sai-cat"] = { "Catacao", 5051136, "sai-ctc", "Latinx", } m["sai-cer-pro"] = { "Proto-Cerrado", nil, "sai-cer", "Latn", type = "reconstructed", } m["sai-chi"] = { "Chirino", 5390321, nil, "Latn", } m["sai-chn"] = { "Chaná", 5072718, "sai-crn", "Latn", } m["sai-chp"] = { "Chapacura", 5072884, "sai-cpc", "Latn", } m["sai-chr"] = { "Charrua", 5086680, "sai-crn", "Latn", } m["sai-chu"] = { "Churuya", 5118339, "sai-guh", "Latn", } m["sai-cje-pro"] = { "Proto-Central Jê", nil, "sai-cje", "Latn", type = "reconstructed", } m["sai-cmg"] = { "Comechingon", 6644203, nil, "Latn", } m["sai-cno"] = { "Chono", 5104704, nil, "Latn", } m["sai-cnr"] = { "Cañari", 5055572, nil, "Latn", } m["sai-coe"] = { "Coeruna", 6425639, "sai-wit", "Latn", } m["sai-col"] = { "Colán", 5141893, "sai-ctc", "Latinx", } m["sai-cop"] = { "Copallén", 5390321, nil, "Latn", } m["sai-crd"] = { "Coroado Puri", 24191321, "sai-mje", "Latn", } m["sai-ctq"] = { "Catuquinaru", 16858455, nil, "Latn", } m["sai-cul"] = { "Culli", 2879660, nil, "Latn", } m["sai-cva"] = { "Cueva", nil, nil, "Latn", } m["sai-esm"] = { "Esmeralda", 3058083, nil, "Latn", } m["sai-ewa"] = { "Ewarhuyana", 16898104, nil, "Latn", } m["sai-gam"] = { "Gamela", 5403661, nil, "Latn", } m["sai-gay"] = { "Gayón", 5528902, "sai-jir", "Latn", } m["sai-gmo"] = { "Guamo", 5613495, nil, "Latn", } m["sai-gue"] = { "Güenoa", 5626799, "sai-crn", "Latn", } m["sai-hau"] = { "Haush", 3128376, "sai-cho", "Latn", } m["sai-hoc-pro"] = { "Proto-Huitoto-Ocaina", nil, "sai-hoc", "Latn", type = "reconstructed", } m["sai-jee-pro"] = { "Proto-Jê", nil, "sai-jee", "Latn", type = "reconstructed", } m["sai-jko"] = { "Jeikó", 6176527, "sai-mje", "Latn", } m["sai-jrj"] = { "Jirajara", 6202966, "sai-jir", "Latn", } m["sai-kat"] = { -- contrast xoo, kzw, sai-xoc "Katembri", 6375925, nil, "Latn", } m["sai-mal"] = { "Malalí", 6741212, nil, "Latn", } m["sai-mar"] = { "Maratino", 6755055, nil, "Latn", } m["sai-mat"] = { "Matanawi", 6786047, nil, "Latn", } m["sai-mcn"] = { "Mocana", 3402048, nil, "Latn", } m["sai-men"] = { "Menien", 16890110, "sai-mje", "Latn", } m["sai-mil"] = { "Millcayac", 19573012, "sai-hrp", "Latn", } m["sai-mlb"] = { "Malibu", 3402048, nil, "Latn", } m["sai-msk"] = { "Masakará", 6782426, "sai-mje", "Latn", } m["sai-muc"] = { "Mucuchí", nil, nil, "Latn", } m["sai-mue"] = { "Muellama", 16886936, "sai-bar", "Latn", } m["sai-muz"] = { "Muzo", 6644203, nil, "Latn", } m["sai-mys"] = { "Maynas", 16919393, nil, "Latn", } m["sai-nat"] = { "Natú", 9006749, nil, "Latn", } m["sai-nje-pro"] = { "Proto-Northern Jê", nil, "sai-nje", "Latn", type = "reconstructed", } m["sai-opo"] = { "Opón", 7099152, "sai-car", "Latn", } m["sai-oto"] = { "Otomaco", 16879234, "sai-otm", "Latn", } m["sai-pal"] = { "Palta", 3042978, nil, "Latn", } m["sai-pam"] = { "Pamigua", 5908689, "sai-otm", "Latn", } m["sai-par"] = { "Paratió", 16890038, nil, "Latn", } m["sai-pnz"] = { "Panzaleo", 3123275, nil, "Latn", } m["sai-prh"] = { "Puruhá", 3410994, nil, "Latn", } m["sai-ptg"] = { "Patagón", nil, nil, "Latn", } m["sai-pur"] = { "Purukotó", 7261622, "sai-pem", "Latn", } m["sai-pyg"] = { "Payaguá", 7156643, "sai-guc", "Latn", } m["sai-pyk"] = { "Pykobjê", 98113977, "sai-nje", "Latn", } m["sai-qmb"] = { "Quimbaya", 7272043, nil, "Latn", } m["sai-qtm"] = { "Quitemo", 7272651, "sai-cpc", "Latn", } m["sai-rab"] = { "Rabona", 6644203, nil, "Latn", } m["sai-ram"] = { "Ramanos", 16902824, nil, "Latn", } m["sai-sac"] = { "Sácata", 5390321, nil, "Latn", } m["sai-san"] = { "Sanaviron", 16895999, nil, "Latn", } m["sai-sap"] = { "Sapará", 7420922, "sai-car", "Latn", } m["sai-sec"] = { "Sechura", 7442912, nil, "Latn", } m["sai-sin"] = { "Sinúfana", 7525275, nil, "Latn", } m["sai-sje-pro"] = { "Proto-Southern Jê", nil, "sai-sje", "Latn", type = "reconstructed", } m["sai-tab"] = { "Tabancale", 5390321, nil, "Latn", } m["sai-tal"] = { "Tallán", 16910468, nil, "Latn", } m["sai-tap"] = { "Tapayuna", nil, "sai-nje", "Latn", } m["sai-tar-pro"] = { "Proto-Taranoan", nil, "sai-tar", "Latinx", type = "reconstructed", } m["sai-teu"] = { "Teushen", 3519243, nil, "Latn", } m["sai-tim"] = { "Timote", nil, nil, "Latn", } m["sai-tpr"] = { "Taparita", 7684460, "sai-otm", "Latn", } m["sai-trr"] = { "Tarairiú", 7685313, nil, "Latn", } m["sai-wai"] = { "Waitaká", 16918610, nil, "Latn", } m["sai-way"] = { "Wayumará", nil, "sai-car", "Latn", } m["sai-wit-pro"] = { "Proto-Witotoan", nil, "sai-wit", "Latn", type = "reconstructed", } m["sai-wnm"] = { "Wanham", 16879440, "sai-cpc", "Latn", } m["sai-xoc"] = { -- contrast xoo, kzw, sai-kat "Xocó", 12953620, nil, "Latn", } m["sai-yao"] = { "Yao (South America)", nil, "sai-ven", "Latn", } m["sai-yar"] = { -- not the same family as 'suy' "Yarumá", 3505859, "sai-pek", "Latn", } m["sai-yri"] = { "Yuri", nil, "sai-tyu", "Latn", } m["sai-yup"] = { "Yupua", 8061430, "sai-tuc", "Latn", } m["sai-yur"] = { "Yurumanguí", 1281291, nil, "Latn", } m["sal-pro"] = { "Proto-Salish", nil, "sal", "Latn", type = "reconstructed", } m["sdv-daj-pro"] = { "Proto-Daju", nil, "sdv-daj", "Latn", type = "reconstructed", } m["sdv-eje-pro"] = { "Proto-Eastern Jebel", nil, "sdv-eje", "Latn", type = "reconstructed", } m["sdv-nil-pro"] = { "Proto-Nilotic", nil, "sdv-nil", "Latn", type = "reconstructed", } m["sdv-nyi-pro"] = { "Proto-Nyima", nil, "sdv-nyi", "Latn", type = "reconstructed", } m["sdv-tmn-pro"] = { "Proto-Taman", nil, "sdv-tmn", "Latn", type = "reconstructed", } m["sel-nor"] = { "Northern Selkup", 30304565, "sel", "Cyrl", } m["sel-pro"] = { "Proto-Selkup", nil, "sel", "Latn", type = "reconstructed", } m["sel-sou"] = { "Southern Selkup", 30304639, "sel", "Cyrl", } m["sem-amm"] = { "Ammonite", 279181, "sem-can", "Phnx", translit = "Phnx-translit", } m["sem-amo"] = { "Amorite", 35941, "sem-nwe", "Xsux, Latn", } m["sem-cha"] = { "Chaha", nil, "sem-eth", "Ethi", translit = "Ethi-translit", ancestors = "sem-pro", } m["sem-dad"] = { "Dadanitic", 21838040, "sem-cen", "Narb", translit = "Narb-translit", } m["sem-dum"] = { "Dumaitic", nil, "sem-cen", "Narb", translit = "Narb-translit", } m["sem-has"] = { "Hasaitic", 3541433, "sem-cen", "Narb", translit = "Narb-translit", } m["sem-him"] = { "Himyaritic", 35604, "sem", "Arab, Sarb", } m["sem-his"] = { "Hismaic", 22948260, "sem-cen", "Narb", translit = "Narb-translit", } m["sem-mhr"] = { "Muher", 33743, "sem-eth", "Latn", } m["sem-pro"] = { "Proto-Semitic", 1658554, "sem", "Latinx", type = "reconstructed", } m["sem-saf"] = { "Safaitic", 472586, "sem-cen", "Narb", translit = "Narb-translit", } m["sem-srb"] = { "Old South Arabian", 35025, "sem-osa", "Sarb", translit = "Sarb-translit", } m["sem-tay"] = { "Taymanitic", 24912301, "sem-cen", "Narb", translit = "Narb-translit", } m["sem-tha"] = { "Thamudic", 843030, "sem-cen", "Narb", translit = "Narb-translit", } m["sem-wes-pro"] = { "Proto-West Semitic", 98021726, "sem-wes", "Latinx", type = "reconstructed", } m["sio-pro"] = { -- NB this is not Proto-Siouan-Catawban 'nai-sca-pro' "Proto-Siouan", 34181, "sio", "Latinx", type = "reconstructed", } m["sit-bok"] = { "Bokar", 4938727, "sit-tan", "Latn, Tibt", translit = {Tibt = "Tibt-translit"}, override_translit = true, display_text = {Tibt = s["Tibt-displaytext"]}, entry_name = {Tibt = s["Tibt-entryname"]}, sort_key = {Tibt = "Tibt-sortkey"}, } m["sit-cha"] = { "Chairel", 5068066, "sit-luu", "Latn", } m["sit-gkh"] = { "Gokhy", 5578069, "tbq-lol", "Latn", } m["sit-hrs-pro"] = { "Proto-Hrusish", nil, "sit-hrs", type = "reconstructed", } m["sit-jap"] = { "Japhug", 3162245, "sit-rgy", "Latn", } m["sit-kha-pro"] = { "Proto-Kham", nil, "sit-kha", type = "reconstructed", } m["sit-liz"] = { "Lizu", 6660653, "sit-qia", "Latn", -- and Ersu Shaba } m["sit-luu-pro"] = { "Proto-Luish", nil, "sit-luu", type = "reconstructed", } m["sit-mor"] = { "Moran", 6909216, "tbq-bdg", "Latn", } m["sit-prn"] = { "Puiron", 7259048, "sit-zem", } m["sit-pro"] = { "Proto-Sino-Tibetan", 45961, "sit", "Latn", type = "reconstructed", } m["sit-sit"] = { "Situ", 19840830, "sit-rgy", "Latn", } m["sit-tan-pro"] = { "Proto-Tani", nil, "sit-tan", "Latn", -- needs verification type = "reconstructed", } m["sit-tgm"] = { "Tangam", 17041370, "sit-tan", "Latn", } m["sit-tos"] = { "Tosu", 7827899, "sit-qia", "Latn", -- also Ersu Shaba } m["sit-tsh"] = { "Tshobdun", 19840950, "sit-rgy", "Latn", } m["sit-zbu"] = { "Zbu", 19841106, "sit-rgy", "Latn", } m["sla-pro"] = { "Proto-Slavic", 747537, "sla", "Latinx", type = "reconstructed", entry_name = { remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve, remove_exceptions = {'ś'}, }, sort_key = { from = {"č", "ď", "ě", "ę", "ь", "ľ", "ň", "ǫ", "ř", "š", "ś", "ť", "ъ", "ž"}, to = {"c²", "d²", "e²", "e³", "i²", "l²", "nj", "o²", "r²", "s²", "s³", "t²", "u²", "z²"}, } } m["smi-pro"] = { "Proto-Samic", 7251862, "smi", "Latn", type = "reconstructed", sort_key = { from = {"ā", "č", "δ", "[ëē]", "ŋ", "ń", "ō", "š", "θ", "%([^()]+%)"}, to = {"a", "c²", "d", "e", "n²", "n³", "o", "s²", "t²"} }, } m["son-pro"] = { "Proto-Songhay", nil, "son", "Latinx", type = "reconstructed", } m["sqj-pro"] = { "Proto-Albanian", 18210846, "sqj", "Latinx", type = "reconstructed", } m["ssa-klk-pro"] = { "Proto-Kuliak", nil, "ssa-klk", "Latinx", type = "reconstructed", } m["ssa-kom-pro"] = { "Proto-Koman", nil, "ssa-kom", "Latinx", type = "reconstructed", } m["ssa-pro"] = { "Proto-Nilo-Saharan", nil, "ssa", "Latinx", type = "reconstructed", } m["syd-fne"] = { "Forest Nenets", 1295107, "syd", "Cyrl", translit = "syd-fne-translit", entry_name = {remove_diacritics = c.grave .. c.acute .. c.macron .. c.breve .. c.dotabove}, } m["syd-pro"] = { "Proto-Samoyedic", 7251863, "syd", "Latn", type = "reconstructed", } m["tai-pro"] = { "Proto-Tai", 6583709, "tai", "Latinx", type = "reconstructed", } m["tai-swe-pro"] = { "Proto-Southwestern Tai", nil, "tai-swe", "Latinx", type = "reconstructed", } m["tbq-bdg-pro"] = { "Proto-Bodo-Garo", nil, "tbq-bdg", "Latinx", type = "reconstructed", } m["tbq-kuk-pro"] = { "Proto-Kuki-Chin", nil, "tbq-kuk", "Latinx", type = "reconstructed", } m["tbq-lal-pro"] = { "Proto-Lalo", nil, "tbq-lol", "Latinx", type = "reconstructed", } m["tbq-laz"] = { "Laze", 17007626, "sit-nax", } m["tbq-lob-pro"] = { "Proto-Lolo-Burmese", nil, "tbq-lob", "Latinx", type = "reconstructed", } m["tbq-lol-pro"] = { "Proto-Loloish", 7251855, "tbq-lol", "Latinx", type = "reconstructed", } m["tbq-ngo"] = { "Ngochang", nil, "tbq-brm", "Latn", } m["tbq-plg"] = { "Pai-lang", 2879843, "tbq-lob", "Hani, Latinx", sort_key = {Hani = "Hani-sortkey"}, } -- tbq-pro is now etymology-only m["trk-dkh"] = { "Dukhan", nil, "trk-sib", "Latn, Cyrl, Mong", translit = {Mong = "Mong-translit"}, display_text = {Mong = s["Mong-displaytext"]}, entry_name = {Mong = s["Mong-entryname"]}, } m["trk-oat"] = { "Old Anatolian Turkish", 7083390, "trk-ogz", "ota-Arab", ancestors = "trk-ogz-pro", entry_name = {["ota-Arab"] = "ar-entryname"}, } m["trk-pro"] = { "Proto-Turkic", 3657773, "trk", "Latinx", type = "reconstructed", } m["tup-gua-pro"] = { "Proto-Tupi-Guarani", nil, "tup-gua", "Latinx", type = "reconstructed", } m["tup-kab"] = { "Kabishiana", 15302988, "tup", "Latn", } m["tup-pro"] = { "Proto-Tupian", 10354700, "tup", "Latinx", type = "reconstructed", } m["tuw-pro"] = { "Proto-Tungusic", nil, "tuw", "Latinx", type = "reconstructed", } m["tuw-kkl"] = { "Kyakala", nil, "tuw", "Latn, Hani", sort_key = {Hani = "Hani-sortkey"}, } m["tuw-sol"] = { "Solon", 30004, "tuw", } m["und-isa"] = { "Isaurian", 16956868, nil, -- "Xsux, Hluw, Latn", } m["und-kas"] = { "Kassite", 35612, nil, "Xsux", } m["und-mil"] = { "Milang", 6850761, nil, "Deva, Latn", } m["und-mmd"] = { "Mimi of Decorse", 6862206, nil, "Latn", } m["und-mmn"] = { "Mimi of Nachtigal", 6862207, nil, "Latn", } m["und-phi"] = { "Philistine", 2230924, nil, "Phnx", } m["und-wji"] = { "Western Jicaque", 3178610, "hok", "Latn", } m["urj-fin-pro"] = { "Proto-Finnic", 11883720, "urj-fin", "Latn", type = "reconstructed", } m["urj-koo"] = { "Old Komi", nil, "urj-prm", "Perm, Cyrs", translit = "urj-koo-translit", sort_key = {Cyrs = s["Cyrs-sortkey"]}, } m["urj-kuk"] = { "Kukkuzi", 107410460, "urj-fin", "Latn", ancestors = "vot", } m["urj-kya"] = { "Komi-Yazva", 2365210, "urj-prm", "Cyrl", translit = "kv-translit", override_translit = true, entry_name = {remove_diacritics = c.acute}, } m["urj-mdv-pro"] = { "Proto-Mordvinic", nil, "urj-mdv", "Latn", type = "reconstructed", } m["urj-prm-pro"] = { "Proto-Permic", nil, "urj-prm", "Latn", type = "reconstructed", } m["urj-pro"] = { "Proto-Uralic", 288765, "urj", "Latinx", type = "reconstructed", } m["urj-ugr-pro"] = { "Proto-Ugric", 156631, "urj-ugr", "Latinx", type = "reconstructed", } m["xnd-pro"] = { "Proto-Na-Dene", nil, "xnd", "Latinx", type = "reconstructed", } m["xgn-mgr"] = { "Mangghuer", 34214, "mjg", "Latn", -- also Mong, Cyrl ? } m["xgn-mgl"] = { "Mongghul", 34214, "mjg", "Latn", -- also Mong, Cyrl ? } m["xgn-pro"] = { "Proto-Mongolic", 2493677, "xgn", "Latinx", type = "reconstructed", } m["xgn-rou"] = { "Rouran", 48816637, "xgn", "Hani, Latinx", sort_key = {Hani = "Hani-sortkey"}, } m["ypk-pro"] = { "Proto-Yupik", nil, "ypk", "Latinx", type = "reconstructed", } m["zhx-min-pro"] = { "Proto-Min", 19646347, "zhx-min", "Latinx", type = "reconstructed", } m["zhx-sht"] = { "Shaozhou Tuhua", 1920769, "zhx", "Nshu, Hani, Hant, Hans", generate_forms = "zh-generateforms", sort_key = {Hani = "Hani-sortkey"}, } m["zhx-tai"] = { "Taishanese", 2208940, "zhx", "Hani, Hant, Hans", ancestors = "yue", generate_forms = "zh-generateforms", translit = "zh-translit", sort_key = "Hani-sortkey", } m["zhx-teo"] = { "Teochew", 36759, "zhx-min-hai", "Hani, Hant, Hans", ancestors = "nan", generate_forms = "zh-generateforms", sort_key = "Hani-sortkey", } m["zle-ono"] = { "Old Novgorodian", 162013, "zle", "Cyrs, Glag", translit = "Cyrs-Glag-translit", entry_name = {Cyrs = s["Cyrs-entryname"]}, sort_key = {Cyrs = s["Cyrs-sortkey"]}, } m["zle-ort"] = { "Old Ruthenian", 13211, "zle", "Cyrs", ancestors = "orv", translit = "zle-ort-translit", entry_name = { remove_diacritics = s["Cyrs-entryname"].remove_diacritics, remove_exceptions = {"Ї", "ї"} }, sort_key = s["Cyrs-sortkey"], } m["zlw-ocs"] = { "Old Czech", 593096, "zlw", "Latn", } m["zlw-opl"] = { "Old Polish", 149838, "zlw-lch", "Latn", entry_name = {remove_diacritics = c.ringabove}, } m["zlw-pom-pro"] = { "Proto-Pomeranian", 149588, "zlw-pom", "Latn", type = "reconstructed", } m["zlw-slv"] = { "Slovincian", 36822, "zlw-pom", "Latn", ancestors = "zlw-pom-pro", entry_name = "zlw-slv-entryname" } return require("Module:languages").addDefaultTypes(m, true) f8oe0rberjpfh27o9tgp1kegnncqvi9 मॉड्यूल:scripts/by name 828 304773 487550 477921 2026-09-01T15:14:28Z SM7 6218 असमिया 487550 Scribunto text/plain return { ["Adlam"] = "Adlm", ["Afaka"] = "Afak", ["Ahom"] = "Ahom", ["Anatolian Hieroglyphs"] = "Hluw", ["Arabic"] = "Arab", ["Armenian"] = "Armn", ["असमिया"] = "as-Beng", ["Avestan"] = "Avst", ["Balinese"] = "Bali", ["Bamum"] = "Bamu", ["Bassa"] = "Bass", ["Batak"] = "Batk", ["Baybayin"] = "Tglg", ["Bengali"] = "Beng", ["Bhaiksuki"] = "Bhks", ["Blissymbols"] = "Blis", ["Book Pahlavi"] = "Phlv", ["Brahmi"] = "Brah", ["Braille"] = "Brai", ["Buginese"] = "Bugi", ["Buhid"] = "Buhd", ["Burmese"] = "Mymr", ["Canadian syllabics"] = "Cans", ["Carian"] = "Cari", ["Caucasian Albanian"] = "Aghb", ["Chakma"] = "Cakm", ["Cham"] = "Cham", ["Cherokee"] = "Cher", ["Chorasmian"] = "Chrs", ["Clear Script"] = "xwo-Mong", ["Coptic"] = "Copt", ["Cuneiform"] = "Xsux", ["Cypriot"] = "Cprt", ["Cypro-Minoan"] = "Cpmn", ["Cyrillic"] = "Cyrl", ["Demotic"] = "Egyd", ["Deseret"] = "Dsrt", ["देवनागरी"] = "Deva", ["Dhives Akuru"] = "Diak", ["Dogra"] = "Dogr", ["Dongba"] = "Nkdb", ["Duployan"] = "Dupl", ["Egyptian hieroglyphic"] = "Egyp", ["Elbasan"] = "Elba", ["Elymaic"] = "Elym", ["Ethiopic"] = "Ethi", ["Fraktur"] = "Latf", ["Gaelic"] = "Latg", ["Geba"] = "Nkgb", ["Georgian"] = "Geor", ["Glagolitic"] = "Glag", ["Gothic"] = "Goth", ["Grantha"] = "Gran", ["Greek"] = "Grek", ["Gujarati"] = "Gujr", ["Gunjala Gondi"] = "Gong", ["Gurmukhi"] = "Guru", ["Han"] = "Hani", ["Hangul"] = "Hang", ["Hanifi Rohingya"] = "Rohg", ["Hanunoo"] = "Hano", ["Hatran"] = "Hatr", ["Hebrew"] = "Hebr", ["Hieratic"] = "Egyh", ["Hiragana"] = "Hira", ["Iberian"] = "Ibrn", ["Image-rendered"] = "Imag", ["Imperial Aramaic"] = "Armi", ["Indus"] = "Inds", ["Inscriptional Pahlavi"] = "Phli", ["Inscriptional Parthian"] = "Prti", ["International Phonetic Alphabet"] = "IPAchar", ["Japanese"] = "Jpan", ["Javanese"] = "Java", ["Jurchen"] = "Jurc", ["Kaithi"] = "Kthi", ["Kannada"] = "Knda", ["Katakana"] = "Kana", ["Kawi"] = "Kawi", ["Kayah Li"] = "Kali", ["Kharoshthi"] = "Khar", ["Khitan Large"] = "Kitl", ["Khitan Small"] = "Kits", ["Khmer"] = "Khmr", ["Khojki"] = "Khoj", ["Khudawadi"] = "Sind", ["Khutsuri"] = "Geok", ["Korean"] = "Kore", ["Kpelle"] = "Kpel", ["Lao"] = "Laoo", ["Latin"] = "Latn", ["Leke"] = "Leke", ["Lepcha"] = "Lepc", ["Limbu"] = "Limb", ["Linear A"] = "Lina", ["Linear B"] = "Linb", ["Lisu"] = "Lisu", ["Loma"] = "Loma", ["Lontara"] = "Maka", ["Lycian"] = "Lyci", ["Lydian"] = "Lydi", ["Mahajani"] = "Mahj", ["Malayalam"] = "Mlym", ["Manchu"] = "mnc-Mong", ["Mandaic"] = "Mand", ["Manichaean"] = "Mani", ["Marchen"] = "Marc", ["Masaram Gondi"] = "Gonm", ["Maya"] = "Maya", ["Medefaidrin"] = "Medf", ["Meitei Mayek"] = "Mtei", ["Mende"] = "Mend", ["Meroitic cursive"] = "Merc", ["Meroitic hieroglyphic"] = "Mero", ["Modi"] = "Modi", ["Mongolian"] = "Mong", ["Moon"] = "Moon", ["Morse code"] = "Morse", ["Mro"] = "Mroo", ["Multani"] = "Mult", ["Musical notation"] = "musical", ["N'Ko"] = "Nkoo", ["Nabataean"] = "Nbat", ["Nag Mundari"] = "Nagm", ["Nandinagari"] = "Nand", ["New Tai Lue"] = "Talu", ["Newa"] = "Newa", ["Nüshu"] = "Nshu", ["Nyiakeng Puachue Hmong"] = "Hmnp", ["Ogham"] = "Ogam", ["Ol Chiki"] = "Olck", ["Old Cyrillic"] = "Cyrs", ["Old Hungarian"] = "Hung", ["Old Italic"] = "Ital", ["Old North Arabian"] = "Narb", ["Old Permic"] = "Perm", ["Old Persian"] = "Xpeo", ["Old Sogdian"] = "Sogo", ["Old South Arabian"] = "Sarb", ["Old Uyghur"] = "Ougr", ["Oriya"] = "Orya", ["Orkhon runes"] = "Orkh", ["Osage"] = "Osge", ["Osmanya"] = "Osma", ["Pahawh Hmong"] = "Hmng", ["Palmyrene"] = "Palm", ["Pau Cin Hau"] = "Pauc", ["Pazend"] = "pal-Avst", ["Phags-pa"] = "Phag", ["Phoenician"] = "Phnx", ["Pollard"] = "Plrd", ["Psalter Pahlavi"] = "Phlp", ["Ranjana"] = "Ranj", ["Rejang"] = "Rjng", ["Rongorongo"] = "Roro", ["Rumi numerals"] = "Ruminumerals", ["Runic"] = "Runr", ["Samaritan"] = "Samr", ["Saurashtra"] = "Saur", ["Shahmukhi"] = "pa-Arab", ["Sharada"] = "Shrd", ["Shavian"] = "Shaw", ["Siddham"] = "Sidd", ["SignWriting"] = "Sgnw", ["Simplified Han"] = "Hans", ["Sinhalese"] = "Sinh", ["Sogdian"] = "Sogd", ["Sorang Sompeng"] = "Sora", ["Soyombo"] = "Soyo", ["Sui"] = "Shui", ["Sundanese"] = "Sund", ["Syloti Nagri"] = "Sylo", ["Syriac"] = "Syrc", ["Tagbanwa"] = "Tagb", ["Tai Nüa"] = "Tale", ["Tai Tham"] = "Lana", ["Tai Viet"] = "Tavt", ["Takri"] = "Takr", ["Tamil"] = "Taml", ["Tamyig"] = "sit-tam-Tibt", ["Tangsa"] = "Tnsa", ["Tangut"] = "Tang", ["Telugu"] = "Telu", ["Tengwar"] = "Teng", ["Thaana"] = "Thaa", ["Thai"] = "Thai", ["Tibetan"] = "Tibt", ["Tifinagh"] = "Tfng", ["Tirhuta"] = "Tirh", ["Toto"] = "Toto", ["Traditional Han"] = "Hant", ["Ugaritic"] = "Ugar", ["Unspecified"] = "None", ["Vai"] = "Vaii", ["Varang Kshiti"] = "Wara", ["Visible Speech"] = "Visp", ["Vithkuqi"] = "Vith", ["Wancho"] = "Wcho", ["Woleai"] = "Wole", ["Xibe"] = "sjo-Mong", ["Yezidi"] = "Yezi", ["Yi"] = "Yiii", ["Zanabazar Square"] = "Zanb", ["Zhang-Zhung"] = "xzh-Tibt", ["Zhuyin"] = "Bopo", ["flag semaphore"] = "Semap", ["mathematical notation"] = "Zmth", ["symbol"] = "Zsym", ["uncoded"] = "Zzzz", ["undetermined"] = "Zyyy", } -- To update, go to [[Module:scripts/print]]. gny2j9azrz60p7eeovyz5nofs2r2lgz मॉड्यूल:labels/data/lang/hi 828 304943 487563 479146 2026-09-01T16:07:57Z SM7 6218 अनुवाद 487563 Scribunto text/plain local labels = {} local function alias(a, b) for _, v in ipairs(b) do labels[v] = a end end -- allows aliases to be entered as a list labels["बंबइया हिंदी"] = { Wikipedia = "बंबइया हिंदी", plain_categories = {"बंबइया हिंदी"}, } alias("बंबइया हिंदी", {"बांबे", "मुंबई", "बंबइया", "बम्बइया हिन्दी", "मुंबइया हिंदी"}) labels["ब्रज भाषा"] = { display = "ब्रज भाषा", Wikipedia = "ब्रज भाषा", plain_categories = {"ब्रज भाषा"}, } alias("ब्रज भाषा", {"ब्रज", "ब्रज भाषा", "बृज भाषा", "ब्रजी", "ब्रज भासा", "ब्रज बोली"}) labels["हरियाणवी"] = { display = "हरियाणवी", Wikipedia = "हरियाणवी भाषा", plain_categories = {"हरियाणवी"}, } alias("हरियाणवी", {"हरियाणवी", "हरियाणा"}) labels["बिहार"] = { display ="बिहार", Wikipedia = "बिहारी हिंदी", plain_categories = {"बिहारी हिंदी"}, } return labels d8fpt478cuc3n3rds0e4k9arfkd6kay 487564 487563 2026-09-01T16:08:13Z SM7 6218 "[[मॉड्यूल:labels/data/lang/hi]]" सुरक्षित किया ([सम्पादन=केवल प्रबंधक अनुमत] (हमेशा) [स्थानांतरण=केवल प्रबंधक अनुमत] (हमेशा)) 487563 Scribunto text/plain local labels = {} local function alias(a, b) for _, v in ipairs(b) do labels[v] = a end end -- allows aliases to be entered as a list labels["बंबइया हिंदी"] = { Wikipedia = "बंबइया हिंदी", plain_categories = {"बंबइया हिंदी"}, } alias("बंबइया हिंदी", {"बांबे", "मुंबई", "बंबइया", "बम्बइया हिन्दी", "मुंबइया हिंदी"}) labels["ब्रज भाषा"] = { display = "ब्रज भाषा", Wikipedia = "ब्रज भाषा", plain_categories = {"ब्रज भाषा"}, } alias("ब्रज भाषा", {"ब्रज", "ब्रज भाषा", "बृज भाषा", "ब्रजी", "ब्रज भासा", "ब्रज बोली"}) labels["हरियाणवी"] = { display = "हरियाणवी", Wikipedia = "हरियाणवी भाषा", plain_categories = {"हरियाणवी"}, } alias("हरियाणवी", {"हरियाणवी", "हरियाणा"}) labels["बिहार"] = { display ="बिहार", Wikipedia = "बिहारी हिंदी", plain_categories = {"बिहारी हिंदी"}, } return labels d8fpt478cuc3n3rds0e4k9arfkd6kay साँचा:borrowed 10 304946 487666 479221 2026-09-01T20:50:39Z SM7 6218 updating... 487666 wikitext text/x-wiki <includeonly>{{#invoke:etymology/templates|borrowed}}</includeonly><noinclude>{{bor|und|und|term}}{{documentation}}</noinclude> fbvj70ebedv4eun4d2995lgurplzevs मॉड्यूल:root 828 305065 487661 480037 2026-09-01T20:34:57Z SM7 6218 updating... 487661 Scribunto text/plain local export = {} local force_cat = false -- for debugging local M = require("Module:module loader").init({ require = { str_utils = "Module:string utilities", utilities = "Module:utilities", links = "Module:links", headword = "Module:headword", languages = "Module:languages", parameters = "Module:parameters", inflection_table = "Module:inflection-table", }, loadData = { radicals = "Module:roots/data/radicals", }, lazy = { concat = function() return table.concat end, insert = function() return table.insert end, }, }) local UI_STRINGS = { no_langcode = "Please provide a language code.", invalid_langcode = "Invalid language code: %s", not_a_table = "rootTable is not a table", min_radicals = "Root must have at least %s %s.", max_radicals = "Root must have at most %s %s.", unrecognized_pos = "Unrecognized %s radical %s in %s", unrecognized_mem = "Unrecognized radical %s in %s", not_single_letter = "'%s' in the root '%s' should be a single letter.", invalid_validation = "Unknown validation model: %s", only_one_root = "There should be only one root.", bad_root = "Invalid %s root '%s': %s", wrong_separator = "Radicals should be separated by '%s'.", root_vs_pagename = "Root is different from the pagename.", move_to_appendix = "The root page should be in the Appendix namespace. Please move it to : [[%s]]", appendix_subpage = "Appendix:%s roots/", root_category = "%s terms belonging to the root %s%s", derived_category = "%s terms derived from the %s root %s%s", derived_language = "%s terms derived from %s", root_heading = "\n! [[w:%s|%s]]", sense_wrapper = "&lrm; <span class=\"gloss-content\">(%s)</span>", article_semitic = "Semitic root", article_generic = "Root (linguistics)", } local DEFAULT_LINK_TARGET = "bare" local DEFAULT_HEADWORD = {} local function split_root(root, separator) if not separator then return { root } end return mw.text.split(root, separator, true) end local function radicals_word(count) return count == 1 and "radical" or "radicals" end function export.get_data_module_name(langcode) return "Module:roots/data/" .. langcode end local function try_load_data(langcode) local ok, data = pcall(mw.loadData, export.get_data_module_name(langcode)) if ok then return data end return nil end function export.get_data(langcode) return try_load_data(langcode) end local function get_lang_and_data(frame) local code = frame.args["lang"] if not code or code == "" then error(UI_STRINGS.no_langcode) end local lang = M.languages.getByCode(code) if not lang then error(UI_STRINGS.invalid_langcode:format(code)) end return lang, try_load_data(code) or {} end local function resolve_radicals(data) if data.validation == "positional" or data.radicals then return data.radicals end if data.shared_radicals then return M.radicals[data.shared_radicals] end return nil end local function transliterate_root(root_string, romanization) if not romanization then return nil end local out = root_string for _, pair in ipairs(romanization) do out = M.str_utils.gsub(out, pair[1], pair[2]) end return out end export.transliterate = transliterate_root local function validate_root(rootTable, joined_root, data, radical_set) if type(rootTable) ~= "table" then return nil, UI_STRINGS.not_a_table end local len = #rootTable if data.min_radicals and len < data.min_radicals then return nil, UI_STRINGS.min_radicals:format(data.min_radicals, radicals_word(data.min_radicals)) end if data.max_radicals and len > data.max_radicals then return nil, UI_STRINGS.max_radicals:format(data.max_radicals, radicals_word(data.max_radicals)) end if data.validation == "positional" then for i, radical in ipairs(rootTable) do local set, label if i == 1 then set, label = radical_set.initial, "initial" elseif i == len then set, label = radical_set.final, "final" else set, label = radical_set.medial, "medial" end if not set[radical] then return nil, UI_STRINGS.unrecognized_pos:format(label, radical, joined_root) end end elseif data.validation == "membership" then for _, radical in ipairs(rootTable) do if not radical_set[radical] then return nil, UI_STRINGS.unrecognized_mem:format(radical, joined_root) end end elseif data.validation == "single_letter" then for _, radical in ipairs(rootTable) do if mw.ustring.len(radical) ~= 1 then return nil, UI_STRINGS.not_single_letter:format(radical, joined_root) end end elseif data.validation ~= nil then return nil, UI_STRINGS.invalid_validation:format(tostring(data.validation)) end return true end local function link(term, alt, translit, id, lang) if term == "" or term == "&mdash;" then return term end return M.links.full_link({ term = term, alt = alt ~= term and alt or nil, tr = translit, lang = lang, id = id, }) end local function root_category(lang, source, root, qualifier) local suffix = (qualifier and qualifier ~= "") and (" (" .. qualifier .. ")") or "" if lang:getCode() == source:getCode() then return UI_STRINGS.root_category:format(lang:getFullName(), root, suffix) end return UI_STRINGS.derived_category:format( lang:getFullName(), source:getCanonicalName(), root, suffix) end local function check_root(source, root) local data = try_load_data(source:getCode()) if not data then return true end local bare = (root:gsub("^%*", "")) local radicals = split_root(bare, data.separator) if data.separator and #radicals == 1 and mw.ustring.len(bare) > 1 then return nil, UI_STRINGS.wrong_separator:format(data.separator) end return validate_root(radicals, bare, data, resolve_radicals(data)) end function export.assert_root(source, root) local ok, err = check_root(source, root) if not ok then error(UI_STRINGS.bad_root:format(source:getCanonicalName(), root, err)) end return true end function export.get_categories(lang, source, roots, ids) local categories = {} ids = ids or {} if lang:getCode() ~= source:getCode() then M.insert(categories, UI_STRINGS.derived_language:format(lang:getFullName(), source:getCanonicalName())) end for index, root in ipairs(roots) do M.insert(categories, root_category(lang, source, root, ids[index])) export.assert_root(source, root) end return categories end function export.categorize(lang, source, roots, ids, sort_key) return M.utilities.format_categories( export.get_categories(lang, source, roots, ids), lang, sort_key, nil, force_cat) end function export.show(frame) local params = { [1] = { required = true, type = "language" }, [2] = { required = true, type = "language" }, [3] = { required = true, list = true }, ["id"] = { list = true, allow_holes = true }, ["sort"] = {}, } local args = M.parameters.process(frame:getParent().args, params) return export.categorize(args[1], args[2], args[3], args.id, args.sort) end function export.root(frame) local lang, data = get_lang_and_data(frame) local radical_set = resolve_radicals(data) local link_target = data.link_target or DEFAULT_LINK_TARGET local output = {} local categories = {} local title = mw.title.getCurrentTitle() local namespace = title.nsText local params = { [1] = { list = true }, ["nocat"] = { type = "boolean" }, ["plain"] = { type = "boolean" }, ["notext"] = { type = "boolean" }, ["sense"] = {}, } if link_target == "bare" then params["head"] = true params["pagename"] = true end local args = M.parameters.process(frame:getParent().args, params) local roots = args[1] local roots_len = #roots local plain = args["plain"] if frame.args["plain"] then plain = true end local separator = data.separator local identity local subpage = "" if link_target == "appendix_subpage" then subpage = UI_STRINGS.appendix_subpage:format(lang:getCanonicalName()) local fulltitle = title.fullText fulltitle = M.str_utils.gsub(fulltitle, M.str_utils.gsub(subpage, "([^%w])", "%%%1"), "") identity = fulltitle else identity = args["pagename"] or mw.loadData("Module:headword/data").pagename end local rootLetters = {} if roots_len == 0 and not args["pagename"] and namespace == "साँचा" and data.preview_root then M.insert(rootLetters, split_root(data.preview_root, separator)) elseif roots_len ~= 0 then for _, root in ipairs(roots) do M.insert(rootLetters, split_root(root, separator)) end else if link_target == "bare" then local head = frame.args["head"] if args["head"] ~= nil and identity ~= lang:stripDiacritics(args["head"]) then error(UI_STRINGS.root_vs_pagename) end if head and args["head"] ~= nil then identity = args["head"] end end M.insert(rootLetters, split_root(identity, separator)) end local joined_roots = {} for i, rootLetter in ipairs(rootLetters) do M.insert(joined_roots, M.concat(rootLetter, separator)) local ok, err = validate_root(rootLetter, joined_roots[i], data, radical_set) if not ok then error(err) end end local sense = args["sense"] local sense_formatted = "" if sense ~= nil and sense ~= "" then sense_formatted = UI_STRINGS.sense_wrapper:format(sense) end if identity == joined_roots[1] then if link_target == "appendix_subpage" and namespace == "" then error(UI_STRINGS.move_to_appendix:format(subpage .. joined_roots[1])) end if roots_len > 1 then error(UI_STRINGS.only_one_root) end local headword_args = { lang = lang, pos_category = "roots", categories = {}, heads = { identity }, nomultiwordcat = true, } local headword_opts = data.headword or DEFAULT_HEADWORD if headword_opts.translits then headword_args.translits = { transliterate_root(identity, data.romanization) } end if headword_opts.noposcat then headword_args.noposcat = true end M.insert(output, M.headword.full_headword(headword_args)) if args["nocat"] then return M.concat(output) end return M.concat(output) .. M.concat(categories) else local link_texts = {} local term_counts = {} for i, joined_root in ipairs(joined_roots) do local link_text if link_target == "appendix_subpage" then link_text = subpage .. joined_root else link_text = joined_root end local translit = data.romanization and transliterate_root(joined_root, data.romanization) or nil M.insert(link_texts, link(link_text, joined_root, translit, sense, lang) .. sense_formatted) M.insert(categories, M.utilities.format_categories( { root_category(lang, lang, joined_root, sense) }, lang, nil, nil, force_cat)) M.insert(term_counts, mw.site.stats.pagesInCategory( root_category(lang, lang, joined_root, sense), "pages")) end if args["nocat"] or plain then if args["nocat"] then return M.concat(link_texts, ", ") end return M.concat(link_texts, ", ") .. M.concat(categories) else local link_text_output = "" for i, link_text in ipairs(link_texts) do link_text_output = link_text_output .. "\n|-\n| " .. link_text .. "\n|-\n| [[:श्रेणी:" .. root_category(lang, lang, joined_roots[i], sense) .. "|" .. term_counts[i] .. " टर्म" .. (term_counts[i] == 1 and "" or "") .. "]]\n" end local wikicode = M.inflection_table.make_top{ title = "-", palette = data.palette, class = "floatright tr-alongside" } local article = lang:inFamily("sem") and UI_STRINGS.article_semitic or UI_STRINGS.article_generic wikicode = wikicode .. UI_STRINGS.root_heading:format(article, #term_counts == 1 and "Root" or "Roots") wikicode = wikicode .. link_text_output wikicode = wikicode .. M.inflection_table.make_bottom{} return wikicode .. M.concat(categories) end end end return export qm0omoulqnmxcnl9tr97qt7cfzorjo2 मॉड्यूल:pages 828 306744 487587 487132 2026-09-01T17:27:18Z SM7 6218 updating... 487587 Scribunto text/plain local export = {} local string_utilities_module = "Module:string utilities" local concat = table.concat local find = string.find local format = string.format local getmetatable = getmetatable local get_current_section -- defined below local get_namespace_shortcut -- defined below local get_pagetype -- defined below local gsub = string.gsub local insert = table.insert local is_internal_title -- defined below local is_title -- defined below local lower = string.lower local match = string.match local new_title = mw.title.new local require = require local sub = string.sub local title_equals = mw.title.equals local tonumber = tonumber local type = type local ufind = mw.ustring.find local unstrip_nowiki = mw.text.unstripNoWiki --[==[ Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==] local function decode_entities(...) decode_entities = require(string_utilities_module).decode_entities return decode_entities(...) end local function ulower(...) ulower = require(string_utilities_module).lower return ulower(...) end local function trim(...) trim = require(string_utilities_module).trim return trim(...) end --[==[ Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==] local current_frame local function get_current_frame() current_frame, get_current_frame = mw.getCurrentFrame(), nil return current_frame end local parent_frame local function get_parent_frame() parent_frame, get_parent_frame = (current_frame or get_current_frame()):getParent(), nil return parent_frame end local namespace_shortcuts local function get_namespace_shortcuts() namespace_shortcuts, get_namespace_shortcuts = { [4] = "WT", [10] = "T", [14] = "CAT", [100] = "AP", [110] = "WS", [118] = "RC", [828] = "MOD", }, nil return namespace_shortcuts end do local transcluded --[==[ Returns {true} if the current {{tl|#invoke:}} is being transcluded, or {false} if not. If the current {{tl|#invoke:}} is part of a template, for instance, this template will therefore return {true}. Note that if a template containing an {{tl|#invoke:}} is used on its own page (e.g. to display a demonstration), this function is still able to detect that this is transclusion. This is an improvement over the other method for detecting transclusion, which is to check the parent frame title against the current page title, which fails to detect transclusion in that instance.]==] function export.is_transcluded() if transcluded == nil then transcluded = (parent_frame or get_parent_frame()) and parent_frame:preprocess("<includeonly>1</includeonly>") == "1" or false end return transcluded end end do local preview --[==[ Returns {true} if the page is currently being viewed in preview, or {false} if not.]==] function export.is_preview() if preview == nil then preview = (current_frame or get_current_frame()):preprocess("{{REVISIONID}}") == "" end return preview end end --[==[ Returns {true} if the input is a title object, or {false} if not. This therefore '''includes''' external title objects (i.e. those for pages on other wikis), such as [[w:Example]], unlike `is_internal_title` below.]==] function export.is_title(val) if not (val and type(val) == "table") then return false end local mt = getmetatable(val) -- There's no foolproof method for checking for a title object, but the -- __eq metamethod should be mw.title.equals unless the object has been -- seriously messed around with. return mt and type(mt) == "table" and getmetatable(mt) == nil and mt.__eq == title_equals and true or false end is_title = export.is_title --[==[ Returns {true} if the input is an internal title object, or {false} if not. An internal title object is a title object for a page on this wiki, such as [[example]]. This therefore '''excludes''' external title objects (i.e. those for pages on other wikis), such as [[w:Example]], unlike `is_title` above.]==] function export.is_internal_title(title) -- Note: Mainspace titles starting with "#" should be invalid, but a bug in mw.title.new and mw.title.makeTitle means a title object is returned that has the empty string for prefixedText, so they need to be filtered out. return is_title(title) and #title.prefixedText > 0 and #title.interwiki == 0 end is_internal_title = export.is_internal_title --[==[ Returns {true} if the input string is a valid link target, or {false} if not. This therefore '''includes''' link targets to other wikis, such as [[w:Example]], unlike `is_valid_page_name` below.]==] function export.is_valid_link_target(target) local target_type = type(target) if target_type == "string" then return is_title(new_title(target)) end error(format("bad argument #1 to 'is_valid_link_target' (string expected, got %s)", target_type), 2) end --[==[ Returns {true} if the input string is a valid page name on this wiki, or {false} if not. This therefore '''excludes''' page names on other wikis, such as [[w:Example]], unlike `is_valid_link_target` above.]==] function export.is_valid_page_name(name) local name_type = type(name) if name_type == "string" then return is_internal_title(new_title(name)) end error(format("bad argument #1 to 'is_valid_page_name' (string expected, got %s)", name_type), 2) end --[==[ Given a title object, returns a full link target which will always unambiguously link to it. For instance, the input {"foo"} (for the page [[foo]]) returns {":foo"}, as a leading colon always refers to mainspace, even when other namespaces might be assumed (e.g. when transcluding using `{{ }}` syntax). If `shortcut` is set, then the returned target will use the namespace shortcut, if any; for example, the title for `Template:foo` would return {"T:foo"} instead of {"Template:foo"}.]==] function export.get_link_target(title, shortcut) if not is_title(title) then error(format("bad argument #1 to 'is_valid_link_target' (title object expected, got %s)", type(title))) elseif title.interwiki ~= "" then return title.fullText elseif shortcut then local fragment = title.fragment if fragment == "" then return get_namespace_shortcut(title) .. ":" .. title.text end return get_namespace_shortcut(title) .. ":" .. title.text .. "#" .. fragment elseif title.namespace == 0 then return ":" .. title.fullText end return title.fullText end do local function find_sandbox(text) return find(text, "^User:.") or find(lower(text), "sandbox", 1, true) end local function get_transclusion_subtypes(title, main_type, documentation, page_suffix) local text, subtypes = title.text, {main_type} -- Any template/module with "sandbox" in the title. These are impossible -- to screen for more accurately, as there's no consistent pattern. Also -- any user sandboxes in the form (e.g.) "Template:User:...". local sandbox = find_sandbox(text) if sandbox then insert(subtypes, "sandbox") end -- Any template/module testcases (which can be labelled and/or followed -- by further subpages). local testcase = find(text, "./[Tt]estcases?%f[%L]") if testcase then -- Order "testcase" and "sandbox" based on where the patterns occur -- in the title. local n = sandbox and sandbox < testcase and 3 or 2 insert(subtypes, n, "testcase") end -- Any template/module documentation pages. if documentation then insert(subtypes, "documentation") end local final = subtypes[#subtypes] if not (final == main_type and not page_suffix or final == "sandbox") then insert(subtypes, "page") end return concat(subtypes, " ") end local function get_snippet_subtypes(title, main_type, documentation) local ns = title.namespace return get_transclusion_subtypes(title, ( ns == 2 and "user " or ns == 8 and match(title.text, "^Gadget-.") and "gadget " or "" ) .. main_type, documentation) end --[==[ Returns the page type of the input title object in a format which can be used in running text.]==] function export.get_pagetype(title) if not is_internal_title(title) then error(mw.dumpObject(title.fullText) .. " is not a valid page name.") end -- If possibly a documentation page, get the base title and set the -- `documentation` flag. local content_model, text, documentation = title.contentModel if content_model == "wikitext" then text = title.text if title.isSubpage and title.subpageText == "documentation" then local base_title = title.basePageTitle if base_title then title, content_model, text, documentation = base_title, base_title.contentModel, base_title.text, true end end end -- Content models have overriding priority, as they can appear in -- nonstandard places due to page content model changes. if content_model == "css" or content_model == "sanitized-css" then return get_snippet_subtypes(title, "stylesheet", documentation) elseif content_model == "javascript" then return get_snippet_subtypes(title, "script", documentation) elseif content_model == "json" then return get_snippet_subtypes(title, "JSON data", documentation) elseif content_model == "MassMessageListContent" then return get_snippet_subtypes(title, "mass message delivery list", documentation) -- Modules. elseif content_model == "Scribunto" then return get_transclusion_subtypes(title, "module", documentation, false) elseif content_model == "text" then return "page" -- ??? -- Otherwise, the content model is "wikitext", so check namespaces. elseif title.isTalkPage then return "talk page" end local ns = title.namespace -- Main namespace. if ns == 0 then return "entry" -- Wiktionary: elseif ns == 4 then return find_sandbox(title.text) and "sandbox" or "project page" -- Template: elseif ns == 10 then return get_transclusion_subtypes(title, "template", documentation, false) end -- Convert the namespace to lowercase, unless it contains a capital -- letter after the initial letter (e.g. MediaWiki, TimedText). Also -- normalize any underscores. local ns_text = gsub(title.nsText, "_", " ") if ufind(ns_text, "^%U*$", 2) then ns_text = ulower(ns_text) end -- User: if ns == 2 then return ns_text .. " " .. (title.isSubpage and "subpage" or "page") -- Category: and Appendix: elseif ns == 14 or ns == 100 then return ns_text -- Thesaurus: and Reconstruction: elseif ns == 110 or ns == 118 then return ns_text .. " entry" end return ns_text .. " page" end get_pagetype = export.get_pagetype end --[==[ Returns {true} if the input title object is for a content page, or {false} if not. A content page is a page that is considered part of the dictionary itself, and excludes pages for discussion, administration, maintenance etc.]==] function export.is_content_page(title) if not is_internal_title(title) then error(mw.dumpObject(title.fullText) .. " is not a valid page name.") end local ns = title.namespace -- (main), Appendix, Thesaurus, Citations, Reconstruction. return (ns == 0 or ns == 100 or ns == 110 or ns == 114 or ns == 118) and title.contentModel == "wikitext" end --[==[ Returns {true} if the input title object is for a documentation page, or {false} if not.]==] function export.is_documentation(title) return match(get_pagetype(title), "%f[%w]documentation%f[%W]") and true or false end --[==[ Returns {true} if the input title object is for a sandbox, or {false} if not. By default, sandbox documentation pages are excluded, but this can be overridden with the `include_documentation` parameter.]==] function export.is_sandbox(title, include_documentation) local pagetype = get_pagetype(title) return match(pagetype, "%f[%w]sandbox%f[%W]") and ( include_documentation or not match(pagetype, "%f[%w]documentation%f[%W]") ) and true or false end --[==[ Returns {true} if the input title object is for a testcase page, or {false} if not. By default, testcase documentation pages are excluded, but this can be overridden with the `include_documentation` parameter.]==] function export.is_testcase_page(title, include_documentation) local pagetype = get_pagetype(title) return match(pagetype, "%f[%w]testcase%f[%W]") and ( include_documentation or not match(pagetype, "%f[%w]documentation%f[%W]") ) and true or false end --[==[ Returns the namespace shortcut for the input title object, or else the namespace text. For example, a `Template:` title returns {"T"}, a `Module:` title returns {"MOD"}, and a `User:` title returns {"User"}.]==] function export.get_namespace_shortcut(title) return (namespace_shortcuts or get_namespace_shortcuts())[title.namespace] or title.nsText end get_namespace_shortcut = export.get_namespace_shortcut do local function check_level(lvl) if type(lvl) ~= "number" then error("Heading levels must be numbers.") elseif lvl < 1 or lvl > 6 or lvl % 1 ~= 0 then error("Heading levels must be integers between 1 and 6.") end return lvl end --[==[ A helper function which iterates over the headings in `text`, which should be the content of a page or (main) section. Each iteration returns three values: `sec` (the section title), `lvl` (the section level) and `loc` (the index of the section in the given text, from the first equals sign). The section title will be automatically trimmed, and any HTML entities will be resolved. The optional parameter `a` (which should be an integer between 1 and 6) can be used to ensure that only headings of the specified level are iterated over. If `b` is also given, then they are treated as a range. The optional parameters `a` and `b` can be used to specify a range, so that only headings with levels in that range are returned.]==] local function find_headings(text, a, b) a = a and check_level(a) or nil b = b and check_level(b) or a or nil local start, loc, lvl, sec = 1 return function() repeat loc, lvl, sec, start = match(text, "()%f[^%z\n](==?=?=?=?=?)([^\n]+)%2[\t ]*%f[%z\n]()", start) lvl = lvl and #lvl until not (sec and a) or (lvl >= a and lvl <= b) return sec and trim(decode_entities(sec)) or nil, lvl, loc end end local function _get_section(content, name, level) if not (content and name) then return nil elseif find(name, "\n", 1, true) then error("Heading name cannot contain a newline.") end level = level and check_level(level) or nil name = trim(decode_entities(name)) local start for sec, lvl, loc in find_headings(content, level and 1 or nil, level) do if start and lvl <= level then return sub(content, start, loc - 1) elseif not start and (not level or lvl == level) and sec == name then start, level = loc, lvl end end return start and sub(content, start) end --[==[ A helper function to return the content of a page section. `content` is raw wikitext, `name` is the requested section, and `level` is an optional parameter that specifies the required section heading level. If `level` is not supplied, then the first section called `name` is returned. `name` can either be a string or table of section names. If a table, each name represents a section that has the next as a subsection. For example, { {"Spanish", "Noun"}} will return the first matching section called "Noun" under a section called "Spanish". These do not have to be at adjacent levels ("Noun" might be L4, while "Spanish" is L2). If `level` is given, it refers to the last name in the table (i.e. the name of the section to be returned). The returned section includes all of its subsections. If no matching section is found, return {nil}.]==] function export.get_section(content, names, level) if type(names) ~= "table" then return _get_section(content, names, level) end local i = 1 local name = names[i] if not name then error("Must specify at least 1 section.") end while true do local nxt_i = i + 1 local nxt = names[nxt_i] if nxt == nil then return _get_section(content, name, level) end content = _get_section(content, name) if content == nil then return nil elseif i == 6 then error("Not possible specify more than 6 sections: headings only go up to level 6.") end i = nxt_i name = names[i] end return content end end --[==[ Convert a physical pagename (or the current pagename, if {nil} is passed in) to its logical equivalent, but only if the physical pagename refers to one of the splits of a mammoth page such as [[a]]. Otherwise this simply returns the subpage (the part after the last slash in namespace other than the main one, otherwise the same as passed in), unless `include_base` is specified, in which case the return value will be the whole pagename minus the namespace, including the base (the part before the final slash). FIXME: This should be augmented with logic to handle unsupported titles, which is currently in process_page() in [[Module:headword/page]], so that it is a general physical-to-logical conversion function. Examples: * {physical_to_logical_pagename_if_mammoth("a")} → {"a"} * {physical_to_logical_pagename_if_mammoth("a/languages A to L")} → {"a"} (since [[a]] is marked as a mammoth page in [[Module:links/data]]) * {physical_to_logical_pagename_if_mammoth("50/50")} → {"50/50"} (since [[50/50]] is in the main namespace) * {physical_to_logical_pagename_if_mammoth("Appendix:Lojban/a")} → "a" * {physical_to_logical_pagename_if_mammoth("Appendix:Lojban/a", true)} → "Lojban/a" * {physical_to_logical_pagename_if_mammoth("Reconstruction:Proto-Slavic/a")} → "a" * {physical_to_logical_pagename_if_mammoth("Reconstruction:Proto-Slavic/a", true)} → "Proto-Slavic/a" * {physical_to_logical_pagename_if_mammoth("User:Example/sandbox/foo")} → "foo" * {physical_to_logical_pagename_if_mammoth("User:Example/sandbox/foo", true)} → "Example/sandbox/foo" ]==] function export.physical_to_logical_pagename_if_mammoth(title, include_base) if title == nil then title = mw.title.getCurrentTitle() elseif not is_title(title) then title = mw.title.new(title) end if title.nsText == "" then -- Formerly we checked for the specific known subpages of a given mammoth split page, e.g. we would convert -- [[a/languages M to Z]] to [[a]] assuming that [[a/languages M to Z]] was one of the splits, but not -- [[a/languages N to Z]]. To simplify this, we just convert anything with the right mammoth split page format -- on the assumption that it's unlikely we will ever have a legitimate non-mammoth-split pagename of this sort. local pagename = title.text local mammoth_root_page = pagename:match("^(.*)/languages [A-Z] to [A-Z]$") if mammoth_root_page then pagename = mammoth_root_page end return pagename elseif include_base then return title.text else return title.subpageText end end --[==[ Obsolete name for `physical_to_logical_pagename_if_mammoth`. FIXME: Replace all uses and remove. ]==] function export.safe_page_name(title) return export.physical_to_logical_pagename_if_mammoth(title) end do local current_section --[==[ A function which returns the number of the page section which contains the current {#invoke}, or {0} if the section can't be determined.]==] function export.get_current_section() if current_section ~= nil then return current_section end local frame = parent_frame or get_parent_frame() while frame do if find(frame:getTitle(), "^Module:") then current_section = 0 return 0 end frame = frame:getParent() end local extension_tag = (current_frame or get_current_frame()).extensionTag -- We determine the section via the heading strip marker count, since they're numbered sequentially, but the only way to do this is to generate a fake heading via frame:preprocess(). The native parser assigns each heading a unique marker, but frame:preprocess() will return copies of older markers if the heading is identical to one further up the page, so the fake heading has to be unique to the page. The best way to do this is to feed it a heading containing a nowiki marker (which we will need later), since those are always unique. local nowiki_marker = extension_tag(current_frame, "nowiki") -- Note: heading strip markers have a different syntax to the ones used for tags. local h = tonumber(match( current_frame:preprocess("=" .. nowiki_marker .. "="), "\127'\"`UNIQ%-%-h%-(%d+)%-%-QINU`\"'\127" )) -- For some reason, [[Special:ExpandTemplates]] doesn't generate a heading strip marker, so if that happens we simply abort early. if not h then return 0 end -- The only way to get the section number is to increment the heading count, so we store the offset in nowiki strip markers which can be retrieved by procedurally unstripping nowiki markers, counting backwards until we find a match. local n, offset = tonumber(match( nowiki_marker, "\127'\"`UNIQ%-%-nowiki%-([%dA-F]+)%-QINU`\"'\127" ), 16) while not offset and n > 0 do n = n - 1 offset = match( unstrip_nowiki(format("\127'\"`UNIQ--nowiki-%08X-QINU`\"'\127", n)), "^HEADING\1(%d+)" -- Prefix "HEADING\1" prevents collisions. ) end offset = offset and (offset + 1) or 0 extension_tag(current_frame, "nowiki", "HEADING\1" .. offset) current_section = h - offset return current_section end get_current_section = export.get_current_section end do local L2_sections, current_L2 local function get_L2_sections() L2_sections, get_L2_sections = mw.loadData("Module:headword/data").page.L2_sections, nil return L2_sections end --[==[ A function which returns the name of the L2 language section which contains the current {#invoke}.]==] function export.get_current_L2() if current_L2 ~= nil then return current_L2 or nil -- Return nil if current_L2 is false (i.e. there's no L2). end local section = get_current_section() while section > 0 do local L2 = (L2_sections or get_L2_sections())[section] if L2 then current_L2 = L2 return L2 end section = section - 1 end current_L2 = false return nil end end return export nhxd4vmvm0np9znoomlx3hbv4pf399c मॉड्यूल:sa-convert/doc 828 306781 487559 487330 2026-09-01T15:57:04Z SM7 6218 कुछ अनुवाद 487559 wikitext text/x-wiki इस मॉड्यूल का इस्तेमाल संस्कृत देवनागरी टेक्स्ट को दूसरी लिपियों में बदलने के लिए किया जाता है। इसका मुख्य रूप से इस्तेमाल [[साँचा:sa-alt]] में होता है और इसके <code>tr</code> फक्शन को [[साँचा:sa-convert]] में एक्सपोर्ट किया जाता है। == उदाहरण == {{lang|sa|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥}} <div class="NavFrame"> <div class="NavHead">सभी लिपियाँ</div> <div class="NavContent"> ===असमिया=== {{lang|as|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|as-Beng}}}} ===बाली=== {{lang|ban|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Bali}}}} ===बंगाली=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Beng}}}} ===ब्राह्मी=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Brah}}}} ===बर्मी=== {{lang|my|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Mymr}}}} ===चकमा=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Cakm}}}} ===चाम=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Cham}}}} ===गुजराती=== {{lang|gu|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Gujr}}}} ===गुरुमुखी=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Guru}}}} ===जावानीज=== {{lang|jv|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Java}}}} ===कन्नड़=== {{lang|kn|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Knda}}}} ===ख्मेर=== {{lang|km|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Khmr}}}} ===लाओ=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Laoo}}}} ===मलयालम=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Mlym}}}} ===मांचू=== {{lang|mnc|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|mnc-Mong}}}} ===मोड़ी=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Modi}}}} ===मंगोलियन=== {{lang|cmg|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Mong}}}} ===नंदनागरी=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Nand}}}} ===ओड़िया=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Orya}}}} ===सौराष्ट्र=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Saur}}}} ===शारदा=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Shrd}}}} ===सिद्धम=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Sidd}}}} ===सिंहल=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Sinh}}}} ===तमिल=== {{lang|ta|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Taml}}}} ===तेलुगु=== {{lang|te|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Telu}}}} ===थाई=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Thai}}}} ===तिरहुता=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Tirh}}}} ===तिब्बती=== {{lang|bo|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Tibt}}}} ===प्रचलित=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Newa}}}} ==='फाग्स-पा=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Phag}}}} ===ग्रंथ=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Gran}}}} ===कैथी=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Kthi}}}} ===भाईकसुकी=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Bhks}}}} ===सोयोम्बो=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः।।|Soyo}}}} ===ज़ाँजबाज़ार चौक=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Zanb}}}} ===टाकरी=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Takr}}}} ===ताई थाम=== {{lang|sa|{{#invoke:sa-convert|tr|ॐ त्र्यम्बकं यजामहे सुगन्धिं पुष्टिवर्धनम् । उर्वारुकमिव बन्धनान् मृत्योर् मुक्षीय माऽमृतात् ॥ <br> कः खगौघाङचिच्छौजा झाञ्ज्ञोऽटौठीडडण्ढणः। तथोदधीन् पफर्बाभीर्मयोऽरिल्वाशिषां सहः॥|Lana}}}} </div> </div> edawwmnlts6favt0lyie5e3lsqefrrm ৱঞ্চক 0 306843 487685 487516 2026-09-02T03:27:37Z अजीत कुमार तिवारी 4887 सुधार. 487685 wikitext text/x-wiki {{see also|ঠগ}} ==असमिया== === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== छल-कपट से दूसरों को ठगने वाला, धोख़ेबाज़। (पुल्लिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===विशेषण=== {{as-adj}} # [[वंचक]] jp7jqauap5nkfjhyvjf72wzgc77si2y 487705 487685 2026-09-02T04:54:59Z अजीत कुमार तिवारी 4887 सुधार. 487705 wikitext text/x-wiki {{see also|ঠগ}} ==असमिया== ===विशेषण=== {{as-adj}} # [[वंचक]] === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== छल-कपट से दूसरों को ठगने वाला, धोख़ेबाज़। (पुल्लिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] 4a7hd7yap3kxksf5emcm16fipa0sqkt বন্দনীয 0 306844 487693 487515 2026-09-02T03:38:21Z अजीत कुमार तिवारी 4887 सुधार. 487693 wikitext text/x-wiki {{see also|মাননীয|পূজনীয}} == असमिया == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== # जिसकी वंदना की जानी चाहिए अथवा की जानी हो, स्तुति के योग्य, स्तुत्य, पूज्य, पूजनीय; # नमस्कार के योग्य, प्रणम्य, अभिवादन के योग्य। [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===विशेषण=== {{as-adj}} # [[वंदनीय]] 064b3dv5r4s4qgg4kq0akstswmfevz5 487707 487693 2026-09-02T04:56:55Z अजीत कुमार तिवारी 4887 प्रारूप सुधार. 487707 wikitext text/x-wiki {{see also|মাননীয|পূজনীয}} ==असमिया== ===विशेषण=== {{as-adj}} # [[वंदनीय]] === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== # जिसकी वंदना की जानी चाहिए अथवा की जानी हो, स्तुति के योग्य, स्तुत्य, पूज्य, पूजनीय; # नमस्कार के योग्य, प्रणम्य, अभिवादन के योग्य। [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] fmsjzeft1w8qwphi1whuq33x8tesuzj বাউঁ 0 306847 487562 487532 2026-09-01T16:06:44Z अजीत कुमार तिवारी 4887 487562 wikitext text/x-wiki == {{असमिया}} == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेजी त्रिभाषा कोश ==== # बायाँ, दाहिना या दक्षिण का विपर्याय; # प्रतिकूल, विरुद्ध; # दुष्ट बुरा। [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेजी त्रिभाषा कोश]] ==असमिया== ===विशेषण=== {{as-adj}} avz1wbdatf5mw8su2a2neeyd0zjt9gy 487683 487562 2026-09-02T03:23:37Z अजीत कुमार तिवारी 4887 सुधार. 487683 wikitext text/x-wiki == असमिया == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेजी त्रिभाषा कोश ==== # बायाँ, दाहिना या दक्षिण का विपर्याय; # प्रतिकूल, विरुद्ध; # दुष्ट बुरा। [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेजी त्रिभाषा कोश]] ==असमिया== ===विशेषण=== {{as-adj}} #[[वाम]] r8igrtzas40wwwzy86nr81sav0v2axu 487711 487683 2026-09-02T06:53:48Z अजीत कुमार तिवारी 4887 प्रारूप सुधार. 487711 wikitext text/x-wiki ==असमिया== ===विशेषण=== {{as-adj}} #[[वाम]] === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेजी त्रिभाषा कोश ==== # बायाँ, दाहिना या दक्षिण का विपर्याय; # प्रतिकूल, विरुद्ध; # दुष्ट बुरा। [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेजी त्रिभाषा कोश]] ee0p8lkjy8yl9yfc9ixp3ied7z4gmpn सदस्य वार्ता:अजीत कुमार तिवारी 3 306849 487539 487535 2026-09-01T13:05:08Z SM7 6218 /* स्वागत */ उत्तर 487539 wikitext text/x-wiki == स्वागत == नमस्कार अजीत जी। आपका विक्षनरी पर बहुत-बहुत स्वागत है। मैंने देखा आप असमिया भाषा के शब्दों पर कार्य कर रहे। चूँकि, असमिया भाषा से संबंधित साँचे और श्रेणियाँ अभी हिंदी विक्षनरी पर उपलब्ध नहीं हैं, यदि आप चाहें और आगे भी इस ओर कार्य करने की इच्छा रखते हों, मैं कुछ आवश्यक साँचे और श्रेणियाँ निर्मित कर सकता हूँ। इस प्रकल्प पर बहुत सक्रियता नहीं है। फिर भी यथासंभव सहायता करने का प्रयास करूँगा। --[[सदस्य:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[सदस्य वार्ता:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> १६:४९, १ सितम्बर २०२६ (IST) :नमस्कार @[[सदस्य:SM7|SM7]] जी! अगर ऐसा हो पाए तो बहुत सुविधा होगी। मैं असमिया-हिंदी कोश पर काम करने का इच्छुक हूँ। यदि मैं व्यवस्थित ढंग से और उचित प्रारूप में संपादन सीख पाया तो विद्यार्थियों को भी सिखाने का प्रयास करूँगा। [[User:अजीत कुमार तिवारी|<span style="text-shadow:gray 3px 3px 2px;"><font color="blue"><sup></sup> '''अजीत कुमार तिवारी'''</font></span>]]<sup>[[User talk:अजीत कुमार तिवारी|<font color="red"> '''वार्ता'''</font>]]</sup> १७:०५, १ सितम्बर २०२६ (IST) ::मैं सबसे पहले कुछ हेड-वर्ड साँचों पर काम करता हूँ। फिर आपको बताता हूँ। --[[सदस्य:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[सदस्य वार्ता:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> १८:३५, १ सितम्बर २०२६ (IST) sgfadh6ub1vl4bs8g0qhqjo5u3gsz45 487544 487539 2026-09-01T14:50:26Z अजीत कुमार तिवारी 4887 /* स्वागत */ उत्तर 487544 wikitext text/x-wiki == स्वागत == नमस्कार अजीत जी। आपका विक्षनरी पर बहुत-बहुत स्वागत है। मैंने देखा आप असमिया भाषा के शब्दों पर कार्य कर रहे। चूँकि, असमिया भाषा से संबंधित साँचे और श्रेणियाँ अभी हिंदी विक्षनरी पर उपलब्ध नहीं हैं, यदि आप चाहें और आगे भी इस ओर कार्य करने की इच्छा रखते हों, मैं कुछ आवश्यक साँचे और श्रेणियाँ निर्मित कर सकता हूँ। इस प्रकल्प पर बहुत सक्रियता नहीं है। फिर भी यथासंभव सहायता करने का प्रयास करूँगा। --[[सदस्य:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[सदस्य वार्ता:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> १६:४९, १ सितम्बर २०२६ (IST) :नमस्कार @[[सदस्य:SM7|SM7]] जी! अगर ऐसा हो पाए तो बहुत सुविधा होगी। मैं असमिया-हिंदी कोश पर काम करने का इच्छुक हूँ। यदि मैं व्यवस्थित ढंग से और उचित प्रारूप में संपादन सीख पाया तो विद्यार्थियों को भी सिखाने का प्रयास करूँगा। [[User:अजीत कुमार तिवारी|<span style="text-shadow:gray 3px 3px 2px;"><font color="blue"><sup></sup> '''अजीत कुमार तिवारी'''</font></span>]]<sup>[[User talk:अजीत कुमार तिवारी|<font color="red"> '''वार्ता'''</font>]]</sup> १७:०५, १ सितम्बर २०२६ (IST) ::मैं सबसे पहले कुछ हेड-वर्ड साँचों पर काम करता हूँ। फिर आपको बताता हूँ। --[[सदस्य:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[सदस्य वार्ता:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> १८:३५, १ सितम्बर २०२६ (IST) :::ठीक है। तब तक मैं यथासामर्थ्य शब्द जोड़ने की कोशिश करता हूँ। [[User:अजीत कुमार तिवारी|<span style="text-shadow:gray 3px 3px 2px;"><font color="blue"><sup></sup> '''अजीत कुमार तिवारी'''</font></span>]]<sup>[[User talk:अजीत कुमार तिवारी|<font color="red"> '''वार्ता'''</font>]]</sup> २०:२०, १ सितम्बर २०२६ (IST) 2kwlaix3zy4vk658hhwi22e7l8iue4e 487679 487544 2026-09-02T02:35:46Z SM7 6218 उत्तर दिया 487679 wikitext text/x-wiki == स्वागत == नमस्कार अजीत जी। आपका विक्षनरी पर बहुत-बहुत स्वागत है। मैंने देखा आप असमिया भाषा के शब्दों पर कार्य कर रहे। चूँकि, असमिया भाषा से संबंधित साँचे और श्रेणियाँ अभी हिंदी विक्षनरी पर उपलब्ध नहीं हैं, यदि आप चाहें और आगे भी इस ओर कार्य करने की इच्छा रखते हों, मैं कुछ आवश्यक साँचे और श्रेणियाँ निर्मित कर सकता हूँ। इस प्रकल्प पर बहुत सक्रियता नहीं है। फिर भी यथासंभव सहायता करने का प्रयास करूँगा। --[[सदस्य:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[सदस्य वार्ता:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> १६:४९, १ सितम्बर २०२६ (IST) :नमस्कार @[[सदस्य:SM7|SM7]] जी! अगर ऐसा हो पाए तो बहुत सुविधा होगी। मैं असमिया-हिंदी कोश पर काम करने का इच्छुक हूँ। यदि मैं व्यवस्थित ढंग से और उचित प्रारूप में संपादन सीख पाया तो विद्यार्थियों को भी सिखाने का प्रयास करूँगा। [[User:अजीत कुमार तिवारी|<span style="text-shadow:gray 3px 3px 2px;"><font color="blue"><sup></sup> '''अजीत कुमार तिवारी'''</font></span>]]<sup>[[User talk:अजीत कुमार तिवारी|<font color="red"> '''वार्ता'''</font>]]</sup> १७:०५, १ सितम्बर २०२६ (IST) ::मैं सबसे पहले कुछ हेड-वर्ड साँचों पर काम करता हूँ। फिर आपको बताता हूँ। --[[सदस्य:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[सदस्य वार्ता:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> १८:३५, १ सितम्बर २०२६ (IST) :::ठीक है। तब तक मैं यथासामर्थ्य शब्द जोड़ने की कोशिश करता हूँ। [[User:अजीत कुमार तिवारी|<span style="text-shadow:gray 3px 3px 2px;"><font color="blue"><sup></sup> '''अजीत कुमार तिवारी'''</font></span>]]<sup>[[User talk:अजीत कुमार तिवारी|<font color="red"> '''वार्ता'''</font>]]</sup> २०:२०, १ सितम्बर २०२६ (IST) ::::मैंने कुछ हेडवर्ड साँचे असमिया के लिये बना दिये हैं जो शायद सर्वाधिक उपयोगी हों, जैसे कि: ::::*{{tl|as-noun}} संज्ञाओं के लिये ::::**{{tl|as-prop}} नामवाचक संज्ञाओं proper noun के लिये ::::**{{tl|as-prpn}} नामवाचक संज्ञाओं proper noun के लिये; इनमें अंतर के लिये इनका अंग्रेजी विक्षनरी पर प्रयोग देख सकते हैं, मैं भी अभी समझने की कोशिस कर रहा ::::*{{tl|as-adj}} विशेषणों के लिये ::::*{{tl|as-verbun}} क्रियाओं के लिये ::::इनमें से एकाध का प्रयोग आपने किया भी है। अभी इनके द्वारा जोड़ी जाने वाली श्रेणियाँ थोड़ी गड़बड़ हैं। पर अब असमिया शब्दों को जोड़ने के लिये {{tl|असमिया}} की आवश्यता नहीं है। आप इनके प्रयोग द्वारा आगे का काम जारी रख सकते हैं। --[[सदस्य:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[सदस्य वार्ता:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> ०८:०५, २ सितम्बर २०२६ (IST) f2r8zwz009947wxyvvkgc4e7i40ohjg 487680 487679 2026-09-02T02:36:16Z SM7 6218 सुधार 487680 wikitext text/x-wiki == स्वागत == नमस्कार अजीत जी। आपका विक्षनरी पर बहुत-बहुत स्वागत है। मैंने देखा आप असमिया भाषा के शब्दों पर कार्य कर रहे। चूँकि, असमिया भाषा से संबंधित साँचे और श्रेणियाँ अभी हिंदी विक्षनरी पर उपलब्ध नहीं हैं, यदि आप चाहें और आगे भी इस ओर कार्य करने की इच्छा रखते हों, मैं कुछ आवश्यक साँचे और श्रेणियाँ निर्मित कर सकता हूँ। इस प्रकल्प पर बहुत सक्रियता नहीं है। फिर भी यथासंभव सहायता करने का प्रयास करूँगा। --[[सदस्य:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[सदस्य वार्ता:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> १६:४९, १ सितम्बर २०२६ (IST) :नमस्कार @[[सदस्य:SM7|SM7]] जी! अगर ऐसा हो पाए तो बहुत सुविधा होगी। मैं असमिया-हिंदी कोश पर काम करने का इच्छुक हूँ। यदि मैं व्यवस्थित ढंग से और उचित प्रारूप में संपादन सीख पाया तो विद्यार्थियों को भी सिखाने का प्रयास करूँगा। [[User:अजीत कुमार तिवारी|<span style="text-shadow:gray 3px 3px 2px;"><font color="blue"><sup></sup> '''अजीत कुमार तिवारी'''</font></span>]]<sup>[[User talk:अजीत कुमार तिवारी|<font color="red"> '''वार्ता'''</font>]]</sup> १७:०५, १ सितम्बर २०२६ (IST) ::मैं सबसे पहले कुछ हेड-वर्ड साँचों पर काम करता हूँ। फिर आपको बताता हूँ। --[[सदस्य:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[सदस्य वार्ता:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> १८:३५, १ सितम्बर २०२६ (IST) :::ठीक है। तब तक मैं यथासामर्थ्य शब्द जोड़ने की कोशिश करता हूँ। [[User:अजीत कुमार तिवारी|<span style="text-shadow:gray 3px 3px 2px;"><font color="blue"><sup></sup> '''अजीत कुमार तिवारी'''</font></span>]]<sup>[[User talk:अजीत कुमार तिवारी|<font color="red"> '''वार्ता'''</font>]]</sup> २०:२०, १ सितम्बर २०२६ (IST) ::::मैंने कुछ हेडवर्ड साँचे असमिया के लिये बना दिये हैं जो शायद सर्वाधिक उपयोगी हों, जैसे कि: ::::*{{tl|as-noun}} संज्ञाओं के लिये ::::**{{tl|as-prop}} नामवाचक संज्ञाओं proper noun के लिये ::::**{{tl|as-prpn}} नामवाचक संज्ञाओं proper noun के लिये; इनमें अंतर के लिये इनका अंग्रेजी विक्षनरी पर प्रयोग देख सकते हैं, मैं भी अभी समझने की कोशिस कर रहा ::::*{{tl|as-adj}} विशेषणों के लिये ::::*{{tl|as-verb}} क्रियाओं के लिये ::::इनमें से एकाध का प्रयोग आपने किया भी है। अभी इनके द्वारा जोड़ी जाने वाली श्रेणियाँ थोड़ी गड़बड़ हैं। पर अब असमिया शब्दों को जोड़ने के लिये {{tl|असमिया}} की आवश्यता नहीं है। आप इनके प्रयोग द्वारा आगे का काम जारी रख सकते हैं। --[[सदस्य:SM7|<span style="color:#00A300">SM7</span>]]<sup>[[सदस्य वार्ता:SM7|<small style="color:#6F00FF">--बातचीत--</small>]]</sup> ०८:०५, २ सितम्बर २०२६ (IST) cky5omcpynapdcx2us3zfb3qal1ufhw অন্তৰ্নিহিত 0 306853 487545 2026-09-01T14:56:45Z अजीत कुमार तिवारी 4887 +असमिया से शब्द. 487545 wikitext text/x-wiki == {{असमिया}} == === प्रकाशितकोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== भीतर स्थित या छिपा हुआ। [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===विशेषण=== {{as-adj}} # [[अंतर्निहित]] jtel3y3puvkn8aarr221s7mt0r2sk2y 487682 487545 2026-09-02T03:22:12Z अजीत कुमार तिवारी 4887 सफ़ाई. 487682 wikitext text/x-wiki == असमिया == === प्रकाशितकोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== भीतर स्थित या छिपा हुआ। [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===विशेषण=== {{as-adj}} # [[अंतर्निहित]] grziddxa7h36cpvy6px45hag4cws743 487700 487682 2026-09-02T03:55:21Z SM7 6218 क्रम सुधार एवं सफाई 487700 wikitext text/x-wiki ==असमिया== ===विशेषण=== {{as-adj}} # [[अंतर्निहित]] === प्रकाशितकोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== # भीतर स्थित या छिपा हुआ। [[श्रेणी:हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] 2vqybe0hwp23ay838z7na0149yql7de অন্তৰ্ভুক্ত 0 306854 487546 2026-09-01T15:01:41Z अजीत कुमार तिवारी 4887 +असमिया से शब्द. 487546 wikitext text/x-wiki == {{असमिया}} == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== भीतर समाया हुआ, अंतर्गत। [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===विशेषण=== {{as-adj}} # [[अंतर्भूत]] 1x4pk43nq40pxnsorrz5mqu1e11ak2j 487684 487546 2026-09-02T03:25:13Z अजीत कुमार तिवारी 4887 सफ़ाई. 487684 wikitext text/x-wiki == असमिया == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== भीतर समाया हुआ, अंतर्गत। [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===विशेषण=== {{as-adj}} # [[अंतर्भूत]] 2c5ga3z6qslksr5l9rg2cnbk0k77xvo 487709 487684 2026-09-02T05:56:42Z अजीत कुमार तिवारी 4887 प्रारूप सुधार. 487709 wikitext text/x-wiki ==असमिया== ===विशेषण=== {{as-adj}} # [[अंतर्भूत]] === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== भीतर समाया हुआ, अंतर्गत। [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ciyp18d20kwcliit5y7wkle26dbwneo অন্তৰ্য্যামী 0 306855 487558 2026-09-01T15:53:10Z अजीत कुमार तिवारी 4887 +असमिया से शब्द. 487558 wikitext text/x-wiki == {{असमिया}} == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== अंतःकरण या मन की बात जानने वाला। (पुलिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===विशेषण=== {{as-adj}} # [[अंतर्यामी]] m3lnone6qh1n814xy83cpx0vhnydjuw 487691 487558 2026-09-02T03:35:14Z अजीत कुमार तिवारी 4887 सुधार. 487691 wikitext text/x-wiki == असमिया == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== अंतःकरण या मन की बात जानने वाला। (पुल्लिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===विशेषण=== {{as-adj}} # [[अंतर्यामी]] t93k2rdrlmktav41pl1u7nucgri6a54 487702 487691 2026-09-02T04:51:46Z अजीत कुमार तिवारी 4887 प्रारूप सुधार. 487702 wikitext text/x-wiki ==असमिया== ===विशेषण=== {{as-adj}} # [[अंतर्यामी]] === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== अंतःकरण या मन की बात जानने वाला। (पुल्लिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] kl403g1x59zeeef7m74e9iya89eeosu অন্তৰ্হিত 0 306856 487560 2026-09-01T15:58:39Z अजीत कुमार तिवारी 4887 +असमिया से शब्द. 487560 wikitext text/x-wiki == {{असमिया}} == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== जो अंतर्धान हो गया हो, अदृश्य। [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===विशेषण=== {{as-adj}} # [[अंतर्हित]] 1eslxrpouuw5a92czg3vxb39sszrrrj 487690 487560 2026-09-02T03:34:18Z अजीत कुमार तिवारी 4887 सुधार. 487690 wikitext text/x-wiki == असमिया == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== जो अंतर्धान हो गया हो, अदृश्य। [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===विशेषण=== {{as-adj}} # [[अंतर्हित]] ilpemz7shc1zff3z0q4a7qgrovj8bty 487708 487690 2026-09-02T04:57:30Z अजीत कुमार तिवारी 4887 सुधार. 487708 wikitext text/x-wiki ==असमिया== ===विशेषण=== {{as-adj}} # [[अंतर्हित]] === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== जो अंतर्धान हो गया हो, अदृश्य। [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] 61ah8ls51h3b6hwmgr2mycvni86n330 অন্ত্যজ 0 306857 487561 2026-09-01T16:03:58Z अजीत कुमार तिवारी 4887 +असमिया से शब्द. 487561 wikitext text/x-wiki == {{असमिया}} == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== अंतिम वर्ण से उत्पन्न। (विशेषण) #शूद्र वर्ण; #अछूत या अस्पृश्य जाति। (पुलिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===विशेषण=== {{as-adj}} # [[अंत्यज]] t62i1w2p7pqdk2pn2lboep1k9c76326 487688 487561 2026-09-02T03:30:39Z अजीत कुमार तिवारी 4887 सुधार. 487688 wikitext text/x-wiki == असमिया == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== अंतिम वर्ण से उत्पन्न। (विशेषण) #शूद्र वर्ण; #अछूत या अस्पृश्य जाति। (पुल्लिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===विशेषण=== {{as-adj}} # [[अंत्यज]] co2qt7o3elxhgvuh7p9kw6eevk5y9d2 487710 487688 2026-09-02T05:59:36Z अजीत कुमार तिवारी 4887 प्रारूप सुधार. 487710 wikitext text/x-wiki ==असमिया== ===विशेषण=== {{as-adj}} # [[अंत्यज]] === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== अंतिम वर्ण से उत्पन्न। (विशेषण) #शूद्र वर्ण; #अछूत या अस्पृश्य जाति। (पुल्लिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] o5821tth20eddzctb8abtv7vtz5i43u অন্ত্যানুপ্ৰাশ 0 306858 487566 2026-09-01T16:15:28Z अजीत कुमार तिवारी 4887 +असमिया से शब्द. 487566 wikitext text/x-wiki == {{असमिया}} == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== अनुप्रास अलंकार का एक भेद जिसके अनुसार किसी पद्य के चरणों के अंतिम अक्षर या अक्षरों में सादृश्य होता है, तुक। (पुलिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===संज्ञा=== {{as-noun}} # [[अंत्यानुप्रास]] 5j98ba1zrpvocwtzqx2lqsxxz4u0pok 487687 487566 2026-09-02T03:29:41Z अजीत कुमार तिवारी 4887 सुधार. 487687 wikitext text/x-wiki == असमिया == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== अनुप्रास अलंकार का एक भेद जिसके अनुसार किसी पद्य के चरणों के अंतिम अक्षर या अक्षरों में सादृश्य होता है, तुक। (पुल्लिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===संज्ञा=== {{as-noun}} # [[अंत्यानुप्रास]] d6wiwwpkhmg8m6mwpvk9iwmq6oowf58 मॉड्यूल:as-translit 828 306859 487569 2026-09-01T16:19:45Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487569 Scribunto text/plain -- Transliteration for Assamese local export = {} local gsub = mw.ustring.gsub local match = mw.ustring.match local conv = { -- consonants ["ক্ষ"] = "kh", ["ক"] = "k", ["খ"] = "kh", ["গ"] = "g", ["ঘ"] = "gh", ["ঙ"] = "ṅ", ["চ"] = "s", ["ছ"] = "s", ["জ"] = "z", ["ঝ"] = "zh", ["ঞ"] = "ñ", ["ট"] = "t", ["ঠ"] = "th", ["ড"] = "d", ["ঢ"] = "dh", ["ণ"] = "n", ["ত"] = "t", ["থ"] = "th", ["দ"] = "d", ["ধ"] = "dh", ["ন"] = "n", ["প"] = "p", ["ফ"] = "ph", ["ব"] = "b", ["ভ"] = "bh", ["ম"] = "m", ["য"] = "z", ["ৰ"] = "r", ["ল"] = "l", ["ৱ"] = "w", ["শ"] = "x", ["ষ"] = "x", ["স"] = "x", ["হ"] = "h", ["য়"] = "y", ["ড়"] = "r", ["ঢ়"] = "rh", -- vowel diacritics ["’"] = "ö", ["ি"] = "i", ["ু"] = "u", ["ৃ"] = "ri", ["ে"] = "e", ["ে’"] = "ë", ["ো"] = "ü", ["া"] = "a", ["ী"] = "i", ["ূ"] = "u", ["ৈ"] = "oi", ["ৌ"] = "ou", -- visarga ["ঃ"] = "h", -- vowel signs ["অ"] = "o", ["অ’"] = "ó", ["ই"] = "i", ["উ"] = "u", ["ঋ"] = "ri", ["এ"] = "e", ["এ’"] = "é", ["ও"] = "ü", ["আ"] = "a", ["ঈ"] = "i", ["ঊ"] = "u", ["ঐ"] = "oi", ["ঔ"] = "ou", --hosonto ["্"] = "", -- sondrobindu ["ঁ"] = "̃", -- owogroho ['ঽ']='o', -- onusor ["ং"] = "ṅ", -- hosonto to, ["ৎ"] = "t", -- numerals ["০"] = "0", ["১"] = "1", ["২"] = "2", ["৩"] = "3", ["৪"] = "4", ["৫"] = "5", ["৬"] = "6", ["৭"] = "7", ["৮"] = "8", ["৯"] = "9", -- punctuation ["।"] = ".", -- dari } local conv2 = { ["ক্ষ"] = "ḱ", ["খ"] = "ḱ", ["ঘ"] = "ǵ", ["ঙ"] = "ŋ", ["ং"] = "ŋ", ["ঝ"] = "ź", ["ঠ"] = "ṫ", ["থ"] = "ṫ", ["ঢ"] = "ḋ", ["ধ"] = "ḋ", ["ফ"] = "ṗ", ["ভ"] = "ḃ", ["ঢ়"] = "ŕ", ["ৃ"] = "ṙ", ["ঋ"] = "ṙ", ["ৈ"] = "ʏ", ["ঐ"] = "ʏ", ["ৌ"] = "ɵ", ["ঔ"] = "ɵ", } local consonant, vowel, vowel_sign = "ক-হড়-য়ৰৱ", "oা-ৌ’", "অ-ঔ" local c = "[" .. consonant .. "]" local cc = "়?" .. c local v = "[" .. vowel .. vowel_sign .. "]" local syncope_pattern = "(" .. v .. cc .. v .. cc .. ")o(" .. cc .. "ঁ?" .. v .. ")" local function rev_string(text) local result, length = "", mw.ustring.len(text) for i = 1, length do result = result .. mw.ustring.sub(text, length - i + 1, length - i + 1) end return result end function export.tr(text, lang, sc, mode) text = gsub(text, "([^ৰ])্য", "%1্য়") text = gsub(text, "্ব", "্ৱ") text = gsub(text, "[শষস]্", "চ্") text = gsub(text, "্স", "্চ") text = gsub(text, "[োও]ৱ", "্ও") text = gsub(text, "ক্ষ", "খ") text = gsub(text, "’ৱ", "্অ’") text = gsub(text, "[ুুউ]ৱ(.)", "্উ%1") text = gsub(text, "[োও]ৱ(.)", "্ও%1") text = gsub(text, "োঁৱ(.)", "্ওঁ%1") text = gsub(text, "[ৌঔ]ৱ", "্ঔ") text = gsub(text, "[িই]য়(.)", "্ই%1") text = gsub(text, "ৃয়", "্ঋ") text = gsub(text, "[েএ]য়(.)", "্এ%1") text = gsub(text, "[ে’এ’]য়", "্এ’") text = gsub(text, "[ৈঐ]য়(.)", "্ঐ%1") text = gsub(text, "[ীঈ]য়(.)", "্ঈ%1") text = gsub(text, "[ীঈ]য়", "্ঈঅ") -- end text = gsub(text, "[ূূঊ]ৱ", "্ঊ") text = gsub(text, "݁", "্অ") text = gsub(text, "[࣪ܿ]", "্") text = gsub(text, "বাৰ" , "্বাৰ") text = gsub(text, "বিলাক", "্বিলাক") text = gsub(text, "টো" , "্টো") text = gsub(text, "খন" , "্খন") text = gsub(text, "ডাল" , "্ডাল") text = gsub(text, "খিনি" , "্খিনি") text = gsub(text, "জন" , "্জন") text = gsub(text, "জনী" , "্জনী") text = gsub(text, "গৰাকী" , "্গৰাকী") text = gsub(text, "সকল" , "্সকল") text = gsub(text, "কৈ" , "্কৈ") text = gsub(text, "কে" , "্কে") text = gsub(text, "ফাল" , "্ফাল") text = gsub(text, "কেই" , "্কেই") text = gsub(text, "মান" , "্মান") text = gsub(text, "[িীইঈ]ঞ", "্ইঅ͂") text = gsub(text, "ঞ্", "ন্̃") text = gsub(text, "(" .. c .. "়?)([" .. vowel .. "’?্]?)", function(a, b) return a .. (b == "" and "o" or b) end) for word in mw.ustring.gmatch(text, "[ঁ-৽o’]+") do local orig_word = word word = rev_string(word) word = gsub(word, "^o(়?" .. c .. ")(ঁ?" .. v .. ")", "%1%2") while match(word, syncope_pattern) do word = gsub(word, syncope_pattern, "%1%2") end text = gsub(text, orig_word, rev_string(word)) end if mode == "IPA" then text = gsub(text, ".[়’]?", conv2) text = gsub(text, ".", conv2) end text = gsub(text, ".[়’]?", conv) text = gsub(text, ".", conv) local consonants_Latn_no_h = "[b-df-gj-np-tv-z]" -- Cw text = gsub(text, "mw", "mb") -- special case text = gsub(text, "^(" .. consonants_Latn_no_h .. "h?)w", "%1") -- initial text = gsub(text, "hw", "hb") text = gsub(text, "(" .. consonants_Latn_no_h .. ")w", "%1%1") -- medial -- zñ text = gsub(text, "^zñ", "gy") -- initial text = gsub(text, "zñ", "gg") -- medial -- Cy text = gsub(text, "^khy", "kh" ) text = gsub(text, "([aéeióoüu])(" .. consonants_Latn_no_h .. ")y", "%1i%2%2") -- final "b" has inherent vowel text = gsub(text, "b$", "bo") text = gsub(text, "b ", "bo ") -- final r conjuncts text = gsub(text, "r([kszt])o$", "r%1") text = gsub(text, "r([kszt])o ", "r%1 ") text = gsub(text, "rkho$", "rkh") text = gsub(text, "rkho ", "rkh ") if match(text, "[ঁ-৽]") and mode ~= "debug" then return nil else return mw.ustring.toNFC(text) end end return export 6fshsmxvit10vblzt43vg3ii2h7mhne साँचा:as-noun 10 306860 487570 2026-09-01T16:23:40Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487570 wikitext text/x-wiki {{#invoke:checkparams|warn}}<!-- Validate template parameters -->{{head|as|noun|sort={{{sort|}}}|head={{{head|}}}|tr={{{tr|}}}|{{#if:{{{cl|}}}|classifier|}}|{{{cl|}}}}}<!-- --><noinclude>{{documentation}}</noinclude> 5d16s4jpu3jnav440i4bqd6wthv706z অন্ধবিশ্বাস 0 306861 487571 2026-09-01T16:23:56Z अजीत कुमार तिवारी 4887 +असमिया से शब्द. 487571 wikitext text/x-wiki == {{असमिया}} == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== बिना सोचे समझे किसी बात को मान लेना, विवेकरहित धारणा। (पुलिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===विशेषण=== {{as-noun}} # [[अंधविश्वास]] saz1ww59t7bqxjlrnc50nizy5thjwi4 487572 487571 2026-09-01T16:24:24Z अजीत कुमार तिवारी 4887 /* संज्ञा */ 487572 wikitext text/x-wiki == {{असमिया}} == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== बिना सोचे समझे किसी बात को मान लेना, विवेकरहित धारणा। (पुलिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===संज्ञा=== {{as-noun}} # [[अंधविश्वास]] bop1b7zctc0n5zg9gzzkdcvh1cf7d5d 487670 487572 2026-09-01T21:00:40Z SM7 6218 clean-up 487670 wikitext text/x-wiki == असमिया == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== बिना सोचे समझे किसी बात को मान लेना, विवेकरहित धारणा। (पुलिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===संज्ञा=== {{as-noun}} # [[अंधविश्वास]] nvk5x4aonbij751jpgmhytniijbqzmd 487686 487670 2026-09-02T03:28:51Z अजीत कुमार तिवारी 4887 /* हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश */ सुधार. 487686 wikitext text/x-wiki == असमिया == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== बिना सोचे समझे किसी बात को मान लेना, विवेकरहित धारणा। (पुल्लिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===संज्ञा=== {{as-noun}} # [[अंधविश्वास]] sd4wqspkts754htk4h0nmcfg6is6zem 487712 487686 2026-09-02T06:58:40Z अजीत कुमार तिवारी 4887 सुधार. 487712 wikitext text/x-wiki ==असमिया== ===संज्ञा=== {{as-noun}} # [[अंधविश्वास]] === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== बिना सोचे समझे किसी बात को मान लेना, विवेकरहित धारणा। (पुल्लिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] 8tzyq2fy4f0i13adz6ci1eepmnt8qpi मॉड्यूल:checkparams 828 306862 487573 2026-09-01T16:25:46Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487573 Scribunto text/plain local export = {} local compare_module = "Module:compare" local debug_module = "Module:debug" local maintenance_category_module = "Module:maintenance category" local parameters_module = "Module:parameters" local template_parser_module = "Module:template parser" local utilities_module = "Module:utilities" local concat = table.concat local get_current_title = mw.title.getCurrentTitle local html_create = mw.html.create local match = string.match local new_title = mw.title.new local next = next local pairs = pairs local require = require local select = select local sort = table.sort local tostring = tostring local type = type local function find_parameters(...) find_parameters = require(template_parser_module).find_parameters return find_parameters(...) end local function format_categories(...) format_categories = require(utilities_module).format_categories return format_categories(...) end local function formatted_error(...) formatted_error = require(debug_module).formatted_error return formatted_error(...) end local function process_params(...) process_params = require(parameters_module).process return process_params(...) end local function uses_hidden_category(...) uses_hidden_category = require(maintenance_category_module).uses_hidden_category return uses_hidden_category(...) end local compare local function get_compare() compare, get_compare = require(compare_module), nil return compare end -- Returns a table of all arguments in `template_args` which are not supported -- by `template_title` or listed in `additional`. local function get_invalid_args(template_title, template_args, additional) local content = template_title:getContent() if not content then -- This should only be possible if the input frame has been tampered with. error("Could not retrieve the page content of \"" .. template_title.prefixedText .. "\".") end local allowed_params, seen = {}, {} -- Detect all params used by the parent template. param:get_name() takes the -- parent frame arg table as an argument so that preprocessing will take -- them into account, since it will matter if the name contains another -- parameter (e.g. the outer param in "{{{foo{{{bar}}}baz}}}" will change -- depending on the value for bar=). `seen` memoizes results based on the -- raw parameter text (which is stored as a string in the parameter object), -- which avoids unnecessary param:get_name() calls, which are non-trivial. for param in find_parameters(content) do local raw = param.raw if not seen[raw] then allowed_params[param:get_name(template_args)] = true seen[raw] = true end end -- Add any additional allowed arguments. if additional then local i = 0 while true do i = i + 1 local param = additional[i] if param == nil then break end allowed_params[param] = true end end local invalid_args = select(2, process_params( template_args, allowed_params, "return unknown" )) if not next(invalid_args) then return invalid_args end -- Some templates use params 1 and 3 without using 2, which means that 2 -- will be in the list of invalid args when used as an empty placeholder -- (e.g. {{foo|foo||bar}}). Detect and remove any empty positional -- placeholder args. local max_pos = 0 for param in pairs(allowed_params) do if type(param) == "number" and param > max_pos then max_pos = param end end for param, arg in pairs(invalid_args) do if ( type(param) == "number" and param >= 1 and param < max_pos and -- Ignore if arg is empty, or only contains chars trimmed by -- MediaWiki when handling named parameters. match(arg, "^[%z\t-\v\r ]*$") ) then invalid_args[param] = nil end end return invalid_args end -- Convert `args` into an array of sorted PARAM=ARG strings, using the parameter -- name as the sortkey, with numbered params sorted before strings. local function args_to_sorted_tuples(args) local msg, i = {}, 0 for k, v in pairs(args) do i = i + 1 msg[i] = {k, v} end sort(msg, compare or get_compare()) for j = 1, i do msg[j] = concat(msg[j], "=") end return msg end local function apply_pre_tag(frame, invalid_args) return frame:extensionTag("pre", concat(invalid_args, "\n")) end local function make_message(template_name, invalid_args, no_link) local open, close if no_link then open, close = "", "" else open, close = "[[", "]]" end return "The template " .. open .. template_name .. close .. " does not use the parameter(s): " .. invalid_args .. " Please see " .. open .. "Module:checkparams" .. close .. " for help with this warning." end -- Called by non-Lua templates using "{{#invoke:checkparams|warn}}". `frame` -- is checked for the following params: -- `1=` (optional) a comma separated list of additional allowed parameters -- `nowarn=` (optional) do not include preview warning in warning_text -- `noattn=` (optional) do not include attention seeking span in in warning_text function export.warn(frame) local parent = frame:getParent() local template_name = parent:getTitle() local template_title = new_title(template_name) local boolean = {type = "boolean"} local iargs = process_params(frame.args, { [1] = {type = "parameter", sublist = true}, ["nowarn"] = boolean, ["noattn"] = boolean, }) local invalid_args = get_invalid_args(template_title, parent.args, iargs[1]) -- If there are no invalid template args, return. if not next(invalid_args) then return "" end -- Otherwise, generate "Invalid params" warning to be inserted onto the -- wiki page. local warn, attn, cat invalid_args = args_to_sorted_tuples(invalid_args) -- Show warning in previewer. if not iargs.nowarn then warn = tostring(html_create("sup") :addClass("error") :addClass("previewonly") :tag("small") :wikitext(make_message(template_name, apply_pre_tag(frame, invalid_args))) :allDone()) end -- Add attentionseeking message. <pre> tags don't work in HTML attributes, -- so use semicolons as delimiters. if not iargs.noattn then attn = tostring(html_create("span") :addClass("attentionseeking") :attr("title", make_message(template_name, concat(invalid_args, "; ") .. ".", "no_link")) :allDone()) end -- Categorize if neither the current page nor the template would go in a hidden maintenance category. if not (uses_hidden_category(get_current_title()) or uses_hidden_category(template_title)) then cat = format_categories("Pages using invalid parameters when calling " .. template_name, nil, "-", nil, "force_output") end return (warn or "") .. (attn or "") .. (cat or "") end -- Called by non-Lua templates using "{{#invoke:checkparams|error}}". `frame` -- is checked for the following params: -- `1=` (optional) a comma separated list of additional allowed parameters function export.error(frame) local parent = frame:getParent() local template_name = parent:getTitle() local additional = process_params(frame.args, { [1] = {type = "parameter", sublist = true}, })[1] local invalid_args = get_invalid_args(new_title(template_name), parent.args, additional) -- Use formatted_error, so that we can use <pre> tags in error messages: -- any whitespace which isn't trimmed is treated as literal, so errors -- caused by double-spaces or erroneous newlines in inputs need to be -- displayed accurately. if next(invalid_args) then return formatted_error(make_message( template_name, apply_pre_tag(frame, args_to_sorted_tuples(invalid_args)) )) end end return export 1xni2b4rbvraa0aaafw8qfbytlvtlrp मॉड्यूल:template parser 828 306863 487574 2026-09-01T16:31:50Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487574 Scribunto text/plain --[[ NOTE: This module works by using recursive backtracking to build a node tree, which can then be traversed as necessary. Because it is called by a number of high-use modules, it has been optimised for speed using a profiler, since it is used to scrape data from large numbers of pages very quickly. To that end, it rolls some of its own methods in cases where this is faster than using a function from one of the standard libraries. Please DO NOT "simplify" the code by removing these, since you are almost guaranteed to slow things down, which could seriously impact performance on pages which call this module hundreds or thousands of times. It has also been designed to emulate the native parser's behaviour as much as possible, which in some cases means replicating bugs or unintuitive behaviours in that code; these should not be "fixed", since it is important that the outputs are the same. Most of these originate from deficient regular expressions, which can't be used here, so the bugs have to be manually reintroduced as special cases (e.g. onlyinclude tags being case-sensitive and whitespace intolerant, unlike all other tags). If any of these are fixed, this module should also be updated accordingly. ]] local export = {} local data_module = "Module:template parser/data" local load_module = "Module:load" local magic_words_data_module = "Module:data/magic words" local pages_module = "Module:pages" local parser_extension_tags_data_module = "Module:data/parser extension tags" local parser_module = "Module:parser" local scribunto_module = "Module:Scribunto" local string_pattern_escape_module = "Module:string/patternEscape" local string_replacement_escape_module = "Module:string/replacementEscape" local string_utilities_module = "Module:string utilities" local table_length_module = "Module:table/length" local table_shallow_copy_module = "Module:table/shallowCopy" local table_sorted_pairs_module = "Module:table/sortedPairs" local title_is_title_module = "Module:title/isTitle" local title_make_title_module = "Module:title/makeTitle" local title_new_title_module = "Module:title/newTitle" local title_redirect_target_module = "Module:title/redirectTarget" local require = require local m_parser = require(parser_module) local mw = mw local mw_title = mw.title local mw_uri = mw.uri local string = string local table = table local anchor_encode = mw_uri.anchorEncode local build_template -- defined as export.buildTemplate below local class_else_type = m_parser.class_else_type local concat = table.concat local encode_uri = mw_uri.encode local find = string.find local format = string.format local gsub = string.gsub local html_create = mw.html.create local insert = table.insert local is_node = m_parser.is_node local lower = string.lower local match = string.match local next = next local pairs = pairs local parse -- defined as export.parse below local parse_template_name -- defined below local pcall = pcall local rep = string.rep local select = select local sub = string.sub local title_equals = mw_title.equals local tostring = m_parser.tostring local type = type local umatch = mw.ustring.match --[==[ Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==] local function decode_entities(...) decode_entities = require(string_utilities_module).decode_entities return decode_entities(...) end local function encode_entities(...) encode_entities = require(string_utilities_module).encode_entities return encode_entities(...) end local function get_link_target(...) get_link_target = require(pages_module).get_link_target return get_link_target(...) end local function is_title(...) is_title = require(title_is_title_module) return is_title(...) end local function load_data(...) load_data = require(load_module).load_data return load_data(...) end local function make_title(...) make_title = require(title_make_title_module) return make_title(...) end local function new_title(...) new_title = require(title_new_title_module) return new_title(...) end local function pattern_escape(...) pattern_escape = require(string_pattern_escape_module) return pattern_escape(...) end local function php_htmlspecialchars(...) php_htmlspecialchars = require(scribunto_module).php_htmlspecialchars return php_htmlspecialchars(...) end local function php_ltrim(...) php_ltrim = require(scribunto_module).php_ltrim return php_ltrim(...) end local function php_trim(...) php_trim = require(scribunto_module).php_trim return php_trim(...) end local function redirect_target(...) redirect_target = require(title_redirect_target_module) return redirect_target(...) end local function replacement_escape(...) replacement_escape = require(string_replacement_escape_module) return replacement_escape(...) end local function scribunto_parameter_key(...) scribunto_parameter_key = require(scribunto_module).scribunto_parameter_key return scribunto_parameter_key(...) end local function shallow_copy(...) shallow_copy = require(table_shallow_copy_module) return shallow_copy(...) end local function sorted_pairs(...) sorted_pairs = require(table_sorted_pairs_module) return sorted_pairs(...) end local function split(...) split = require(string_utilities_module).split return split(...) end local function table_len(...) table_len = require(table_length_module) return table_len(...) end local function uupper(...) uupper = require(string_utilities_module).upper return uupper(...) end --[==[ Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==] local data local function get_data() data, get_data = load_data(data_module), nil return data end local frame local function get_frame() frame, get_frame = mw.getCurrentFrame(), nil return frame end local magic_words local function get_magic_words() magic_words, get_magic_words = load_data(magic_words_data_module), nil return magic_words end local parser_extension_tags local function get_parser_extension_tags() parser_extension_tags, get_parser_extension_tags = load_data(parser_extension_tags_data_module), nil return parser_extension_tags end ------------------------------------------------------------------------------------ -- -- Nodes -- ------------------------------------------------------------------------------------ local Node = m_parser.node() local new_node = Node.new local function expand(obj, frame_args) return is_node(obj) and obj:expand(frame_args) or obj end export.expand = expand function Node:expand(frame_args) local output = {} for i = 1, #self do output[i] = expand(self[i], frame_args) end return concat(output) end local Wikitext = Node:new_class("wikitext") -- force_node ensures the output will always be a Wikitext node. function Wikitext:new(this, force_node) if type(this) ~= "table" then return force_node and new_node(self, {this}) or this elseif #this == 1 then local this1 = this[1] return force_node and class_else_type(this1) ~= "wikitext" and new_node(self, this) or this1 end local success, str = pcall(concat, this) if success then return force_node and new_node(self, {str}) or str end return new_node(self, this) end -- First value is the parameter name. -- Second value is the parameter's default value. -- Any additional values are ignored: e.g. "{{{a|b|c}}}" is parameter "a" with default value "b" (*not* "b|c"). local Parameter = Node:new_class("parameter") function Parameter:new(this) local this2 = this[2] if class_else_type(this2) == "argument" then insert(this2, 2, "=") this2 = Wikitext:new(this2) end if this[3] == nil then this[2] = this2 else this = {this[1], this2} end return new_node(self, this) end function Parameter:__tostring() local output = {} for i = 1, #self do output[i] = tostring(self[i]) end return "{{{" .. concat(output, "|") .. "}}}" end function Parameter:get_name(frame_args) return scribunto_parameter_key(expand(self[1], frame_args)) end function Parameter:get_default(frame_args) local default = self[2] if default ~= nil then return expand(default, frame_args) end return "{{{" .. expand(self[1], frame_args) .. "}}}" end function Parameter:expand(frame_args) if frame_args == nil then return self:get_default() end local name = expand(self[1], frame_args) local val = frame_args[scribunto_parameter_key(name)] -- Parameter in use. if val ~= nil then return val end val = self[2] -- Default. if val ~= nil then return expand(val, frame_args) end return "{{{" .. name .. "}}}" end local Argument = Node:new_class("argument") function Argument:new(this) local key = this._parse_data.key this = Wikitext:new(this) if key == nil then return this end return new_node(self, {Wikitext:new(key), this}) end function Argument:__tostring() return tostring(self[1]) .. "=" .. tostring(self[2]) end function Argument:expand(frame_args) return expand(self[1], frame_args) .. "=" .. expand(self[2], frame_args) end local Template = Node:new_class("template") function Template:__tostring() local output = {} for i = 1, #self do output[i] = tostring(self[i]) end return "{{" .. concat(output, "|") .. "}}" end -- Normalize the template name, check it's a valid template, then memoize results (using false for invalid titles). -- Parser functions (e.g. {{#IF:a|b|c}}) need to have the first argument extracted from the title, as it comes after the colon. Because of this, the parser function and first argument are memoized as a table. -- FIXME: Some parser functions have special argument handling (e.g. {{#SWITCH:}}). do local templates, parser_variables, parser_functions = {}, {}, {} local function retrieve_magic_word_data(chunk) local mgw_data = (magic_words or get_magic_words())[chunk] if mgw_data then return mgw_data end local normalized = uupper(chunk) mgw_data = magic_words[normalized] if mgw_data and not mgw_data.case_sensitive then return mgw_data end end -- Returns the name required to transclude the title object `title` using -- template {{ }} syntax. If the `shortcut` flag is set, then any calls -- which require a namespace prefix will use the abbreviated form where one -- exists (e.g. "Template:PAGENAME" becomes "T:PAGENAME"). local function get_template_invocation_name(title, shortcut) if not (is_title(title) and not title.isExternal) then error("Template invocations require a valid page title, which cannot contain an interwiki prefix.") end local namespace = title.namespace -- If not in the template namespace, include the prefix (or ":" if -- mainspace). if namespace ~= 10 then return get_link_target(title, shortcut) end -- If in the template namespace and it shares a name with a magic word, -- it needs the prefix "Template:". local text, fragment = title.text, title.fragment if fragment and fragment ~= "" then text = text .. "#" .. fragment end local colon = find(text, ":", nil, true) if not colon then local mgw_data = retrieve_magic_word_data(text) return mgw_data and mgw_data.parser_variable and get_link_target(title, shortcut) or text end local mgw_data = retrieve_magic_word_data(sub(text, 1, colon - 1)) if mgw_data and (mgw_data.parser_function or mgw_data.transclusion_modifier) then return get_link_target(title, shortcut) end -- Also if "Template:" is necessary for disambiguation (e.g. -- "Template:Category:Foo" can't be called with "Category:Foo"). local check = new_title(text, namespace) return check and title_equals(title, check) and text or get_link_target(title, shortcut) end export.getTemplateInvocationName = get_template_invocation_name function parse_template_name(name, has_args, fragment, force_transclusion) local chunks, colon, start, n, p = {}, find(name, ":", nil, true), 1, 0, 0 while colon do local mgw_data = retrieve_magic_word_data(php_ltrim(sub(name, start, colon - 1))) if not mgw_data then break end local priority = mgw_data.priority if not (priority and priority > p) then local pf = mgw_data.parser_function and mgw_data.name or nil if pf then n = n + 1 chunks[n] = pf .. ":" return chunks, "parser function", sub(name, colon + 1) end break end n = n + 1 chunks[n] = mgw_data.name .. ":" start, p = colon + 1, priority colon = find(name, ":", start, true) end if start > 1 then name = sub(name, start) end name = php_trim(name) -- Parser variables can only take SUBST:/SAFESUBST: as modifiers. if not has_args and p <= 1 then local mgw_data = retrieve_magic_word_data(name) local pv = mgw_data and mgw_data.parser_variable and mgw_data.name or nil if pv then n = n + 1 chunks[n] = pv return chunks, "parser variable" end end -- Get the template title with the custom new_title() function in -- [[Module:title/newTitle]], with `allowOnlyFragment` set to false -- (e.g. "{{#foo}}" is invalid) and `allowRelative` set to true, for -- relative links for namespaces with subpages (e.g. "{{/foo}}"). local title = new_title(name, 10, false, true) if not (title and not title.isExternal) then return nil end if force_transclusion ~= "no_redirect" then -- Resolve any redirects. If the redirect target is an interwiki link, -- the template won't fail, but the redirect does not get resolved (i.e. -- the redirect page itself gets transcluded, so the template name -- should not be normalized to the target). local redirect = redirect_target(title, force_transclusion) if redirect and not redirect.isExternal then title = redirect end end -- If `fragment` is not true, unset it from the title object to prevent -- it from being included by get_template_invocation_name. if not fragment then title.fragment = "" end chunks[n + 1] = get_template_invocation_name(title) return chunks, "template" end -- Note: `force_transclusion` avoids incrementing the expensive parser function count by forcing transclusion -- instead. This should only be used when there is a real risk that the expensive parser function limit of -- 500 will be hit. If `force_transclusion` has the value "no_redirect", redirect checking is turned off -- entirely. This should only be used in very limited circumstances when it is otherwise impossible to avoid -- hitting the expensive parser limit and we are willing to handle the possible redirects ourselves. local function process_name(self, frame_args, force_transclusion) local name = expand(self[1], frame_args) local has_args, norm = #self > 1 if not has_args then norm = parser_variables[name] if norm then return norm, "parser variable" end end norm = templates[name] if norm then local pf_arg1 = parser_functions[name] return norm, pf_arg1 and "parser function" or "template", pf_arg1 elseif norm == false then return nil end local chunks, subclass, pf_arg1 = parse_template_name(name, has_args, nil, force_transclusion) -- Fail if invalid. if not chunks then templates[name] = false return nil end local chunk1 = chunks[1] -- Fail on SUBST:. if chunk1 == "SUBST:" then templates[name] = false return nil -- Any modifiers are ignored. elseif subclass == "parser function" then local pf = chunks[#chunks] templates[name] = pf parser_functions[name] = pf_arg1 return pf, "parser function", pf_arg1 end -- Ignore SAFESUBST:, and treat MSGNW: as a parser function with the pagename as its first argument (ignoring any RAW: that comes after). if chunks[chunk1 == "SAFESUBST:" and 2 or 1] == "MSGNW:" then pf_arg1 = chunks[#chunks] local pf = "MSGNW:" templates[name] = pf parser_functions[name] = pf_arg1 return pf, "parser function", pf_arg1 end -- Ignore any remaining modifiers, as they've done their job. local output = chunks[#chunks] if subclass == "parser variable" then parser_variables[name] = output else templates[name] = output end return output, subclass end function Template:get_name(frame_args, force_transclusion) -- Only return the first return value. return (process_name(self, frame_args, force_transclusion)) end function Template:get_arguments(frame_args) local name, subclass, pf_arg1 = process_name(self, frame_args) if name == nil then return nil elseif subclass == "parser variable" then return {} end local template_args = {} if subclass == "parser function" then template_args[1] = pf_arg1 for i = 2, #self do template_args[i] = expand(self[i], frame_args) -- Not trimmed. end return template_args end local implicit = 0 for i = 2, #self do local arg = self[i] if class_else_type(arg) == "argument" then template_args[scribunto_parameter_key(expand(arg[1], frame_args))] = php_trim((expand(arg[2], frame_args))) else implicit = implicit + 1 template_args[implicit] = expand(arg, frame_args) -- Not trimmed. end end return template_args end -- BIG TODO: manual template expansion. function Template:expand(frame_args) local name, subclass, pf_arg1 = process_name(self, frame_args) if name == nil then local output = {} for i = 1, #self do output[i] = expand(self[i], frame_args) end return "{{" .. concat(output, "|") .. "}}" elseif subclass == "parser variable" then return (frame or get_frame()):preprocess("{{" .. name .. "}}") elseif subclass == "parser function" then local f = frame or get_frame() if frame_args ~= nil then local success, new_f = pcall(f.newChild, f, {args = frame_args}) if success then f = new_f end end return f:preprocess(tostring(self)) end local output = {} for i = 1, #self do output[i] = expand(self[i], frame_args) end return (frame or get_frame()):preprocess("{{" .. concat(output, "|") .. "}}") end end local Tag = Node:new_class("tag") function Tag:__tostring() local open_tag, attributes, n = {"<", self.name}, self:get_attributes(), 2 for attr, value in next, attributes do n = n + 1 open_tag[n] = " " .. php_htmlspecialchars(attr) .. "=\"" .. php_htmlspecialchars(value, "compat") .. "\"" end if self.self_closing then return concat(open_tag) .. "/>" end return concat(open_tag) .. ">" .. concat(self) .. "</" .. self.name .. ">" end do local valid_attribute_name local function get_valid_attribute_name() valid_attribute_name, get_valid_attribute_name = (data or get_data()).valid_attribute_name, nil return valid_attribute_name end function Tag:get_attributes() local raw = self.attributes if not raw then self.attributes = {} return self.attributes elseif type(raw) == "table" then return raw end if sub(raw, -1) == "/" then raw = sub(raw, 1, -2) end local attributes, head = {}, 1 -- Semi-manual implementation of the native regex. while true do local name, loc = match(raw, "([^\t\n\f\r />][^\t\n\f\r /=>]*)()", head) if not name then break end head = loc local value loc = match(raw, "^[\t\n\f\r ]*=[\t\n\f\r ]*()", head) if loc then head = loc -- Either "", '' or the value ends on a space/at the end. Missing -- end quotes are repaired by closing the value at the end. value, loc = match(raw, "^\"([^\"]*)\"?()", head) if not value then value, loc = match(raw, "^'([^']*)'?()", head) if not value then value, loc = match(raw, "^([^\t\n\f\r ]*)()", head) end end head = loc end -- valid_attribute_name is a pattern matching a valid attribute name. -- Defined in the data due to its length - see there for more info. if umatch(name, valid_attribute_name or get_valid_attribute_name()) then -- Sanitizer applies PHP strtolower (ASCII-only). attributes[lower(name)] = value and decode_entities( php_trim((gsub(value, "[\t\n\r ]+", " "))) ) or "" end end self.attributes = attributes return attributes end end function Tag:expand() return (frame or get_frame()):preprocess(tostring(self)) end local Heading = Node:new_class("heading") function Heading:new(this) if #this > 1 then local success, str = pcall(concat, this) if success then return new_node(self, { str, level = this.level, section = this.section, index = this.index }) end end return new_node(self, this) end do local node_tostring = Node.__tostring function Heading:__tostring() local eq = rep("=", self.level) return eq .. node_tostring(self) .. eq end end do local expand_node = Node.expand -- Expanded heading names can contain "\n" (e.g. inside nowiki tags), which -- causes any heading containing them to fail. However, in such cases, the -- native parser still treats it as a heading for the purpose of section -- numbers. local function validate_name(self, frame_args) local name = expand_node(self, frame_args) if find(name, "\n", nil, true) then return nil end return name end function Heading:get_name(frame_args) local name = validate_name(self, frame_args) return name ~= nil and php_trim(name) or nil end -- FIXME: account for anchor disambiguation. function Heading:get_anchor(frame_args) local name = validate_name(self, frame_args) return name ~= nil and decode_entities(anchor_encode(name)) or nil end function Heading:expand(frame_args) local eq = rep("=", self.level) return eq .. expand_node(self, frame_args) .. eq end end ------------------------------------------------------------------------------------ -- -- Parser -- ------------------------------------------------------------------------------------ local Parser = m_parser.string_parser() -- Template or parameter. -- Parsed by matching the opening braces innermost-to-outermost (ignoring lone closing braces). Parameters {{{ }}} take priority over templates {{ }} where possible, but a double closing brace will always result in a closure, even if there are 3+ opening braces. -- For example, "{{{{foo}}}}" (4) is parsed as a parameter enclosed by single braces, and "{{{{{foo}}}}}" (5) is a parameter inside a template. However, "{{{{{foo }} }}}" is a template inside a parameter, due to "}}" forcing the closure of the inner node. do -- Handlers. local handle_name local handle_argument local handle_value local function do_template_or_parameter(self, inner_node) self:push_sublayer(handle_name) self:set_pattern("[\n<[{|}]") -- If a node has already been parsed, nest it at the start of the new -- outer node (e.g. when parsing"{{{{foo}}bar}}", the template "{{foo}}" -- is parsed first, since it's the innermost, and becomes the first -- node of the outer template. if inner_node then self:emit(inner_node) end end local function pipe(self) self:emit(Wikitext:new(self:pop_sublayer())) self:push_sublayer(handle_argument) self:set_pattern("[\n<=[{|}]") end local function rbrace(self, this) if self:read(1) == "}" then self:emit(Wikitext:new(self:pop_sublayer())) return self:pop() end self:emit(this) end function handle_name(self, ...) handle_name = self:switch(handle_name, { ["\n"] = Parser.heading_block, ["<"] = Parser.tag, ["["] = Parser.wikilink_block, ["{"] = Parser.braces, ["|"] = pipe, ["}"] = rbrace, [""] = Parser.fail_route, [false] = Parser.emit }) return handle_name(self, ...) end function handle_argument(self, ...) handle_argument = self:switch(handle_argument, { ["\n"] = function(self, this) return self:heading_block(this, "==") end, ["<"] = Parser.tag, ["="] = function(self) local key = self:pop_sublayer() self:push_sublayer(handle_value) self:set_pattern("[\n<[{|}]") self.current_layer._parse_data.key = key end, ["["] = Parser.wikilink_block, ["{"] = Parser.braces, ["|"] = pipe, ["}"] = rbrace, [""] = Parser.fail_route, [false] = Parser.emit }) return handle_argument(self, ...) end function handle_value(self, ...) handle_value = self:switch(handle_value, { ["\n"] = Parser.heading_block, ["<"] = Parser.tag, ["["] = Parser.wikilink_block, ["{"] = Parser.braces, ["|"] = function(self) self:emit(Argument:new(self:pop_sublayer())) self:push_sublayer(handle_argument) self:set_pattern("[\n<=[{|}]") end, ["}"] = function(self, this) if self:read(1) == "}" then self:emit(Argument:new(self:pop_sublayer())) return self:pop() end self:emit(this) end, [""] = Parser.fail_route, [false] = Parser.emit }) return handle_value(self, ...) end function Parser:template_or_parameter() local text, head, node_to_emit, failed = self.text, self.head -- Comments/tags interrupt the brace count. local braces = match(text, "^{+()", head) - head self:advance(braces) while true do local success, node = self:try(do_template_or_parameter, node_to_emit) -- Fail means no "}}" or "}}}" was found, so emit any remaining -- unmatched opening braces before any templates/parameters that -- were found. if not success then self:emit(rep("{", braces)) failed = true break -- If there are 3+ opening and closing braces, it's a parameter. elseif braces >= 3 and self:read(2) == "}" then self:advance(3) braces = braces - 3 node = Parameter:new(node) -- Otherwise, it's a template. else self:advance(2) braces = braces - 2 node = Template:new(node) end local index = head + braces node.index = index node.raw = sub(text, index, self.head - 1) node_to_emit = node -- Terminate once not enough braces remain for further matches. if braces == 0 then break -- Emit any stray opening brace before any matched nodes. elseif braces == 1 then self:emit("{") break end end if node_to_emit then self:emit(node_to_emit) end return braces, failed end end -- Tag. do local end_tags local function get_end_tags() end_tags, get_end_tags = (data or get_data()).end_tags, nil return end_tags end -- Handlers. local handle_start local handle_tag local function do_tag(self) local layer = self.current_layer layer._parse_data.handler, layer.index = handle_start, self.head self:set_pattern("[%s/>]") self:advance() end local function is_ignored_tag(self, this) if self.transcluded then return this == "includeonly" end return this == "noinclude" or this == "onlyinclude" end local function ignored_tag(self, text, head) local loc = find(text, ">", head, true) if not loc then return self:fail_route() end self:jump(loc) local tag = self:pop() tag.ignored = true return tag end function handle_start(self, this) if this == "/" then local text, head = self.text, self.head + 1 local this = match(text, "^[^%s/>]+", head) if this and is_ignored_tag(self, lower(this)) then head = head + #this if not match(text, "^/[^>]", head) then return ignored_tag(self, text, head) end end return self:fail_route() elseif this == "" then return self:fail_route() end -- Tags are only case-insensitive with ASCII characters. local raw_name = this this = lower(this) local end_tag_pattern = (end_tags or get_end_tags())[this] if not end_tag_pattern then -- Validity check. return self:fail_route() end local layer = self.current_layer local pdata = layer._parse_data local text, head = self.text, self.head + pdata.step if match(text, "^/[^>]", head) then return self:fail_route() elseif is_ignored_tag(self, this) then return ignored_tag(self, text, head) -- If an onlyinclude tag is not ignored (and cannot be active since it -- would have triggered special handling earlier), it must be plaintext. elseif this == "onlyinclude" then return self:fail_route() elseif this == "noinclude" or this == "includeonly" then layer.ignored = true -- Ignored block. layer.raw_name = raw_name end layer.name, pdata.handler, pdata.end_tag_pattern = this, handle_tag, end_tag_pattern self:set_pattern(">") end function handle_tag(self, this) if this == "" then return self:fail_route() end local layer = self.current_layer if this ~= ">" then layer.attributes = this return elseif self:read(-1) == "/" then layer.self_closing = true return self:pop() end local text, head = self.text, self.head + 1 local loc1, loc2 = find(text, layer._parse_data.end_tag_pattern, head) if loc1 then if loc1 > head then self:emit(sub(text, head, loc1 - 1)) end self:jump(loc2) return self:pop() -- noinclude and includeonly will tolerate having no closing tag, but -- only if given in lowercase. This is due to a preprocessor bug, as -- it uses a regex with the /i (case-insensitive) flag to check for -- end tags, but a simple array lookup with lowercase tag names when -- looking up which tags should tolerate no closing tag (exact match -- only, so case-sensitive). elseif layer.ignored then local raw_name = layer.raw_name if raw_name == "noinclude" or raw_name == "includeonly" then self:jump(#text) return self:pop() end end return self:fail_route() end function Parser:tag() -- HTML comment. if self:read(1, 3) == "!--" then local text = self.text self:jump(select(2, find(text, "-->", self.head + 4, true)) or #text) -- onlyinclude tags (which must be lowercase with no whitespace). elseif self.onlyinclude and self:read(1, 13) == "/onlyinclude>" then local text = self.text self:jump(select(2, find(text, "<onlyinclude>", self.head + 14, true)) or #text) else local success, tag = self:try(do_tag) if not success then self:emit("<") elseif not tag.ignored then self:emit(Tag:new(tag)) end end end end -- Heading. -- The preparser assigns each heading a number, which is used for things like section edit links. The preparser will only do this for heading blocks which aren't nested inside templates, parameters and parser tags. In some cases (e.g. when template blocks contain untrimmed newlines), a preparsed heading may not be treated as a heading in the final output. That does not affect the preparser, however, which will always count sections based on the preparser heading count, since it can't know what a template's final output will be. do -- Handlers. local handle_start local handle_body local handle_possible_end local function do_heading(self) local layer, head = self.current_layer, self.head layer._parse_data.handler, layer.index = handle_start, head self:set_pattern("[\t\n ]") -- Comments/tags interrupt the equals count. local eq = match(self.text, "^=+()", head) - head layer.level = eq self:advance(eq) end local function do_heading_possible_end(self) self.current_layer._parse_data.handler = handle_possible_end self:set_pattern("[\n<]") end function handle_start(self, ...) -- ===== is "=" as an L2; ======== is "==" as an L3 etc. local function newline(self) local layer = self.current_layer local eq = layer.level if eq <= 2 then return self:fail_route() end -- Calculate which equals signs determine the heading level. local level_eq = eq - (2 - eq % 2) level_eq = level_eq > 12 and 12 or level_eq -- Emit the excess. self:emit(rep("=", eq - level_eq)) layer.level = level_eq / 2 return self:pop() end local function whitespace(self) local success, possible_end = self:try(do_heading_possible_end) if success then self:emit(Wikitext:new(possible_end)) self.current_layer._parse_data.handler = handle_body self:set_pattern("[\n<=[{]") return self:consume() end return newline(self) end handle_start = self:switch(handle_start, { ["\t"] = whitespace, ["\n"] = newline, [" "] = whitespace, [""] = newline, [false] = function(self) -- Emit any excess = signs once we know it's a conventional heading. Up till now, we couldn't know if the heading is just a string of = signs (e.g. ========), so it wasn't guaranteed that the heading text starts after the 6th. local layer = self.current_layer local eq = layer.level if eq > 6 then self:emit(1, rep("=", eq - 6)) layer.level = 6 end layer._parse_data.handler = handle_body self:set_pattern("[\n<=[{]") return self:consume() end }) return handle_start(self, ...) end function handle_body(self, ...) handle_body = self:switch(handle_body, { ["\n"] = Parser.fail_route, ["<"] = Parser.tag, ["="] = function(self) -- Comments/tags interrupt the equals count. local eq = match(self.text, "^=+", self.head) local eq_len = #eq self:advance(eq_len) local success, possible_end = self:try(do_heading_possible_end) if success then self:emit(eq) self:emit(Wikitext:new(possible_end)) return self:consume() end local layer = self.current_layer local level = layer.level if eq_len > level then self:emit(rep("=", eq_len - level)) elseif level > eq_len then layer.level = eq_len self:emit(1, rep("=", level - eq_len)) end return self:pop() end, ["["] = Parser.wikilink_block, ["{"] = function(self, this) return self:braces(this, true) end, [""] = Parser.fail_route, [false] = Parser.emit }) return handle_body(self, ...) end function handle_possible_end(self, ...) handle_possible_end = self:switch(handle_possible_end, { ["\n"] = Parser.fail_route, ["<"] = function(self) if self:read(1, 3) ~= "!--" then return self:pop() end local head = select(2, find(self.text, "-->", self.head + 4, true)) if not head then return self:pop() end self:jump(head) end, [""] = Parser.fail_route, [false] = function(self, this) if not match(this, "^[\t ]+()$") then return self:pop() end self:emit(this) end }) return handle_possible_end(self, ...) end function Parser:heading() local success, heading = self:try(do_heading) if success then local section = self.section + 1 heading.section = section self.section = section self:emit(Heading:new(heading)) return self:consume() else self:emit("=") end end end ------------------------------------------------------------------------------------ -- -- Block handlers -- ------------------------------------------------------------------------------------ -- Block handlers. -- These are blocks which can affect template/parameter parsing, since they're also parsed by Parsoid at the same time (even though they aren't processed until later). -- All blocks (including templates/parameters) can nest inside each other, but an inner block must be closed before the outer block which contains it. This is why, for example, the wikitext "{{template| [[ }}" will result in an unprocessed template, since the inner "[[" is treated as the opening of a wikilink block, which prevents "}}" from being treated as the closure of the template block. On the other hand, "{{template| [[ ]] }}" will process correctly, since the wikilink block is closed before the template closure. It makes no difference whether the block will be treated as valid or not when it's processed later on, so "{{template| [[ }} ]] }}" would also work, even though "[[ }} ]]" is not a valid wikilink. -- Note that nesting also affects pipes and equals signs, in addition to block closures. -- These blocks can be nested to any degree, so "{{template| [[ [[ [[ ]] }}" will not work, since only one of the three wikilink blocks has been closed. On the other hand, "{{template| [[ [[ [[ ]] ]] ]] }}" will work. -- All blocks are implicitly closed by the end of the text, since their validity is irrelevant at this stage. -- Language conversion block. -- Opens with "-{" and closes with "}-". However, templates/parameters take priority, so "-{{" is parsed as "-" followed by the opening of a template/parameter block (depending on what comes after). -- Note: Language conversion blocks aren't actually enabled on the English Wiktionary, but Parsoid still parses them at this stage, so they can affect the closure of outer blocks: e.g. "[[ -{ ]]" is not a valid wikilink block, since the "]]" falls inside the new language conversion block. do --Handler. local handle_language_conversion_block local function do_language_conversion_block(self) self.current_layer._parse_data.handler = handle_language_conversion_block self:set_pattern("[\n<[{}]") end function handle_language_conversion_block(self, ...) handle_language_conversion_block = self:switch(handle_language_conversion_block, { ["\n"] = Parser.heading_block, ["<"] = Parser.tag, ["["] = Parser.wikilink_block, ["{"] = Parser.braces, ["}"] = function(self, this) if self:read(1) == "-" then self:emit("}-") self:advance() return self:pop() end self:emit(this) end, [""] = Parser.pop, [false] = Parser.emit }) return handle_language_conversion_block(self, ...) end function Parser:braces(this, fail_on_unclosed_braces) local language_conversion_block = self:read(-1) == "-" if self:read(1) == "{" then local braces, failed = self:template_or_parameter() -- Headings will fail if they contain an unclosed brace block. if failed and fail_on_unclosed_braces then return self:fail_route() -- Language conversion blocks cannot begin "-{{", but can begin -- "-{{{" iff parsed as "-{" + "{{". elseif not (language_conversion_block and braces == 1) then return self:consume() end else self:emit(this) if not language_conversion_block then return end self:advance() end self:emit(Wikitext:new(self:get(do_language_conversion_block))) end end --[==[ Headings Opens with "\n=" (or "=" at the start of the text), and closes with "\n" or the end of the text. Note that it doesn't matter whether the heading will fail to process due to a premature newline (e.g. if there are no closing signs), so at this stage the only thing that matters for closure is the newline or end of text. Note: Heading blocks are only parsed like this if they occur inside a template, since they do not iterate the preparser's heading count (i.e. they aren't proper headings). Note 2: if directly inside a template argument with no previous equals signs, a newline followed by a single equals sign is parsed as an argument equals sign, not the opening of a new L1 heading block. This does not apply to any other heading levels. As such, {{template|key\n=}}, {{template|key\n=value}} or even {{template|\n=}} will successfully close, but {{template|key\n==}}, {{template|key=value\n=more value}}, {{template\n=}} etc. will not, since in the latter cases the "}}" would fall inside the new heading block. ]==] do --Handler. local handle_heading_block local function do_heading_block(self) self.current_layer._parse_data.handler = handle_heading_block self:set_pattern("[\n<[{]") end function handle_heading_block(self, ...) handle_heading_block = self:switch(handle_heading_block, { ["\n"] = function(self) self:newline() return self:pop() end, ["<"] = Parser.tag, ["["] = Parser.wikilink_block, ["{"] = Parser.braces, [""] = Parser.pop, [false] = Parser.emit }) return handle_heading_block(self, ...) end function Parser:heading_block(this, nxt) self:newline() this = this .. (nxt or "=") local loc = #this - 1 while self:read(0, loc) == this do self:advance() self:emit(Wikitext:new(self:get(do_heading_block))) end end end -- Wikilink block. -- Opens with "[[" and closes with "]]". do -- Handler. local handle_wikilink_block local function do_wikilink_block(self) self.current_layer._parse_data.handler = handle_wikilink_block self:set_pattern("[\n<[%]{]") end function handle_wikilink_block(self, ...) handle_wikilink_block = self:switch(handle_wikilink_block, { ["\n"] = Parser.heading_block, ["<"] = Parser.tag, ["["] = Parser.wikilink_block, ["]"] = function(self, this) if self:read(1) == "]" then self:emit("]]") self:advance() return self:pop() end self:emit(this) end, ["{"] = Parser.braces, [""] = Parser.pop, [false] = Parser.emit }) return handle_wikilink_block(self, ...) end function Parser:wikilink_block() if self:read(1) == "[" then self:emit("[[") self:advance(2) self:emit(Wikitext:new(self:get(do_wikilink_block))) else self:emit("[") end end end -- Lines which only contain comments, " " and "\t" are eaten, so long as -- they're bookended by "\n" (i.e. not the first or last line). function Parser:newline() local text, head = self.text, self.head while true do repeat local loc = match(text, "^[\t ]*<!%-%-()", head + 1) if not loc then break end loc = select(2, find(text, "-->", loc, true)) head = loc or head until not loc -- Fail if no comments found. if head == self.head then break end head = match(text, "^[\t ]*()\n", head + 1) if not head then break end self:jump(head) end self:emit("\n") end do -- Handlers. local handle_start local main_handler -- If `transcluded` is true, then the text is checked for a pair of -- onlyinclude tags. If these are found (even if they're in the wrong -- order), then the start of the page is treated as though it is preceded -- by a closing onlyinclude tag. -- Note 1: unlike other parser extension tags, onlyinclude tags are case- -- sensitive and cannot contain whitespace. -- Note 2: onlyinclude tags *can* be implicitly closed by the end of the -- text, but the hard requirement above means this can only happen if -- either the tags are in the wrong order or there are multiple onlyinclude -- blocks. local function do_parse(self, transcluded) self.current_layer._parse_data.handler = handle_start self:set_pattern(".") self.section = 0 if not transcluded then return end self.transcluded = true local text = self.text if find(text, "</onlyinclude>", nil, true) then local head = find(text, "<onlyinclude>", nil, true) if head then self.onlyinclude = true self:jump(head + 13) end end end -- If the first character is "=", try parsing it as a heading. function handle_start(self, this) self.current_layer._parse_data.handler = main_handler self:set_pattern("[\n<{]") if this == "=" then return self:heading() end return self:consume() end function main_handler(self, ...) main_handler = self:switch(main_handler, { ["\n"] = function(self) self:newline() if self:read(1) == "=" then self:advance() return self:heading() end end, ["<"] = Parser.tag, ["{"] = function(self, this) if self:read(1) == "{" then self:template_or_parameter() return self:consume() end self:emit(this) end, [""] = Parser.pop, [false] = Parser.emit }) return main_handler(self, ...) end function export.parse(text, transcluded) local text_type = type(text) return (select(2, Parser:parse{ text = text_type == "string" and text or text_type == "number" and tostring(text) or error("bad argument #1 (string expected, got " .. text_type .. ")"), node = {Wikitext, true}, route = {do_parse, transcluded} })) end parse = export.parse end function export.find_templates(text, not_transcluded) return parse(text, not not_transcluded):iterate_nodes("template") end do local link_parameter_1, link_parameter_2 local function get_link_parameter_1() link_parameter_1, get_link_parameter_1 = (data or get_data()).template_link_param_1, nil return link_parameter_1 end local function get_link_parameter_2() link_parameter_2, get_link_parameter_2 = (data or get_data()).template_link_param_2, nil return link_parameter_2 end -- Generate a link. If the target title doesn't have a fragment, use "#top" -- (which is an implicit anchor at the top of every page), as this ensures -- self-links still display as links, since bold display is distracting and -- unintuitive for template links. local function link_page(title, display) local fragment = title.fragment if fragment == "" then fragment = "top" end return format( "[[:%s|%s]]", encode_uri(title.prefixedText .. "#" .. fragment, "WIKI"), display ) end -- pf_arg1 or pf_arg2 may need to be linked if a given parser function -- treats them as a pagename. If a key exists in `namespace`, the value is -- the namespace for the page: if not 0, then the namespace prefix will -- always be added to the input (e.g. {{#invoke:}} can only target the -- Module: namespace, so inputting "Template:foo" gives -- "Module:Template:foo", and "Module:foo" gives "Module:Module:foo"). -- However, this isn't possible with mainspace (namespace 0), so prefixes -- are respected. make_title() handles all of this automatically. local function finalize_arg(pagename, namespace) if namespace == nil then return pagename end local title = make_title(namespace, pagename) return title and not title.isExternal and link_page(title, pagename) or pagename end local function render_title(name, args) -- parse_template_name returns a table of transclusion modifiers plus -- the normalized template/magic word name, which will be used as link -- targets. The third return value pf_arg1 is the first argument of a -- a parser function, which comes after the colon (e.g. "foo" in -- "{{#IF:foo|bar|baz}}"). This means args[1] (i.e. the first argument -- that comes after a pipe is actually argument 2, and so on. Note: the -- second parameter of parse_template_name checks if there are any -- arguments, since parser variables cannot take arguments (e.g. -- {{CURRENTYEAR}} is a parser variable, but {{CURRENTYEAR|foo}} -- transcludes "Template:CURRENTYEAR"). In such cases, the returned -- table explicitly includes the "Template:" prefix in the template -- name. The third parameter instructs it to retain any fragment in the -- template name in the returned table, if present. local chunks, subclass, pf_arg1 = parse_template_name( name, args and pairs(args)(args) ~= nil, true ) if chunks == nil then return name, args end local chunks_len = #chunks -- Additionally, generate the corresponding table `rawchunks`, which -- is a list of colon-separated chunks in the raw input. This is used -- to retrieve the display forms for each chunk. local rawchunks = split(name, ":") for i = 1, chunks_len - 1 do chunks[i] = format( "[[%s|%s]]", encode_uri((magic_words or get_magic_words())[sub(chunks[i], 1, -2)].transclusion_modifier, "WIKI"), rawchunks[i] ) end local chunk = chunks[chunks_len] -- If it's a template, return a link to it with link_page, concatenating -- the remaining chunks in `rawchunks` to form the display text. -- Use new_title with the default namespace 10 (Template:) to generate -- a target title, which is the same setting used for retrieving -- templates (including those in other namespaces, as prefixes override -- the default). if subclass == "template" then chunks[chunks_len] = link_page( new_title(chunk, 10), concat(rawchunks, "&#58;", chunks_len) -- : ) return concat(chunks, "&#58;"), args -- : elseif subclass == "parser variable" then chunks[chunks_len] = format( "[[%s|%s]]", encode_uri((magic_words or get_magic_words())[chunk].parser_variable, "WIKI"), rawchunks[chunks_len] ) return concat(chunks, "&#58;"), args -- : end -- Otherwise, it must be a parser function. local mgw_data = (magic_words or get_magic_words())[sub(chunk, 1, -2)] local link = mgw_data.parser_function or mgw_data.transclusion_modifier local pf_arg2 = args and args[1] or nil -- Some magic words have different links, depending on whether argument -- 2 is specified (e.g. "baz" in {{foo:bar|baz}}). if type(link) == "table" then link = pf_arg2 and link[2] or link[1] end chunks[chunks_len] = format( "[[%s|%s]]", encode_uri(link, "WIKI"), rawchunks[chunks_len] ) -- #TAG: has special handling, because documentation links for parser -- extension tags come from [[Module:data/parser extension tags]]. if chunk == "#TAG:" then -- Tags are only case-insensitive with ASCII characters. local tag = (parser_extension_tags or get_parser_extension_tags())[lower(php_trim(pf_arg1))] if tag then pf_arg1 = format( "[[%s|%s]]", encode_uri(tag, "WIKI"), pf_arg1 ) end -- Otherwise, finalize pf_arg1 and add it to `chunks`. else pf_arg1 = finalize_arg(pf_arg1, (link_parameter_1 or get_link_parameter_1())[chunk]) end chunks[chunks_len + 1] = pf_arg1 -- Finalize pf_arg2 (if applicable), then return. if pf_arg2 then args = shallow_copy(args) -- Avoid destructively modifying args. args[1] = finalize_arg(pf_arg2, (link_parameter_2 or get_link_parameter_2())[chunk]) end return concat(chunks, "&#58;"), args -- : end function export.buildTemplate(title, args) local output = {title} if not args then return output end -- Iterate over all numbered parameters in order, followed by any -- remaining parameters in codepoint order. Implicit parameters are -- used wherever possible, even if explicit numbers are interpolated -- between them (e.g. 0 would go before any implicit parameters, and -- 2.5 between 2 and 3). -- TODO: handle "=" and "|" in params/values. local implicit for k, v in sorted_pairs(args) do if type(k) == "number" and k >= 1 and k % 1 == 0 then if implicit == nil then implicit = table_len(args) end insert(output, k <= implicit and v or k .. "=" .. v) else insert(output, k .. "=" .. v) end end return output end build_template = export.buildTemplate function export.templateLink(title, args, no_link) if not no_link then title, args = render_title(title, args) end local output = build_template(title, args) for i = 1, #output do output[i] = encode_entities(output[i], "={}", true, true) end return tostring(html_create("code") :css("white-space", "pre-wrap") :wikitext("&#123;&#123;" .. concat(output, "&#124;") .. "&#125;&#125;") -- {{ | }} ) end end do function export.find_parameters(text, not_transcluded) return parse(text, not not_transcluded):iterate_nodes("parameter") end function export.displayParameter(name, default) return tostring(html_create("code") :css("white-space", "pre-wrap") :wikitext("&#123;&#123;&#123;" .. concat({name, default}, "&#124;") .. "&#125;&#125;&#125;") -- {{{ | }}} ) end end do local function check_level(level) if type(level) ~= "number" then error("Heading levels must be numbers.") elseif level < 1 or level > 6 or level % 1 ~= 0 then error("Heading levels must be integers between 1 and 6.") end return level end -- FIXME: should headings which contain "\n" be returned? This may depend -- on variable factors, like template expansion. They iterate the heading -- count number, but fail on rendering. However, in some cases a different -- heading might still be rendered due to intermediate equals signs; it -- may even be of a different heading level: e.g., this is parsed as an -- L2 heading with a newline (due to the wikilink block), but renders as the -- L1 heading "=foo[[". Section edit links are sometimes (but not always) -- present in such cases. -- ==[[= -- ]]== -- TODO: section numbers for edit links seem to also include headings -- nested inside templates and parameters (but apparently not those in -- parser extension tags - need to test this more). If we ever want to add -- section edit links manually, this will need to be accounted for. function export.find_headings(text, i, j) local parsed = parse(text) if i == nil and j == nil then return parse(text):iterate_nodes("heading") end i = i and check_level(i) or 1 j = j and check_level(j) or 6 return parsed:iterate(function(v) if class_else_type(v) == "heading" then local level = v.level return level >= i and level <= j end end) end end do local function make_tag(tag) return tostring(html_create("code") :css("white-space", "pre-wrap") :wikitext("&lt;" .. tag .. "&gt;") ) end -- Note: invalid tags are returned without links. function export.wikitagLink(tag) -- ">" can't appear in tags (including attributes) since the parser -- unconditionally treats ">" as the end of a tag. if find(tag, ">", nil, true) then return make_tag(tag) end -- Tags must start "<tagname..." or "</tagname...", with no whitespace -- after "<" or "</". local slash, tagname, remainder = match(tag, "^(/?)([^/%s]+)(.*)$") if not tagname then return make_tag(tag) end -- Tags are only case-insensitive with ASCII characters. local link = lower(tagname) if ( -- onlyinclude tags must be lowercase and are whitespace intolerant. link == "onlyinclude" and (link ~= tagname or remainder ~= "") or -- Closing wikitags (except onlyinclude) can only have whitespace -- after the tag name. slash == "/" and not match(remainder, "^%s*()$") or -- Tagnames cannot be followed immediately by "/", unless it comes -- at the end (e.g. "<nowiki/>", but not "<nowiki/ >"). remainder ~= "/" and sub(remainder, 1, 1) == "/" ) then -- Output with no link. return make_tag(tag) end -- Partial transclusion tags aren't in the table of parser extension -- tags. if link == "noinclude" or link == "includeonly" or link == "onlyinclude" then link = "mw:Transclusion#Partial transclusion" else link = (parser_extension_tags or get_parser_extension_tags())[link] end if link then tag = gsub(tag, pattern_escape(tagname), "[[" .. replacement_escape(encode_uri(link, "WIKI")) .. "|%0]]", 1) end return make_tag(tag) end end -- For convenience. export.class_else_type = class_else_type return export g7883esvq9rqr796jeq8jsmk6y4r8t1 मॉड्यूल:parser 828 306864 487575 2026-09-01T16:38:01Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487575 Scribunto text/plain local export = {} local scribunto_metamethods_module = "Module:Scribunto/metamethods" local table_deep_copy_module = "Module:table/deepCopy" local table_get_nested_module = "Module:table/getNested" local table_set_nested_module = "Module:table/setNested" local concat = table.concat local find = string.find local getmetatable = getmetatable local insert = table.insert local next = next local rawget = rawget local rawset = rawset local remove = table.remove local require = require local select = select local setmetatable = setmetatable local sub = string.sub local type = type local unpack = unpack or table.unpack -- Lua 5.2 compatibility local node_classes = {} local function deep_copy(...) deep_copy = require(table_deep_copy_module) return deep_copy(...) end local function get_nested(...) get_nested = require(table_get_nested_module) return get_nested(...) end local function set_nested(...) set_nested = require(table_set_nested_module) return set_nested(...) end --[==[ Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==] local metamethods local function get_metamethods() -- Use require, since lookup times are much slower with mw.loadData. metamethods, get_metamethods = require(scribunto_metamethods_module), nil return metamethods end ------------------------------------------------------------------------------------ -- -- Helper functions -- ------------------------------------------------------------------------------------ local function inherit_metamethods(child, parent) if parent then for method, value in next, parent do if child[method] == nil and (metamethods or get_metamethods())[method] ~= nil then child[method] = value end end end return child end local function signed_index(t, n) return n and n <= 0 and #t + 1 + n or n end local function is_node(value) if value == nil then return false end local mt = getmetatable(value) return not (mt == nil or node_classes[mt] == nil) end local function node_class(value) if value == nil then return nil end local mt = getmetatable(value) if mt == nil then return nil end return mt ~= nil and node_classes[mt] or nil end local function class_else_type(value) if value == nil then return type(value) end local mt = getmetatable(value) if mt == nil then return type(value) end local class = node_classes[mt] return class == nil and type(value) or class end -- Recursively calling tostring() adds to the C stack (limit: 200), whereas -- calling __tostring metamethods directly does not. Occasionally relevant when -- dealing with very deep nesting. local tostring do local _tostring = _G.tostring function tostring(value) if is_node(value) then return value:__tostring(value) end return _tostring(value) end end ------------------------------------------------------------------------------------ -- -- Nodes -- ------------------------------------------------------------------------------------ local Node = {} Node.__index = Node function Node:next(i) i = i + 1 return self[i], self, i end --[==[ Implements recursive iteration over a node tree. By default, when a node is encountered (which may contain other nodes), it is returned on the first iteration, and then any child nodes are returned on each subsequent iteration; the same process is then followed if any of those children contain nodes themselves. Once a particular node has been fully traversed, the iterator then continues with any sibling nodes. The iterator will use the `next` method of each node to traverse it, which may differ depending on the node class. Each iteration returns three values: `value`, `node` and `key`. Together, these can be used to manipulate the node tree at any given point without needing to know the full structure. Note that when the input node is returned on the first iteration, `node` and `key` will be nil. The optional argument `test` can be used to limit the return values. This should be a function that returns a boolean value, where a return value of true means that the child will be returned by the iterator. If a node is not returned by the iterator, it will still be traversed, as it may contain children that should be returned. The method `iterate_nodes` is provided as a special instance of iterate which uses `is_node` as the test.]==] function Node:iterate(test) local node, k, n, nodes, keys, returned_self = self, 0, 0 -- Special case if `test` is `is_node`. local is_node_is_test = test == is_node return function() if not returned_self then returned_self = true if test == nil or test(self) then return self end end -- Get `v`, which is the value at the last-returned key of the current node; if `v` is a node, it will be iterated over (i.e. recursive iteration). By default, `v` will be the last-returned value, but looking it up here means that any modifications made to the node during the loop will be taken into account. This makes it possible to swap one node out for something else (e.g. another node), or to remove it entirely, without being locked into recursively iterating over the old node; instead, the new node (if any) will be iterated over. This means node trees can be modified on-the-fly during the course of a single loop. local v, node_check = node[k], true while true do -- If `v` is a node, memoize the current node and key, then iterate over it. if node_check and is_node(v) then -- `n` is the current memo level. n = n + 1 if nodes then nodes[n], keys[n] = node, k else nodes, keys = {node}, {k} end node, k = v, 0 end v, node, k = node:next(k) -- If `v` is nil, move down one level, then continue iterating the node on that level (if any), or otherwise terminate the loop. if v == nil then if n == 0 then return nil end node, k, n = nodes[n], keys[n], n - 1 elseif test == nil or test(v) then return v, node, k -- If `test` is `is_node`, there's no point checking it again on the next loop. elseif node_check and is_node_is_test then node_check = false end end end end function Node:iterate_nodes(...) local args_n = select("#", ...) if args_n == 0 then return self:iterate(is_node) elseif args_n == 1 then local class = ... return self:iterate(function(value) return node_class(value) == class end) end local classes = {} for i = 1, args_n do classes[select(i, ...)] = true end return self:iterate(function(value) return classes[node_class(value)] end) end function Node:__tostring() local output = {} for i = 1, #self do insert(output, tostring(self[i])) end return concat(output) end function Node:clone() return deep_copy(self, "keep", true) end function Node:new_class(class) local t = {type = class} t.__index = t t = inherit_metamethods(t, self) node_classes[t] = class return setmetatable(t, self) end function Node:new(t) rawset(t, "_parse_data", nil) return setmetatable(t, self) end do local Proxy = {} function Proxy:__index(k) local v = Proxy[k] if v ~= nil then return v end return self.__chars[k] end function Proxy:__newindex(k, v) local key = self.__keys[k] if key then self.__chars[k] = v self.__parents[key] = v elseif key == false then error("Character is immutable.") else error("Invalid key.") end end function Proxy:build(a, b, c) local len = self.__len + 1 self.__chars[len] = a self.__parents[len] = b self.__keys[len] = c self.__len = len end function Proxy:iter(i) i = i + 1 local char = self.__chars[i] if char ~= nil then return i, self[i], self, self.__parents[i], self.__keys[i] end end function Node:new_proxy() return setmetatable({ __node = self, __chars = {}, __parents = {}, __keys = {}, __len = 0 }, Proxy) end end function export.node() return Node:new_class("node") end ------------------------------------------------------------------------------------ -- -- Parser -- ------------------------------------------------------------------------------------ local Parser = {} Parser.__index = Parser function Parser:get_layer(n) if n ~= nil then return rawget(self, #self + n) end return self.current_layer end function Parser:emit(a, b) local layer = self.current_layer if b ~= nil then insert(layer, signed_index(layer, a), b) else rawset(layer, #layer + 1, a) end end function Parser:emit_tokens(a, b) local layer = self.current_layer if b ~= nil then a = signed_index(layer, a) for i = 1, #b do insert(layer, a + i - 1, b[i]) end else local len = #layer for i = 1, #a do len = len + 1 rawset(layer, len, a[i]) end end end function Parser:remove(n) local layer = self.current_layer if n ~= nil then return remove(layer, signed_index(layer, n)) end local len = #layer local token = layer[len] layer[len] = nil return token end function Parser:replace(a, b) local layer = self.current_layer layer[signed_index(layer, a)] = b end -- Unlike default table.concat, this respects __tostring metamethods. function Parser:concat(a, b, c) if a == nil or a > 0 then return self:concat(0, a, b) end local layer, ret, n = self:get_layer(a), {}, 0 for i = b and signed_index(layer, b) or 1, c and signed_index(layer, c) or #layer do n = n + 1 ret[n] = tostring(layer[i]) end return concat(ret) end function Parser:emitted(delta) if delta == nil then delta = -1 end local get_layer, i = self.get_layer, 0 while true do local layer = get_layer(self, i) if layer == nil then return nil end local layer_len = #layer if -delta <= layer_len then return rawget(layer, layer_len + delta + 1) end delta = delta + layer_len i = i - 1 end end function Parser:push(route) local layer = {_parse_data = { head = self.head, route = route, }} self[#self + 1] = layer self.current_layer = layer end function Parser:push_sublayer(handler, inherit) local pdata = { handler = handler, sublayer = true, } local sublayer = { _parse_data = pdata, } if inherit then local layer_parse_data = self.current_layer._parse_data setmetatable(pdata, inherit_metamethods({ __index = layer_parse_data, __newindex = layer_parse_data }, getmetatable(layer_parse_data))) end self[#self + 1] = sublayer self.current_layer = sublayer end function Parser:pop() local len, layer = #self while true do layer = self[len] self[len] = nil len = len - 1 if len == 0 then self.current_layer = self break elseif layer._parse_data.sublayer == nil then self.current_layer = self[len] break end self:emit_tokens(layer) end return setmetatable(layer, nil) end function Parser:pop_sublayer() local len, layer = #self, self.current_layer self[len] = nil self.current_layer = len == 1 and self or self[len - 1] return setmetatable(layer, nil) end function Parser:get(route, ...) self:push(route) local layer = route(self, ...) if layer == nil then layer = self:traverse() end return layer end function Parser:try(route, ...) local failed_routes = self.failed_routes if failed_routes ~= nil then local failed_layer = get_nested(failed_routes, route, self.head) if failed_layer ~= nil then return false, failed_layer end end local layer = self:get(route, ...) return not layer._parse_data.fail, layer end function Parser:fail_route() local layer = self:pop() local pdata = layer._parse_data pdata.fail = true local layer_head = pdata.head set_nested(self, layer, "failed_routes", pdata.route, layer_head) self.head = layer_head return layer end function Parser:traverse() local consume, advance = self.consume, self.advance while true do local layer = consume(self) if layer ~= nil then return layer end advance(self) end end -- Converts a handler into a switch table the first time it's called, which avoids creating unnecessary objects, and prevents any scoping issues caused by parser methods being assigned to table keys before they've been declared. -- false is used as the default key. do local Switch = {} function Switch:__call(parser, this) return (self[this] or self[false])(parser, this) end function Parser:switch(func, t) local pdata = self.current_layer._parse_data -- Point handler to the new switch table if the calling function is the current handler. if pdata.handler == func then pdata.handler = t end return setmetatable(t, Switch) end end -- Generate a new parser class object, which is used as the template for any parser objects. These should be customized with additional/modified methods as needed. function Parser:new_class() local t = {} t.__index = t return setmetatable(inherit_metamethods(t, self), self) end -- Generate a new parser object, which is used for a specific parse. function Parser:new(text) return setmetatable({ text = text, head = 1 }, self) end function Parser:parse(data) local parser = self:new(data.text) local success, tokens = parser:try(unpack(data.route)) if #parser > 0 then -- This shouldn't happen. error("Parser exited with non-empty stack.") elseif success then local node = data.node return true, node[1]:new(tokens, unpack(node, 2)), parser elseif data.allow_fail then return false, nil, parser end error("Parser exited with failed route.") end export.class_else_type = class_else_type export.is_node = is_node export.tostring = tostring local ArrayParser = Parser:new_class() function ArrayParser:read(delta) local v = self.text[self.head + (delta or 0)] return v == nil and "" or v end function ArrayParser:advance(n) self.head = self.head + (n == nil and 1 or n) end function ArrayParser:jump(head) self.head = head end function ArrayParser:consume(this, ...) if this == nil then this = self:read() end local pdata = self.current_layer._parse_data return pdata.handler(self, this, ...) end function export.array_parser() return ArrayParser:new_class() end local StringParser = Parser:new_class() function StringParser:read(i, j) local head, i = self.head, i or 0 return sub(self.text, head + i, head + (j or i)) end function StringParser:advance(n) self.head = self.head + (n or self.current_layer._parse_data.step or 1) end function StringParser:jump(head) local pdata = self.current_layer._parse_data self.head, pdata.next, pdata.next_len = head, nil, nil end -- If `ignore_nonmatch` is set, any non-match segment before the match will be ignored. function StringParser:set_pattern(pattern, ignore_nonmatch) local pdata = self.current_layer._parse_data pdata.pattern, pdata.next, pdata.next_len = "(" .. pattern .. ")", nil, nil if ignore_nonmatch then pdata.ignore_nonmatch = true end end function StringParser:consume() local pdata = self.current_layer._parse_data local this = pdata.next -- Use `next` and `next_len` from the previous iteration, if available. if this then pdata.step, pdata.next, pdata.next_len = pdata.next_len, nil, nil return pdata.handler(self, this) end local text, head, loc1, loc2 = self.text, self.head loc1, loc2, this = find(text, pdata.pattern, head) -- If there was no match, default to find(text, "$", head), with `this` as -- the empty string. if not loc1 then this, loc1 = "", #text + 1 loc2 = loc1 - 1 -- zero-length matches cause loc2 to be less than loc1 end -- If `this` is at `head`, consume it. if loc1 == head then pdata.step = loc2 - loc1 + 1 -- If `ignore_nonmatch` is set, ignore everything before `this`, then -- consume it. elseif pdata.ignore_nonmatch then self.head, pdata.step = loc1, loc2 - loc1 + 1 -- Otherwise, consume everything before `this`, and memoize the match and -- match length; the length is dealt with separately, as it could be 0 if -- `next` is an index (e.g. if the pattern is the empty string). else this, pdata.step, pdata.next, pdata.next_len = sub(text, head, loc1 - 1), loc1 - head, this, loc2 - loc1 + 1 end return pdata.handler(self, this) end function export.string_parser() return StringParser:new_class() end return export itvslgsv46c1ywldkt63xzu5krykaov मॉड्यूल:Scribunto/metamethods 828 306865 487576 2026-09-01T16:39:12Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487576 Scribunto text/plain return { __add = true, __call = true, __concat = true, __div = true, __eq = true, __gc = true, __index = true, __ipairs = true, __le = true, __len = true, __lt = true, __metatable = true, __mod = true, __mode = true, __mul = true, __newindex = true, __pairs = true, __pow = true, __sub = true, __tostring = true, __unm = true, } 9ldqvu9rhlfkuksyro1b52m6ychbevm मॉड्यूल:load 828 306866 487577 2026-09-01T16:42:41Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487577 Scribunto text/plain local export = {} local load_data = mw.loadData local loaded = package.loaded local main_loader = package.loaders[2] local require = require local setmetatable = setmetatable local loaders, loaded_data, mt local function get_mt() mt, get_mt = {__mode = "kv"}, nil return mt end -- main_loader returns a loader function if the module exists, or nil if it doesn't. local function get_loader(modname) if loaders == nil then local loader = main_loader(modname) loaders = setmetatable({[modname] = loader or false}, mt or get_mt()) return loader end local loader = loaders[modname] if loader == nil then loader = main_loader(modname) loaders[modname] = loader or false end return loader or nil end local function get_data(modname, loader) if loaded_data == nil then local data = load_data(modname) loaded_data = setmetatable({[loader] = data}, mt or get_mt()) return data end local data = loaded_data[loader] if data == nil then data = load_data(modname) loaded_data[loader] = data end return data end --[==[ Like `require`, but returns `nil` if a module does not exist, instead of throwing an error. Outputs are cached, which is faster for all modules, but much faster for nonexistent modules, since `require` will attempt to use the full loader each time because loading failures don't get cached.]==] function export.safe_require(modname) local mod = loaded[modname] if mod == nil and get_loader(modname) then -- Call with require instead of the loader directly, as it protects against infinite loading loops. return require(modname) end return mod end --[==[ Like `mw.loadData`, but it does not generate a new table each time the same module is loaded via this function. Instead, it caches the returned data so that the same table can be returned each time, which is more efficient.]==] function export.load_data(modname) return get_data(modname, get_loader(modname)) end --[==[ Like `export.load_data` (itself a variant of `mw.loadData`), but returns `nil` if a module does not exist, instead of throwing an error. Outputs are cached, which is faster for all modules, but much faster for nonexistent modules, since `mw.loadData` will attempt to use the full loader each time because loading failures don't get cached.]==] function export.safe_load_data(modname) local loader = get_loader(modname) if loader == nil then return nil end return get_data(modname, loader) end return export ane0ji5isx9pytu6xaiacn5a70oo2t2 मॉड्यूल:template parser/data 828 306867 487578 2026-09-01T16:44:05Z SM7 6218 "local string = string local case_insensitive_pattern = require("Module:string utilities").case_insensitive_pattern local gsub = string.gsub local upper = string.upper local data = {} do local tags = mw.loadData("Module:data/parser extension tags") local data_end_tags = {} -- Generates the string pattern for the end tag. -- The preprocessor uses the regex "/<\/TAG\s*>/i", so only ASCII characters -- are case-insensitive...." के साथ नया पृष्ठ बनाया 487578 Scribunto text/plain local string = string local case_insensitive_pattern = require("Module:string utilities").case_insensitive_pattern local gsub = string.gsub local upper = string.upper local data = {} do local tags = mw.loadData("Module:data/parser extension tags") local data_end_tags = {} -- Generates the string pattern for the end tag. -- The preprocessor uses the regex "/<\/TAG\s*>/i", so only ASCII characters -- are case-insensitive. local function end_tag_pattern(tag) data_end_tags[tag] = "</" .. case_insensitive_pattern(tag, nil, true) .. "%s*>" end for tag in pairs(tags) do end_tag_pattern(tag) end end_tag_pattern("includeonly") end_tag_pattern("noinclude") data_end_tags["onlyinclude"] = true -- Pattern is not required, but a key is needed for tag validity checks. data.end_tags = data_end_tags end -- The parser's HTML sanitizer validates tag attributes with the regex -- "/^([:_\p{L}\p{N}][:_\.\-\p{L}\p{N}]*)$/sxu". Ustring's "%w" is defined as -- "[\p{L}\p{Nd}]", so any characters in \p{N} but not \p{Nd} must be added -- manually. -- NOTE: \p{N} *MUST* be defined according to the same version of Unicode that -- the sanitizer uses in order to remain in sync. As of September 2024, this is -- version 11.0. local N_not_Nd = "\194\178" .. -- U+00B2 "\194\179" .. -- U+00B3 "\194\185" .. -- U+00B9 "\194\188-\194\190" .. -- U+00BC-U+00BE "\224\167\180-\224\167\185" .. -- U+09F4-U+09F9 "\224\173\178-\224\173\183" .. -- U+0B72-U+0B77 "\224\175\176-\224\175\178" .. -- U+0BF0-U+0BF2 "\224\177\184-\224\177\190" .. -- U+0C78-U+0C7E "\224\181\152-\224\181\158" .. -- U+0D58-U+0D5E "\224\181\176-\224\181\184" .. -- U+0D70-U+0D78 "\224\188\170-\224\188\179" .. -- U+0F2A-U+0F33 "\225\141\169-\225\141\188" .. -- U+1369-U+137C "\225\155\174-\225\155\176" .. -- U+16EE-U+16F0 "\225\159\176-\225\159\185" .. -- U+17F0-U+17F9 "\225\167\154" .. -- U+19DA "\226\129\176" .. -- U+2070 "\226\129\180-\226\129\185" .. -- U+2074-U+2079 "\226\130\128-\226\130\137" .. -- U+2080-U+2089 "\226\133\144-\226\134\130" .. -- U+2150-U+2182 "\226\134\133-\226\134\137" .. -- U+2185-U+2189 "\226\145\160-\226\146\155" .. -- U+2460-U+249B "\226\147\170-\226\147\191" .. -- U+24EA-U+24FF "\226\157\182-\226\158\147" .. -- U+2776-U+2793 "\226\179\189" .. -- U+2CFD "\227\128\135" .. -- U+3007 "\227\128\161-\227\128\169" .. -- U+3021-U+3029 "\227\128\184-\227\128\186" .. -- U+3038-U+303A "\227\134\146-\227\134\149" .. -- U+3192-U+3195 "\227\136\160-\227\136\169" .. -- U+3220-U+3229 "\227\137\136-\227\137\143" .. -- U+3248-U+324F "\227\137\145-\227\137\159" .. -- U+3251-U+325F "\227\138\128-\227\138\137" .. -- U+3280-U+3289 "\227\138\177-\227\138\191" .. -- U+32B1-U+32BF "\234\155\166-\234\155\175" .. -- U+A6E6-U+A6EF "\234\160\176-\234\160\181" .. -- U+A830-U+A835 "\240\144\132\135-\240\144\132\179" .. -- U+10107-U+10133 "\240\144\133\128-\240\144\133\184" .. -- U+10140-U+10178 "\240\144\134\138" .. -- U+1018A "\240\144\134\139" .. -- U+1018B "\240\144\139\161-\240\144\139\187" .. -- U+102E1-U+102FB "\240\144\140\160-\240\144\140\163" .. -- U+10320-U+10323 "\240\144\141\129" .. -- U+10341 "\240\144\141\138" .. -- U+1034A "\240\144\143\145-\240\144\143\149" .. -- U+103D1-U+103D5 "\240\144\161\152-\240\144\161\159" .. -- U+10858-U+1085F "\240\144\161\185-\240\144\161\191" .. -- U+10879-U+1087F "\240\144\162\167-\240\144\162\175" .. -- U+108A7-U+108AF "\240\144\163\187-\240\144\163\191" .. -- U+108FB-U+108FF "\240\144\164\150-\240\144\164\155" .. -- U+10916-U+1091B "\240\144\166\188" .. -- U+109BC "\240\144\166\189" .. -- U+109BD "\240\144\167\128-\240\144\167\143" .. -- U+109C0-U+109CF "\240\144\167\146-\240\144\167\191" .. -- U+109D2-U+109FF "\240\144\169\128-\240\144\169\136" .. -- U+10A40-U+10A48 "\240\144\169\189" .. -- U+10A7D "\240\144\169\190" .. -- U+10A7E "\240\144\170\157-\240\144\170\159" .. -- U+10A9D-U+10A9F "\240\144\171\171-\240\144\171\175" .. -- U+10AEB-U+10AEF "\240\144\173\152-\240\144\173\159" .. -- U+10B58-U+10B5F "\240\144\173\184-\240\144\173\191" .. -- U+10B78-U+10B7F "\240\144\174\169-\240\144\174\175" .. -- U+10BA9-U+10BAF "\240\144\179\186-\240\144\179\191" .. -- U+10CFA-U+10CFF "\240\144\185\160-\240\144\185\190" .. -- U+10E60-U+10E7E "\240\144\188\157-\240\144\188\166" .. -- U+10F1D-U+10F26 "\240\144\189\145-\240\144\189\148" .. -- U+10F51-U+10F54 "\240\145\129\146-\240\145\129\165" .. -- U+11052-U+11065 "\240\145\135\161-\240\145\135\180" .. -- U+111E1-U+111F4 "\240\145\156\186" .. -- U+1173A "\240\145\156\187" .. -- U+1173B "\240\145\163\170-\240\145\163\178" .. -- U+118EA-U+118F2 "\240\145\177\154-\240\145\177\172" .. -- U+11C5A-U+11C6C "\240\146\144\128-\240\146\145\174" .. -- U+12400-U+1246E "\240\150\173\155-\240\150\173\161" .. -- U+16B5B-U+16B61 "\240\150\186\128-\240\150\186\150" .. -- U+16E80-U+16E96 "\240\157\139\160-\240\157\139\179" .. -- U+1D2E0-U+1D2F3 "\240\157\141\160-\240\157\141\184" .. -- U+1D360-U+1D378 "\240\158\163\135-\240\158\163\143" .. -- U+1E8C7-U+1E8CF "\240\158\177\177-\240\158\178\171" .. -- U+1EC71-U+1ECAB "\240\158\178\173-\240\158\178\175" .. -- U+1ECAD-U+1ECAF "\240\158\178\177-\240\158\178\180" .. -- U+1ECB1-U+1ECB4 "\240\159\132\128-\240\159\132\140" -- U+1F100-U+1F10C data.valid_attribute_name = "^[:_%w" .. N_not_Nd .."][:_.%-%w" .. N_not_Nd .. "]*$" -- Value is the namespace number of the linked page at parameter 0, where 0 is mainspace. -- If the namespace is the mainspace, it can be overridden by an explicitly specified category (e.g. {{PAGENAME:Category:Foo}} refers to "Category:Foo"). This does not apply to any other namespace (e.g. {{#SPECIAL:Category:Foo}} refers to "Special:Category:Foo"). data.template_link_param_1 = { ["#CATEGORYTREE:"] = 14, -- Category: ["#IFEXIST:"] = 0, ["#INVOKE:"] = 828, -- Module: ["#LST:"] = 0, ["#LSTH:"] = 0, ["#LSTX:"] = 0, ["#SPECIAL:"] = -1, -- Special: ["#SPECIALE:"] = -1, -- Special: ["#TITLEPARTS:"] = 0, ["BASEPAGENAME:"] = 0, ["BASEPAGENAMEE:"] = 0, ["CANONICALURL:"] = 0, ["CANONICALURLE:"] = 0, ["CASCADINGSOURCES:"] = 0, ["FILEPATH:"] = 6, -- File: ["FULLPAGENAME:"] = 0, ["FULLPAGENAMEE:"] = 0, ["FULLURL:"] = 0, ["FULLURLE:"] = 0, ["INT:"] = 8, -- MediaWiki: ["LOCALURL:"] = 0, ["LOCALURLE:"] = 0, ["NAMESPACE:"] = 0, ["NAMESPACEE:"] = 0, ["NAMESPACENUMBER:"] = 0, ["PAGEID:"] = 0, ["PAGENAME:"] = 0, ["PAGENAMEE:"] = 0, ["PAGESINCATEGORY:"] = 14, -- Category: ["PAGESIZE:"] = 0, ["REVISIONDAY:"] = 0, ["REVISIONDAY2:"] = 0, ["REVISIONID:"] = 0, ["REVISIONMONTH:"] = 0, ["REVISIONMONTH1:"] = 0, ["REVISIONTIMESTAMP:"] = 0, ["REVISIONUSER:"] = 0, ["REVISIONYEAR:"] = 0, ["ROOTPAGENAME:"] = 0, ["ROOTPAGENAMEE:"] = 0, ["SUBJECTPAGENAME:"] = 0, ["SUBJECTPAGENAMEE:"] = 0, ["SUBJECTSPACE:"] = 0, ["SUBJECTSPACEE:"] = 0, ["SUBPAGENAME:"] = 0, ["SUBPAGENAMEE:"] = 0, ["TALKPAGENAME:"] = 0, ["TALKPAGENAMEE:"] = 0, ["TALKSPACE:"] = 0, ["TALKSPACEE:"] = 0, } -- Value is the namespace number of the linked page at parameter 1. data.template_link_param_2 = { ["PROTECTIONEXPIRY:"] = 0, ["PROTECTIONLEVEL:"] = 0, } return data t4rorng7wydircsbpm0pxhr9wjhuh7e मॉड्यूल:data/parser extension tags 828 306868 487579 2026-09-01T16:45:44Z SM7 6218 "--Note: noinclude, includeonly and onlyinclude are not parser extension tags, as they are handled in a special way by the preprocessor. Among other things, they cannot be used with {{#TAG:}}, for example. return { ["categorytree"] = "mw:Extension:CategoryTree", ["ce"] = "mw:Extension:Math", ["charinsert"] = "mw:Extension:CharInsert", ["chem"] = "mw:Extension:Math", ["dynamicpagelist"] = "mw:Extension:DynamicPageList (Wikimed..." के साथ नया पृष्ठ बनाया 487579 Scribunto text/plain --Note: noinclude, includeonly and onlyinclude are not parser extension tags, as they are handled in a special way by the preprocessor. Among other things, they cannot be used with {{#TAG:}}, for example. return { ["categorytree"] = "mw:Extension:CategoryTree", ["ce"] = "mw:Extension:Math", ["charinsert"] = "mw:Extension:CharInsert", ["chem"] = "mw:Extension:Math", ["dynamicpagelist"] = "mw:Extension:DynamicPageList (Wikimedia)", ["gallery"] = "mw:Help:Images#Rendering a gallery of images", ["graph"] = "mw:Extension:Graph", ["hiero"] = "mw:Extension:WikiHiero", ["imagemap"] = "mw:Extension:ImageMap", ["indicator"] = "mw:Help:Page status indicators#Adding page status indicators", ["inputbox"] = "mw:Extension:InputBox", ["langconvert"] = "mw:Parser extension tags", -- undocumented ["mapframe"] = "mw:Extension:Kartographer", ["maplink"] = "mw:Extension:Kartographer", ["math"] = "mw:Extension:Math", ["nowiki"] = "mw:Help:Formatting", ["phonos"] = "mw:Extension:Phonos", ["poem"] = "mw:Extension:Poem", ["pre"] = "mw:Help:Formatting", ["ref"] = "mw:Extension:Cite", ["references"] = "mw:Extension:Cite", ["score"] = "mw:Extension:Score", ["section"] = "mw:Extension:Labeled Section Transclusion", ["source"] = "mw:Extension:SyntaxHighlight", ["syntaxhighlight"] = "mw:Extension:SyntaxHighlight", ["talkpage"] = "mw:Extension:LiquidThreads", -- undocumented ["templatedata"] = "mw:Extension:TemplateData", ["templatestyles"] = "mw:Extension:TemplateStyles", ["thread"] = "mw:Extension:LiquidThreads", -- undocumented ["timeline"] = "mw:Extension:EasyTimeline", } ofvfawk3x15dsa9oos9tt1283gyzpwv অকাপী 0 306869 487581 2026-09-01T16:58:28Z SM7 6218 असमिया संज्ञा शब्द 487581 wikitext text/x-wiki ==असमिया== {{wp|as:}} [[Image:Okapi2.jpg|thumb|एक ओकापी]] ===व्युत्पत्ति=== {{bor+|as|mxh|okapi}}. ===उच्चारण=== *{{as-IPA}} ===संज्ञा=== {{as-noun}} # [[ओकापी]] <!--({{taxfmt|-->''Okapia johnstoni''<!--|species}})--> ====Declension==== <!--{{as-noun-tz|okapi|য়ে|e}}--> <!--{{C|as|Mammals}}--> 07ghy13q8kpf1i4cfv6bslcvq4z60mp मॉड्यूल:headword/page 828 306870 487583 2026-09-01T17:17:07Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487583 Scribunto text/plain local export = {} local languages_module = "Module:languages" local maintenance_category_module = "Module:maintenance category" local pages_module = "Module:pages" local string_compare_module = "Module:string/compare" local string_decode_entities_module = "Module:string/decodeEntities" local string_remove_comments_module = "Module:string/removeComments" local string_utilities_module = "Module:string utilities" local table_module = "Module:table" local template_parser_module = "Module:template parser" local mw = mw local string = string local table = table local ustring = mw.ustring local concat = table.concat local find = string.find local format = string.format local gsub = string.gsub local insert = table.insert local load_data = mw.loadData local match = string.match local new_title = mw.title.new local pairs = pairs local require = require local sub = string.sub local toNFC = ustring.toNFC local toNFD = ustring.toNFD local ugsub = ustring.gsub local function class_else_type(...) class_else_type = require(template_parser_module).class_else_type return class_else_type(...) end local function decode_entities(...) decode_entities = require(string_decode_entities_module) return decode_entities(...) end local function encode_entities(...) encode_entities = require(string_utilities_module).encode_entities return encode_entities(...) end local function get_category(...) get_category = require(maintenance_category_module).get_category return get_category(...) end local function get_lang(...) get_lang = require(languages_module).getByCode return get_lang(...) end local function list_to_set(...) list_to_set = require(table_module).listToSet return list_to_set(...) end local function parse(...) parse = require(template_parser_module).parse return parse(...) end local function remove_comments(...) remove_comments = require(string_remove_comments_module) return remove_comments(...) end local function physical_to_logical_pagename_if_mammoth(...) physical_to_logical_pagename_if_mammoth = require(pages_module).physical_to_logical_pagename_if_mammoth return physical_to_logical_pagename_if_mammoth(...) end local function split(...) split = require(string_utilities_module).split return split(...) end local function string_compare(...) string_compare = require(string_compare_module) return string_compare(...) end local function uupper(...) uupper = require(string_utilities_module).upper return uupper(...) end --[==[ Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==] local langnames local function get_langnames() langnames, get_langnames = load_data("Module:languages/canonical names"), nil return langnames end -- Combining character data used when categorising unusual characters. These resolve into two patterns, used to find -- single combining characters (i.e. character + diacritic(s)) or double combining characters (i.e. character + -- diacritic(s) + character). -- Charsets are in the format used by Unicode's UnicodeSet tool: https://util.unicode.org/UnicodeJsps/list-unicodeset.jsp. -- Single combining characters. -- Charset: [[:M:]&[:^Canonical_Combining_Class=/^Double_/:]&[:^subhead=Grapheme joiner:]&[:^Variation_Selector=Yes:]] -- Note: concatenating hundreds of lines at once gives an error, so () are used every 150 lines to break it up into chunks. local comb_chars_single = ("\204\128-\205\142" .. -- U+0300-U+034E "\205\144-\205\155" .. -- U+0350-U+035B "\205\163-\205\175" .. -- U+0363-U+036F "\210\131-\210\137" .. -- U+0483-U+0489 "\214\145-\214\189" .. -- U+0591-U+05BD "\214\191" .. -- U+05BF "\215\129" .. -- U+05C1 "\215\130" .. -- U+05C2 "\215\132" .. -- U+05C4 "\215\133" .. -- U+05C5 "\215\135" .. -- U+05C7 "\216\144-\216\154" .. -- U+0610-U+061A "\217\139-\217\159" .. -- U+064B-U+065F "\217\176" .. -- U+0670 "\219\150-\219\156" .. -- U+06D6-U+06DC "\219\159-\219\164" .. -- U+06DF-U+06E4 "\219\167" .. -- U+06E7 "\219\168" .. -- U+06E8 "\219\170-\219\173" .. -- U+06EA-U+06ED "\220\145" .. -- U+0711 "\220\176-\221\138" .. -- U+0730-U+074A "\222\166-\222\176" .. -- U+07A6-U+07B0 "\223\171-\223\179" .. -- U+07EB-U+07F3 "\223\189" .. -- U+07FD "\224\160\150-\224\160\153" .. -- U+0816-U+0819 "\224\160\155-\224\160\163" .. -- U+081B-U+0823 "\224\160\165-\224\160\167" .. -- U+0825-U+0827 "\224\160\169-\224\160\173" .. -- U+0829-U+082D "\224\161\153-\224\161\155" .. -- U+0859-U+085B "\224\162\151-\224\162\159" .. -- U+0897-U+089F "\224\163\138-\224\163\161" .. -- U+08CA-U+08E1 "\224\163\163-\224\164\131" .. -- U+08E3-U+0903 "\224\164\186-\224\164\188" .. -- U+093A-U+093C "\224\164\190-\224\165\143" .. -- U+093E-U+094F "\224\165\145-\224\165\151" .. -- U+0951-U+0957 "\224\165\162" .. -- U+0962 "\224\165\163" .. -- U+0963 "\224\166\129-\224\166\131" .. -- U+0981-U+0983 "\224\166\188" .. -- U+09BC "\224\166\190-\224\167\132" .. -- U+09BE-U+09C4 "\224\167\135" .. -- U+09C7 "\224\167\136" .. -- U+09C8 "\224\167\139-\224\167\141" .. -- U+09CB-U+09CD "\224\167\151" .. -- U+09D7 "\224\167\162" .. -- U+09E2 "\224\167\163" .. -- U+09E3 "\224\167\190" .. -- U+09FE "\224\168\129-\224\168\131" .. -- U+0A01-U+0A03 "\224\168\188" .. -- U+0A3C "\224\168\190-\224\169\130" .. -- U+0A3E-U+0A42 "\224\169\135" .. -- U+0A47 "\224\169\136" .. -- U+0A48 "\224\169\139-\224\169\141" .. -- U+0A4B-U+0A4D "\224\169\145" .. -- U+0A51 "\224\169\176" .. -- U+0A70 "\224\169\177" .. -- U+0A71 "\224\169\181" .. -- U+0A75 "\224\170\129-\224\170\131" .. -- U+0A81-U+0A83 "\224\170\188" .. -- U+0ABC "\224\170\190-\224\171\133" .. -- U+0ABE-U+0AC5 "\224\171\135-\224\171\137" .. -- U+0AC7-U+0AC9 "\224\171\139-\224\171\141" .. -- U+0ACB-U+0ACD "\224\171\162" .. -- U+0AE2 "\224\171\163" .. -- U+0AE3 "\224\171\186-\224\171\191" .. -- U+0AFA-U+0AFF "\224\172\129-\224\172\131" .. -- U+0B01-U+0B03 "\224\172\188" .. -- U+0B3C "\224\172\190-\224\173\132" .. -- U+0B3E-U+0B44 "\224\173\135" .. -- U+0B47 "\224\173\136" .. -- U+0B48 "\224\173\139-\224\173\141" .. -- U+0B4B-U+0B4D "\224\173\149-\224\173\151" .. -- U+0B55-U+0B57 "\224\173\162" .. -- U+0B62 "\224\173\163" .. -- U+0B63 "\224\174\130" .. -- U+0B82 "\224\174\190-\224\175\130" .. -- U+0BBE-U+0BC2 "\224\175\134-\224\175\136" .. -- U+0BC6-U+0BC8 "\224\175\138-\224\175\141" .. -- U+0BCA-U+0BCD "\224\175\151" .. -- U+0BD7 "\224\176\128-\224\176\132" .. -- U+0C00-U+0C04 "\224\176\188" .. -- U+0C3C "\224\176\190-\224\177\132" .. -- U+0C3E-U+0C44 "\224\177\134-\224\177\136" .. -- U+0C46-U+0C48 "\224\177\138-\224\177\141" .. -- U+0C4A-U+0C4D "\224\177\149" .. -- U+0C55 "\224\177\150" .. -- U+0C56 "\224\177\162" .. -- U+0C62 "\224\177\163" .. -- U+0C63 "\224\178\129-\224\178\131" .. -- U+0C81-U+0C83 "\224\178\188" .. -- U+0CBC "\224\178\190-\224\179\132" .. -- U+0CBE-U+0CC4 "\224\179\134-\224\179\136" .. -- U+0CC6-U+0CC8 "\224\179\138-\224\179\141" .. -- U+0CCA-U+0CCD "\224\179\149" .. -- U+0CD5 "\224\179\150" .. -- U+0CD6 "\224\179\162" .. -- U+0CE2 "\224\179\163" .. -- U+0CE3 "\224\179\179" .. -- U+0CF3 "\224\180\128-\224\180\131" .. -- U+0D00-U+0D03 "\224\180\187" .. -- U+0D3B "\224\180\188" .. -- U+0D3C "\224\180\190-\224\181\132" .. -- U+0D3E-U+0D44 "\224\181\134-\224\181\136" .. -- U+0D46-U+0D48 "\224\181\138-\224\181\141" .. -- U+0D4A-U+0D4D "\224\181\151" .. -- U+0D57 "\224\181\162" .. -- U+0D62 "\224\181\163" .. -- U+0D63 "\224\182\129-\224\182\131" .. -- U+0D81-U+0D83 "\224\183\138" .. -- U+0DCA "\224\183\143-\224\183\148" .. -- U+0DCF-U+0DD4 "\224\183\150" .. -- U+0DD6 "\224\183\152-\224\183\159" .. -- U+0DD8-U+0DDF "\224\183\178" .. -- U+0DF2 "\224\183\179" .. -- U+0DF3 "\224\184\177" .. -- U+0E31 "\224\184\180-\224\184\186" .. -- U+0E34-U+0E3A "\224\185\135-\224\185\142" .. -- U+0E47-U+0E4E "\224\186\177" .. -- U+0EB1 "\224\186\180-\224\186\188" .. -- U+0EB4-U+0EBC "\224\187\136-\224\187\142" .. -- U+0EC8-U+0ECE "\224\188\152" .. -- U+0F18 "\224\188\153" .. -- U+0F19 "\224\188\181" .. -- U+0F35 "\224\188\183" .. -- U+0F37 "\224\188\185" .. -- U+0F39 "\224\188\190" .. -- U+0F3E "\224\188\191" .. -- U+0F3F "\224\189\177-\224\190\132" .. -- U+0F71-U+0F84 "\224\190\134" .. -- U+0F86 "\224\190\135" .. -- U+0F87 "\224\190\141-\224\190\151" .. -- U+0F8D-U+0F97 "\224\190\153-\224\190\188" .. -- U+0F99-U+0FBC "\224\191\134" .. -- U+0FC6 "\225\128\171-\225\128\190" .. -- U+102B-U+103E "\225\129\150-\225\129\153" .. -- U+1056-U+1059 "\225\129\158-\225\129\160" .. -- U+105E-U+1060 "\225\129\162-\225\129\164" .. -- U+1062-U+1064 "\225\129\167-\225\129\173" .. -- U+1067-U+106D "\225\129\177-\225\129\180" .. -- U+1071-U+1074 "\225\130\130-\225\130\141" .. -- U+1082-U+108D "\225\130\143" .. -- U+108F "\225\130\154-\225\130\157" .. -- U+109A-U+109D "\225\141\157-\225\141\159" .. -- U+135D-U+135F "\225\156\146-\225\156\149" .. -- U+1712-U+1715 "\225\156\178-\225\156\180" .. -- U+1732-U+1734 "\225\157\146" .. -- U+1752 "\225\157\147" .. -- U+1753 "\225\157\178" .. -- U+1772 "\225\157\179" .. -- U+1773 "\225\158\180-\225\159\147") .. -- U+17B4-U+17D3 ("\225\159\157" .. -- U+17DD "\225\162\133" .. -- U+1885 "\225\162\134" .. -- U+1886 "\225\162\169" .. -- U+18A9 "\225\164\160-\225\164\171" .. -- U+1920-U+192B "\225\164\176-\225\164\187" .. -- U+1930-U+193B "\225\168\151-\225\168\155" .. -- U+1A17-U+1A1B "\225\169\149-\225\169\158" .. -- U+1A55-U+1A5E "\225\169\160-\225\169\188" .. -- U+1A60-U+1A7C "\225\169\191" .. -- U+1A7F "\225\170\176-\225\171\142" .. -- U+1AB0-U+1ACE "\225\172\128-\225\172\132" .. -- U+1B00-U+1B04 "\225\172\180-\225\173\132" .. -- U+1B34-U+1B44 "\225\173\171-\225\173\179" .. -- U+1B6B-U+1B73 "\225\174\128-\225\174\130" .. -- U+1B80-U+1B82 "\225\174\161-\225\174\173" .. -- U+1BA1-U+1BAD "\225\175\166-\225\175\179" .. -- U+1BE6-U+1BF3 "\225\176\164-\225\176\183" .. -- U+1C24-U+1C37 "\225\179\144-\225\179\146" .. -- U+1CD0-U+1CD2 "\225\179\148-\225\179\168" .. -- U+1CD4-U+1CE8 "\225\179\173" .. -- U+1CED "\225\179\180" .. -- U+1CF4 "\225\179\183-\225\179\185" .. -- U+1CF7-U+1CF9 "\225\183\128-\225\183\140" .. -- U+1DC0-U+1DCC "\225\183\142-\225\183\187" .. -- U+1DCE-U+1DFB "\225\183\189-\225\183\191" .. -- U+1DFD-U+1DFF "\226\131\144-\226\131\176" .. -- U+20D0-U+20F0 "\226\179\175-\226\179\177" .. -- U+2CEF-U+2CF1 "\226\181\191" .. -- U+2D7F "\226\183\160-\226\183\191" .. -- U+2DE0-U+2DFF "\227\128\170-\227\128\175" .. -- U+302A-U+302F "\227\130\153" .. -- U+3099 "\227\130\154" .. -- U+309A "\234\153\175-\234\153\178" .. -- U+A66F-U+A672 "\234\153\180-\234\153\189" .. -- U+A674-U+A67D "\234\154\158" .. -- U+A69E "\234\154\159" .. -- U+A69F "\234\155\176" .. -- U+A6F0 "\234\155\177" .. -- U+A6F1 "\234\160\130" .. -- U+A802 "\234\160\134" .. -- U+A806 "\234\160\139" .. -- U+A80B "\234\160\163-\234\160\167" .. -- U+A823-U+A827 "\234\160\172" .. -- U+A82C "\234\162\128" .. -- U+A880 "\234\162\129" .. -- U+A881 "\234\162\180-\234\163\133" .. -- U+A8B4-U+A8C5 "\234\163\160-\234\163\177" .. -- U+A8E0-U+A8F1 "\234\163\191" .. -- U+A8FF "\234\164\166-\234\164\173" .. -- U+A926-U+A92D "\234\165\135-\234\165\147" .. -- U+A947-U+A953 "\234\166\128-\234\166\131" .. -- U+A980-U+A983 "\234\166\179-\234\167\128" .. -- U+A9B3-U+A9C0 "\234\167\165" .. -- U+A9E5 "\234\168\169-\234\168\182" .. -- U+AA29-U+AA36 "\234\169\131" .. -- U+AA43 "\234\169\140" .. -- U+AA4C "\234\169\141" .. -- U+AA4D "\234\169\187-\234\169\189" .. -- U+AA7B-U+AA7D "\234\170\176" .. -- U+AAB0 "\234\170\178-\234\170\180" .. -- U+AAB2-U+AAB4 "\234\170\183" .. -- U+AAB7 "\234\170\184" .. -- U+AAB8 "\234\170\190" .. -- U+AABE "\234\170\191" .. -- U+AABF "\234\171\129" .. -- U+AAC1 "\234\171\171-\234\171\175" .. -- U+AAEB-U+AAEF "\234\171\181" .. -- U+AAF5 "\234\171\182" .. -- U+AAF6 "\234\175\163-\234\175\170" .. -- U+ABE3-U+ABEA "\234\175\172" .. -- U+ABEC "\234\175\173" .. -- U+ABED "\239\172\158" .. -- U+FB1E "\239\184\160-\239\184\175" .. -- U+FE20-U+FE2F "\240\144\135\189" .. -- U+101FD "\240\144\139\160" .. -- U+102E0 "\240\144\141\182-\240\144\141\186" .. -- U+10376-U+1037A "\240\144\168\129-\240\144\168\131" .. -- U+10A01-U+10A03 "\240\144\168\133" .. -- U+10A05 "\240\144\168\134" .. -- U+10A06 "\240\144\168\140-\240\144\168\143" .. -- U+10A0C-U+10A0F "\240\144\168\184-\240\144\168\186" .. -- U+10A38-U+10A3A "\240\144\168\191" .. -- U+10A3F "\240\144\171\165" .. -- U+10AE5 "\240\144\171\166" .. -- U+10AE6 "\240\144\180\164-\240\144\180\167" .. -- U+10D24-U+10D27 "\240\144\181\169-\240\144\181\173" .. -- U+10D69-U+10D6D "\240\144\186\171" .. -- U+10EAB "\240\144\186\172" .. -- U+10EAC "\240\144\187\188-\240\144\187\191" .. -- U+10EFC-U+10EFF "\240\144\189\134-\240\144\189\144" .. -- U+10F46-U+10F50 "\240\144\190\130-\240\144\190\133" .. -- U+10F82-U+10F85 "\240\145\128\128-\240\145\128\130" .. -- U+11000-U+11002 "\240\145\128\184-\240\145\129\134" .. -- U+11038-U+11046 "\240\145\129\176" .. -- U+11070 "\240\145\129\179" .. -- U+11073 "\240\145\129\180" .. -- U+11074 "\240\145\129\191-\240\145\130\130" .. -- U+1107F-U+11082 "\240\145\130\176-\240\145\130\186" .. -- U+110B0-U+110BA "\240\145\131\130" .. -- U+110C2 "\240\145\132\128-\240\145\132\130" .. -- U+11100-U+11102 "\240\145\132\167-\240\145\132\180" .. -- U+11127-U+11134 "\240\145\133\133" .. -- U+11145 "\240\145\133\134" .. -- U+11146 "\240\145\133\179" .. -- U+11173 "\240\145\134\128-\240\145\134\130" .. -- U+11180-U+11182 "\240\145\134\179-\240\145\135\128" .. -- U+111B3-U+111C0 "\240\145\135\137-\240\145\135\140" .. -- U+111C9-U+111CC "\240\145\135\142" .. -- U+111CE "\240\145\135\143" .. -- U+111CF "\240\145\136\172-\240\145\136\183" .. -- U+1122C-U+11237 "\240\145\136\190" .. -- U+1123E "\240\145\137\129" .. -- U+11241 "\240\145\139\159-\240\145\139\170" .. -- U+112DF-U+112EA "\240\145\140\128-\240\145\140\131" .. -- U+11300-U+11303 "\240\145\140\187" .. -- U+1133B "\240\145\140\188" .. -- U+1133C "\240\145\140\190-\240\145\141\132" .. -- U+1133E-U+11344 "\240\145\141\135" .. -- U+11347 "\240\145\141\136" .. -- U+11348 "\240\145\141\139-\240\145\141\141" .. -- U+1134B-U+1134D "\240\145\141\151" .. -- U+11357 "\240\145\141\162" .. -- U+11362 "\240\145\141\163" .. -- U+11363 "\240\145\141\166-\240\145\141\172" .. -- U+11366-U+1136C "\240\145\141\176-\240\145\141\180" .. -- U+11370-U+11374 "\240\145\142\184-\240\145\143\128" .. -- U+113B8-U+113C0 "\240\145\143\130" .. -- U+113C2 "\240\145\143\133" .. -- U+113C5 "\240\145\143\135-\240\145\143\138" .. -- U+113C7-U+113CA "\240\145\143\140-\240\145\143\144" .. -- U+113CC-U+113D0 "\240\145\143\146" .. -- U+113D2 "\240\145\143\161" .. -- U+113E1 "\240\145\143\162" .. -- U+113E2 "\240\145\144\181-\240\145\145\134" .. -- U+11435-U+11446 "\240\145\145\158" .. -- U+1145E "\240\145\146\176-\240\145\147\131" .. -- U+114B0-U+114C3 "\240\145\150\175-\240\145\150\181" .. -- U+115AF-U+115B5 "\240\145\150\184-\240\145\151\128" .. -- U+115B8-U+115C0 "\240\145\151\156" .. -- U+115DC "\240\145\151\157" .. -- U+115DD "\240\145\152\176-\240\145\153\128" .. -- U+11630-U+11640 "\240\145\154\171-\240\145\154\183" .. -- U+116AB-U+116B7 "\240\145\156\157-\240\145\156\171" .. -- U+1171D-U+1172B "\240\145\160\172-\240\145\160\186" .. -- U+1182C-U+1183A "\240\145\164\176-\240\145\164\181" .. -- U+11930-U+11935 "\240\145\164\183" .. -- U+11937 "\240\145\164\184" .. -- U+11938 "\240\145\164\187-\240\145\164\190" .. -- U+1193B-U+1193E "\240\145\165\128") .. -- U+11940 ("\240\145\165\130" .. -- U+11942 "\240\145\165\131" .. -- U+11943 "\240\145\167\145-\240\145\167\151" .. -- U+119D1-U+119D7 "\240\145\167\154-\240\145\167\160" .. -- U+119DA-U+119E0 "\240\145\167\164" .. -- U+119E4 "\240\145\168\129-\240\145\168\138" .. -- U+11A01-U+11A0A "\240\145\168\179-\240\145\168\185" .. -- U+11A33-U+11A39 "\240\145\168\187-\240\145\168\190" .. -- U+11A3B-U+11A3E "\240\145\169\135" .. -- U+11A47 "\240\145\169\145-\240\145\169\155" .. -- U+11A51-U+11A5B "\240\145\170\138-\240\145\170\153" .. -- U+11A8A-U+11A99 "\240\145\176\175-\240\145\176\182" .. -- U+11C2F-U+11C36 "\240\145\176\184-\240\145\176\191" .. -- U+11C38-U+11C3F "\240\145\178\146-\240\145\178\167" .. -- U+11C92-U+11CA7 "\240\145\178\169-\240\145\178\182" .. -- U+11CA9-U+11CB6 "\240\145\180\177-\240\145\180\182" .. -- U+11D31-U+11D36 "\240\145\180\186" .. -- U+11D3A "\240\145\180\188" .. -- U+11D3C "\240\145\180\189" .. -- U+11D3D "\240\145\180\191-\240\145\181\133" .. -- U+11D3F-U+11D45 "\240\145\181\135" .. -- U+11D47 "\240\145\182\138-\240\145\182\142" .. -- U+11D8A-U+11D8E "\240\145\182\144" .. -- U+11D90 "\240\145\182\145" .. -- U+11D91 "\240\145\182\147-\240\145\182\151" .. -- U+11D93-U+11D97 "\240\145\187\179-\240\145\187\182" .. -- U+11EF3-U+11EF6 "\240\145\188\128" .. -- U+11F00 "\240\145\188\129" .. -- U+11F01 "\240\145\188\131" .. -- U+11F03 "\240\145\188\180-\240\145\188\186" .. -- U+11F34-U+11F3A "\240\145\188\190-\240\145\189\130" .. -- U+11F3E-U+11F42 "\240\145\189\154" .. -- U+11F5A "\240\147\145\128" .. -- U+13440 "\240\147\145\135-\240\147\145\149" .. -- U+13447-U+13455 "\240\150\132\158-\240\150\132\175" .. -- U+1611E-U+1612F "\240\150\171\176-\240\150\171\180" .. -- U+16AF0-U+16AF4 "\240\150\172\176-\240\150\172\182" .. -- U+16B30-U+16B36 "\240\150\189\143" .. -- U+16F4F "\240\150\189\145-\240\150\190\135" .. -- U+16F51-U+16F87 "\240\150\190\143-\240\150\190\146" .. -- U+16F8F-U+16F92 "\240\150\191\164" .. -- U+16FE4 "\240\150\191\176" .. -- U+16FF0 "\240\150\191\177" .. -- U+16FF1 "\240\155\178\157" .. -- U+1BC9D "\240\155\178\158" .. -- U+1BC9E "\240\156\188\128-\240\156\188\173" .. -- U+1CF00-U+1CF2D "\240\156\188\176-\240\156\189\134" .. -- U+1CF30-U+1CF46 "\240\157\133\165-\240\157\133\169" .. -- U+1D165-U+1D169 "\240\157\133\173-\240\157\133\178" .. -- U+1D16D-U+1D172 "\240\157\133\187-\240\157\134\130" .. -- U+1D17B-U+1D182 "\240\157\134\133-\240\157\134\139" .. -- U+1D185-U+1D18B "\240\157\134\170-\240\157\134\173" .. -- U+1D1AA-U+1D1AD "\240\157\137\130-\240\157\137\132" .. -- U+1D242-U+1D244 "\240\157\168\128-\240\157\168\182" .. -- U+1DA00-U+1DA36 "\240\157\168\187-\240\157\169\172" .. -- U+1DA3B-U+1DA6C "\240\157\169\181" .. -- U+1DA75 "\240\157\170\132" .. -- U+1DA84 "\240\157\170\155-\240\157\170\159" .. -- U+1DA9B-U+1DA9F "\240\157\170\161-\240\157\170\175" .. -- U+1DAA1-U+1DAAF "\240\158\128\128-\240\158\128\134" .. -- U+1E000-U+1E006 "\240\158\128\136-\240\158\128\152" .. -- U+1E008-U+1E018 "\240\158\128\155-\240\158\128\161" .. -- U+1E01B-U+1E021 "\240\158\128\163" .. -- U+1E023 "\240\158\128\164" .. -- U+1E024 "\240\158\128\166-\240\158\128\170" .. -- U+1E026-U+1E02A "\240\158\130\143" .. -- U+1E08F "\240\158\132\176-\240\158\132\182" .. -- U+1E130-U+1E136 "\240\158\138\174" .. -- U+1E2AE "\240\158\139\172-\240\158\139\175" .. -- U+1E2EC-U+1E2EF "\240\158\147\172-\240\158\147\175" .. -- U+1E4EC-U+1E4EF "\240\158\151\174" .. -- U+1E5EE "\240\158\151\175" .. -- U+1E5EF "\240\158\163\144-\240\158\163\150" .. -- U+1E8D0-U+1E8D6 "\240\158\165\132-\240\158\165\138") -- U+1E944-U+1E94A -- Double combining characters. -- Charset: [[:M:]&[:Canonical_Combining_Class=/^Double_/:]&[:^subhead=Grapheme joiner:]&[:^Variation_Selector=Yes:]] local comb_chars_double = "\205\156-\205\162" .. -- U+035C-U+0362 "\225\183\141" .. -- U+1DCD "\225\183\188" -- U+1DFC -- Variation selectors etc.; separated out so that we don't get categories for them. -- Charset: [[:M:]&[[:subhead=Grapheme joiner:][:Variation_Selector=Yes:]]]. local comb_chars_other = "\205\143" .. -- U+034F "\225\160\139-\225\160\141" .. -- U+180B-U+180D "\225\160\143" .. -- U+180F "\239\184\128-\239\184\143" .. -- U+FE00-U+FE0F "\243\160\132\128-\243\160\135\175" -- U+E0100-U+E01EF local comb_chars_all = comb_chars_single .. comb_chars_double .. comb_chars_other local comb_chars = { combined_single = "[^" .. comb_chars_all .. "][" .. comb_chars_single .. comb_chars_other .. "]+%f[^" .. comb_chars_all .. "]", combined_double = "[^" .. comb_chars_all .. "][" .. comb_chars_single .. comb_chars_other .. "]*[" .. comb_chars_double .. "]+[" .. comb_chars_all .. "]*.[" .. comb_chars_single .. comb_chars_other .. "]*", diacritics_single = "[" .. comb_chars_single .. "]", diacritics_double = "[" .. comb_chars_double .. "]", diacritics_all = "[" .. comb_chars_all .. "]" } -- Somewhat curated list from https://unicode.org/Public/emoji/16.0/emoji-sequences.txt. -- NOTE: There are lots more emoji sequences involving non-emoji Plane 0 symbols followed by 0xFE0F, which we don't -- (yet?) handle. local emoji_chars = "\226\140\154" .. -- U+231A (⌚) "\226\140\155" .. -- U+231B (⌛) "\226\140\168" .. -- U+2328 (⌨) "\226\143\143" .. -- U+23CF (⏏) "\226\143\169-\226\143\179" .. -- U+23E9-U+23F3 (⏩-⏳) "\226\143\184-\226\143\186" .. -- U+23F8-U+23FA (⏸-⏺) "\226\150\170" .. -- U+25AA (▪) "\226\150\171" .. -- U+25AB (▫) "\226\150\182" .. -- U+25B6 (▶) "\226\151\128" .. -- U+25C0 (◀) "\226\151\187-\226\151\190" .. -- U+25FB-U+25FE (◻-◾) "\226\152\128-\226\152\132" .. -- U+2600-U+2604 (☀-☄) "\226\152\142" .. -- U+260E (☎) "\226\152\145" .. -- U+2611 (☑) "\226\152\148" .. -- U+2614 (☔) "\226\152\149" .. -- U+2615 (☕) "\226\152\152" .. -- U+2618 (☘) "\226\152\157" .. -- U+261D (☝) "\226\152\160" .. -- U+2620 (☠) "\226\152\162" .. -- U+2622 (☢) "\226\152\163" .. -- U+2623 (☣) "\226\152\166" .. -- U+2626 (☦) "\226\152\170" .. -- U+262A (☪) "\226\152\174" .. -- U+262E (☮) "\226\152\175" .. -- U+262F (☯) "\226\152\184-\226\152\186" .. -- U+2638-U+263A (☸-☺) "\226\153\136-\226\153\147" .. -- U+2648-U+2653 (♈-♓) "\226\153\159" .. -- U+265F (♟) "\226\153\160" .. -- U+2660 (♠) "\226\153\163" .. -- U+2663 (♣) "\226\153\165" .. -- U+2665 (♥) "\226\153\166" .. -- U+2666 (♦) "\226\153\168" .. -- U+2668 (♨) "\226\153\187" .. -- U+267B (♻) "\226\153\190" .. -- U+267E (♾) "\226\153\191" .. -- U+267F (♿) "\226\154\146-\226\154\151" .. -- U+2692-U+2697 (⚒-⚗) "\226\154\153" .. -- U+2699 (⚙) "\226\154\155" .. -- U+269B (⚛) "\226\154\156" .. -- U+269C (⚜) "\226\154\160" .. -- U+26A0 (⚠) "\226\154\161" .. -- U+26A1 (⚡) "\226\154\170" .. -- U+26AA (⚪) "\226\154\171" .. -- U+26AB (⚫) "\226\154\176" .. -- U+26B0 (⚰) "\226\154\177" .. -- U+26B1 (⚱) "\226\154\189" .. -- U+26BD (⚽) "\226\154\190" .. -- U+26BE (⚾) "\226\155\132" .. -- U+26C4 (⛄) "\226\155\133" .. -- U+26C5 (⛅) "\226\155\136" .. -- U+26C8 (⛈) "\226\155\142" .. -- U+26CE (⛎) "\226\155\143" .. -- U+26CF (⛏) "\226\155\145" .. -- U+26D1 (⛑) "\226\155\147" .. -- U+26D3 (⛓) "\226\155\148" .. -- U+26D4 (⛔) "\226\155\169" .. -- U+26E9 (⛩) "\226\155\170" .. -- U+26EA (⛪) "\226\155\176-\226\155\181" .. -- U+26F0-U+26F5 (⛰-⛵) "\226\155\183-\226\155\186" .. -- U+26F7-U+26FA (⛷-⛺) "\226\155\189" .. -- U+26FD (⛽) "\226\156\130" .. -- U+2702 (✂) "\226\156\133" .. -- U+2705 (✅) "\226\156\136-\226\156\141" .. -- U+2708-U+270D (✈-✍) "\226\156\143" .. -- U+270F (✏) "\226\156\146" .. -- U+2712 (✒) "\226\156\148" .. -- U+2714 (✔) "\226\156\150" .. -- U+2716 (✖) "\226\156\157" .. -- U+271D (✝) "\226\156\161" .. -- U+2721 (✡) "\226\156\168" .. -- U+2728 (✨) "\226\156\179" .. -- U+2733 (✳) "\226\156\180" .. -- U+2734 (✴) "\226\157\132" .. -- U+2744 (❄) "\226\157\135" .. -- U+2747 (❇) "\226\157\140" .. -- U+274C (❌) "\226\157\142" .. -- U+274E (❎) "\226\157\147-\226\157\149" .. -- U+2753-U+2755 (❓-❕) "\226\157\151" .. -- U+2757 (❗) "\226\157\163" .. -- U+2763 (❣) "\226\157\164" .. -- U+2764 (❤) "\226\158\149-\226\158\151" .. -- U+2795-U+2797 (➕-➗) "\226\158\161" .. -- U+27A1 (➡) "\226\158\176" .. -- U+27B0 (➰) "\226\158\191" .. -- U+27BF (➿) "\226\164\180" .. -- U+2934 (⤴) "\226\164\181" .. -- U+2935 (⤵) "\226\172\133-\226\172\135" .. -- U+2B05-U+2B07 (⬅-⬇) "\226\172\155" .. -- U+2B1B (⬛) "\226\172\156" .. -- U+2B1C (⬜) "\226\173\144" .. -- U+2B50 (⭐) "\226\173\149" .. -- U+2B55 (⭕) "\227\128\176" .. -- U+3030 (〰) "\227\128\189" .. -- U+303D (〽) "\227\138\151" .. -- U+3297 (㊗) "\227\138\153" .. -- U+3299 (㊙) "\240\159\128\132" .. -- U+1F004 (🀄) "\240\159\131\143" .. -- U+1F0CF (🃏) "\240\159\133\176" .. -- U+1F170 (🅰) "\240\159\133\177" .. -- U+1F171 (🅱) "\240\159\133\190" .. -- U+1F17E (🅾) "\240\159\133\191" .. -- U+1F17F (🅿) "\240\159\134\142" .. -- U+1F18E (🆎) "\240\159\134\145-\240\159\134\154" .. -- U+1F191-U+1F19A (🆑-🆚) "\240\159\136\129" .. -- U+1F201 (🈁) "\240\159\136\130" .. -- U+1F202 (🈂) "\240\159\136\154" .. -- U+1F21A (🈚) "\240\159\136\175" .. -- U+1F22F (🈯) "\240\159\136\178-\240\159\136\186" .. -- U+1F232-U+1F23A (🈲-🈺) "\240\159\137\144" .. -- U+1F250 (🉐) "\240\159\137\145" .. -- U+1F251 (🉑) "\240\159\140\128-\240\159\153\143" .. -- U+1F300-U+1F64F (🌀-🙏) "\240\159\154\128-\240\159\155\151" .. -- U+1F680-U+1F6D7 (🚀-🛗) "\240\159\155\156-\240\159\155\172" .. -- U+1F6DC-U+1F6EC (🛜-🛬) "\240\159\155\176-\240\159\155\188" .. -- U+1F6F0-U+1F6FC (🛰-🛼) "\240\159\159\160-\240\159\159\171" .. -- U+1F7E0-U+1F7EB (🟠-🟫) "\240\159\159\176" .. -- U+1F7F0 (🟰) "\240\159\164\140-\240\159\169\147" .. -- U+1F90C-U+1FA53 (🤌-🩓) "\240\159\169\160-\240\159\169\173" .. -- U+1FA60-U+1FA6D (🩠-🩭) "\240\159\169\176-\240\159\169\188" .. -- U+1FA70-U+1FA7C (🩰-🩼) "\240\159\170\128-\240\159\170\137" .. -- U+1FA80-U+1FA89 (🪀-🪉) "\240\159\170\143-\240\159\171\134" .. -- U+1FA8F-U+1FAC6 (🪏-🫆) "\240\159\171\142-\240\159\171\156" .. -- U+1FACE-U+1FADC (🫎-🫜) "\240\159\171\159-\240\159\171\169" .. -- U+1FADF-U+1FAE9 (🫟-🫩) "\240\159\171\176-\240\159\171\184" -- U+1FAF0-U+1FAF8 (🫰-🫸) local unsupported_characters local function get_unsupported_characters() unsupported_characters, get_unsupported_characters = {}, nil for k, v in pairs(load_data("Module:links/data").unsupported_characters) do unsupported_characters[v] = k end return unsupported_characters end -- The list of unsupported titles and invert it (so the keys are pagenames and values are canonical titles). local unsupported_titles local function get_unsupported_titles() unsupported_titles, get_unsupported_titles = {}, nil for k, v in pairs(load_data("Module:links/data").unsupported_titles) do unsupported_titles[v] = k end return unsupported_titles end -- To save on memory, we only cache names with either non-ASCII characters in them or ASCII characters to be removed or -- transformed (apostrophe, double quote, hyphen). local L2_sort_key_cache = {} function export.get_L2_sort_key(L2) if L2 == "Translingual" then return "\1" elseif L2 == "English" then return "\2" elseif match(L2, "^[%z\1-\b\14-!#-&(-,.-\127]+$") then return L2 end local sort_key = L2_sort_key_cache[L2] if sort_key then return sort_key end sort_key = toNFC(ugsub(ugsub(toNFD(L2), "[" .. comb_chars_all .. "'\"ʻʼ]+", ""), "[%s%-]+", " ")) L2_sort_key_cache[L2] = sort_key return sort_key end --[==[ Given a pagename (or {nil} for the current page), create and return a data structure describing the page. The returned object includes the following fields: * `comb_chars`: A table containing various Lua character class patterns for different types of combined characters (those that decompose into multiple characters in the NFD decomposition). The patterns are meant to be used with {mw.ustring.find()}. The keys are: ** `single`: Single combining characters (character + diacritic), without surrounding brackets; ** `double`: Double combining characters (character + diacritic + character), without surrounding brackets; ** `vs`: Variation selectors, without surrounding brackets; ** `all`: Concatenation of `single` + `double` + `vs`, without surrounding brackets; ** `diacritics_single`: Like `single` but with surrounding brackets; ** `diacritics_double`: Like `double` but with surrounding brackets; ** `diacritics_all`: Like `all` but with surrounding brackets; ** `combined_single`: Lua pattern for matching a spacing character followed by one or more single combining characters; ** `combined_double`: Lua pattern for matching a combination of two spacing characters separated by one or more double combining characters, possibly also with single combining characters; * `emoji_pattern`: A Lua character class pattern (including surrounding brackets) that matches emojis. Meant to be used with {mw.ustring.find()}. * `L2_list`: Ordered list of L2 headings on the page, with the extra key `n` that gives the length of the list. * `L2_sections`: Lookup table of L2 headings on the page, where the key is the section number assigned by the preprocessor, and the value is the L2 heading name. Once an invocation has got its actual section number from get_current_L2 in [[Module:pages]], it can use this table to determine its parent L2. TODO: We could expand this to include subsections, to check POS headings are correct etc. * `unsupported_titles`: Map from pagenames to canonical titles for unsupported-title pages. * `namespace`: Namespace of the pagename. * `ns`: Namespace table for the page from mw.site.namespaces (TODO: merge with `namespace` above). * `full_raw_pagename`: Full version of the '''RAW''' pagename (i.e. unsupported-title pages aren't canonicalized); including the namespace and the base (portion before the slash). * `pagename`: Canonicalized subpage portion of the pagename (unsupported-title pages are canonicalized). * `pagename_with_base`: Same as `pagename` in the main namespace; otherwise, the whole pagename without the namespace. * `decompose_pagename`: Equivalent of `pagename` in NFD decomposition. * `pagename_len`: Length of `pagename` in Unicode chars, where combinations of spacing character + decomposed diacritic are treated as single characters. * `explode_pagename`: Set of characters found in `pagename`. The keys are characters (where combinations of spacing character + decomposed diacritic are treated as single characters). * `encoded_pagename`: FIXME: Document me. * `pagename_defaultsort`: FIXME: Document me. * `raw_defaultsort`: FIXME: Document me. * `wikitext_topic_cat`: FIXME: Document me. * `wikitext_langname_cat`: FIXME: Document me. `no_fetch_content` says to not fetch and parse the content or set a DEFAULTSORT sort key, in order to save time on test and documentation pages that have lots of template invocations that set `|pagename=`. It turns out nearly all the time of this function is contained in the line `frame:callParserFunction("DEFAULTSORT", data.pagename_defaultsort)`, so we skip it on test and documentation pages where it accomplishes nothing in any case. ]==] function export.process_page(pagename, no_fetch_content) local data = { comb_chars = comb_chars, emoji_pattern = "[" .. emoji_chars .. "]", unsupported_titles = unsupported_titles or get_unsupported_titles() } local cats = {} data.cats = cats -- We cannot store `raw_title` in `data` because it contains a metatable. local raw_title local function bad_pagename() if not pagename then error("Internal error: Something wrong, `data.pagename` not specified but current title contains illegal characters") else error(format("Bad value for `data.pagename`: '%s', which must not contain illegal characters", pagename)) end end if pagename then -- for testing, doc pages, etc. raw_title = new_title(pagename) if not raw_title then bad_pagename() end else raw_title = mw.title.getCurrentTitle() end local nsText = raw_title.nsText local namespace_is_reconstruction = nsText == "Reconstruction" data.namespace = nsText data.ns = mw.site.namespaces[raw_title.namespace] local full_raw_pagename = raw_title.fullText data.full_raw_pagename = full_raw_pagename local frame = mw.getCurrentFrame() -- WARNING: `content` may be nil, e.g. if we're substing a template like {{ja-new}} on a not-yet-created page -- or if the module specifies the subpage as `data.pagename` (which many modules do) and we're in an Appendix -- or other non-mainspace page. We used to make the latter an error but there are too many modules that do it, -- and substing on a nonexistent page is totally legit, and we don't actually need to be able to access the -- content of the page. local content = not no_fetch_content and raw_title:getContent() or nil -- Get the pagename. pagename = physical_to_logical_pagename_if_mammoth(raw_title) pagename = gsub(pagename, "^Unsupported titles/(.+)", function(m) insert(cats, "Unsupported titles") local title = (unsupported_titles or get_unsupported_titles())[m] if title then return title end -- Substitute pairs of "`". Those not used for escaping should be escaped as "`grave`", but might not be, -- so if a pair don't form a match, the closing "`" should become the opening "`" of the next match attempt. -- This has to be done manually, instead of using gsub. local open_pos = find(m, "`") if not open_pos then return m end title = {sub(m, 1, open_pos - 1)} while true do local close_pos = find(m, "`", open_pos + 1) if not close_pos then -- Add "`" plus any remaining characters. insert(title, sub(m, open_pos)) break end local escape = sub(m, open_pos, close_pos) local ch = (unsupported_characters or get_unsupported_characters())[escape] -- Match found, so substitute the character and move to the first "`" after the match if found, or -- otherwise return. if ch then insert(title, ch) local nxt_pos = close_pos + 1 open_pos = find(m, "`", nxt_pos) -- Add any characters between the match and the next "`" or end. if open_pos then insert(title, sub(m, nxt_pos, open_pos - 1)) else insert(title, sub(m, nxt_pos)) break end -- Match not found, so make the closing "`" the opening "`" of the next attempt. else -- Add the failed match, except for the closing "`". insert(title, sub(m, open_pos, close_pos - 1)) open_pos = close_pos end end return concat(title) end) -- Save pagename, as the local variable will be destructively modified. data.pagename = pagename if nsText == "" then data.pagename_with_base = pagename else data.pagename_with_base = raw_title.text end -- Decompose the pagename in Unicode normalization form D. data.decompose_pagename = toNFD(pagename) -- Explode the current page name into a character table, taking decomposed combining characters into account. local explode_pagename = {} local pagename_len = 0 local function explode(char) explode_pagename[char] = true pagename_len = pagename_len + 1 return "" end pagename = ugsub(pagename, comb_chars.combined_double, explode) pagename = gsub(ugsub(pagename, comb_chars.combined_single, explode), ".[\128-\191]*", explode) data.explode_pagename = explode_pagename data.pagename_len = pagename_len -- Generate DEFAULTSORT. data.encoded_pagename = encode_entities(data.pagename) data.pagename_defaultsort = get_lang("mul"):makeSortKey(data.encoded_pagename) if not no_fetch_content then frame:callParserFunction("DEFAULTSORT", data.pagename_defaultsort) end data.raw_defaultsort = uupper(raw_title.text) -- Make `L2_list` and `L2_sections`, note raw wikitext use of {{DEFAULTSORT:}} and {{DISPLAYTITLE:}}, then add categories if any unwanted L1 headings are found, the L2 headings are in the wrong order, or they don't match a canonical language name. -- Note: HTML comments shouldn't be removed from `content` until after this step, as they can affect the result. do local L2_list, L2_list_len, L2_sections = {}, 0, {} local prev, rc local new_cats, L2_wrong_order = {} local function handle_heading(heading) local level = heading.level if level > 2 then return end local name = heading:get_name() -- heading:get_name() will return nil if there are any newline characters in the preprocessed heading name (e.g. from an expanded template). In such cases, the preprocessor section count still increments (since it's calculated pre-expansion), but the heading will fail, so the L2 count shouldn't be incremented. if name == nil then return end L2_list_len = L2_list_len + 1 L2_list[L2_list_len] = name L2_sections[heading.section] = name -- Also add any L1s, since they terminate the preceding L2, but add a maintenance category since it's probably a mistake. if level == 1 then new_cats["Pages with unwanted L1 headings"] = true end -- Check the heading is in the right order. -- FIXME: we need a more sophisticated sorting method which handles non-diacritic special characters (e.g. Magɨ). if prev and not ( L2_wrong_order or string_compare(export.get_L2_sort_key(prev), export.get_L2_sort_key(name)) ) then new_cats["Pages with language headings in the wrong order"] = true L2_wrong_order = true end -- Check it's a canonical language name. if not (langnames or get_langnames())[name] then new_cats["Pages with nonstandard language headings"] = true end prev = name end local function handle_template(template) -- Turn off redirect checking except in the Reconstruction namespace because the rc flag is only -- used in the Reconstruction namespace and the other names are parser functions, which AFAIK can't -- be redirected to. local name = template:get_name(nil, not namespace_is_reconstruction and "no_redirect" or nil) if name == "DEFAULTSORT:" then new_cats["Pages with DEFAULTSORT conflicts"] = true elseif name == "DISPLAYTITLE:" then new_cats["Pages with DISPLAYTITLE conflicts"] = true elseif name == "reconstructed" then rc = true end end if content then for node in parse(content):iterate_nodes() do local node_class = class_else_type(node) if node_class == "heading" then handle_heading(node) elseif node_class == "template" then handle_template(node) elseif node_class == "parameter" then new_cats["Pages with raw triple-brace template parameters"] = true end end end L2_list.n = L2_list_len data.L2_list = L2_list data.L2_sections = L2_sections insert(cats, get_category("Pages with entries")) insert(cats, get_category(format("Pages with %s entr%s", L2_list_len, L2_list_len == 1 and "y" or "ies"))) for cat in pairs(new_cats) do insert(cats, get_category(cat)) end if namespace_is_reconstruction and not rc then local langname = match(full_raw_pagename, "^Reconstruction:([^/]+)/.") if langname then insert(cats, get_category(langname .. " entries missing Template:reconstructed")) end end end ------ 4. Parse page for maintenance categories. ------ -- Use of tab characters. if content and find(content, "\t", 1, true) then insert(cats, get_category("Pages with tab characters")) end -- Unencoded character(s) in title. local IDS = list_to_set{"⿰", "⿱", "⿲", "⿳", "⿴", "⿵", "⿶", "⿷", "⿸", "⿹", "⿺", "⿻", "⿼", "⿽", "⿾", "⿿", "㇯"} for char in pairs(explode_pagename) do if IDS[char] and char ~= data.pagename then insert(cats, "Terms containing unencoded characters") break end end -- Raw wikitext use of a topic or langname category. Also check if any raw sortkeys have been used. do local wikitext_topic_cat = {} local wikitext_langname_cat = {} local raw_sortkey -- If a raw sortkey has been found, add it to the relevant table. -- If there's no table (or the index is just `true`), create one first. local function add_cat_table(t, lang, sortkey) local t_lang = t[lang] if not sortkey then if not t_lang then t[lang] = true end return elseif t_lang == true or not t_lang then t_lang = {} t[lang] = t_lang end t_lang[uupper(decode_entities(sortkey))] = true end local function process_category(content, cat, colon, nxt) local pipe = find(cat, "|", colon + 1, true) -- Categories cannot end "|]]". if pipe == #cat then return end local title = new_title(pipe and sub(cat, 1, pipe - 1) or cat) if not (title and title.namespace == 14) then return end -- Get the sortkey (if any), then canonicalize category title. local sortkey = pipe and sub(cat, pipe + 1) or nil cat = title.text if sortkey then raw_sortkey = true -- If the sortkey contains "[", the first "]" of a final "]]]" is treated as part of the sortkey. if find(sortkey, "[", 1, true) and sub(content, nxt, nxt) == "]" then sortkey = sortkey .. "]" end end local code = match(cat, "^([%w%-.]+):") if code then add_cat_table(wikitext_topic_cat, code, sortkey) return end -- Split by word. cat = split(cat, " ", true, true) -- Formerly we looked for the language name anywhere in the category. This is simply wrong -- because there are no categories like 'Alsatian French lemmas' (only L2 languages -- have langname categories), but doing it this way wrongly catches things like [[Category:Shapsug Adyghe]] -- in [[Category:Adyghe entries with language name categories using raw markup]]. local n = #cat - 1 if n <= 0 then return end -- Go from longest to shortest and stop once we've found a language name. Going from shortest -- to longest or not stopping after a match risks falsely matching (e.g.) German Low German -- categories as German. repeat local name = concat(cat, " ", 1, n) if (langnames or get_langnames())[name] then add_cat_table(wikitext_langname_cat, name, sortkey) return end n = n - 1 until n == 0 end if content then -- Remove comments, then iterate over category links. content = remove_comments(content, "BOTH") local head = find(content, "[[", 1, true) while head do local close = find(content, "]]", head + 2, true) if not close then break end -- Make sure there are no intervening "[[" between head and close. local open = find(content, "[[", head + 2, true) while open and open < close do head = open open = find(content, "[[", head + 2, true) end local cat = sub(content, head + 2, close - 1) -- Locate the colon, and weed out most unwanted links. "[ _\128-\244]*" catches valid whitespace, and ensures any category links using the colon trick are ignored. We match all non-ASCII characters, as there could be multibyte spaces, and mw.title.new will filter out any remaining false-positives; this is a lot faster than running mw.title.new on every link. local colon = match(cat, "^[ _\128-\244]*[Cc][Aa][Tt][EeGgOoRrYy _\128-\244]*():") if colon then process_category(content, cat, colon, close + 2) end head = open end end data.wikitext_topic_cat = wikitext_topic_cat data.wikitext_langname_cat = wikitext_langname_cat if raw_sortkey then insert(cats, get_category("Pages with raw sortkeys")) end end return data end return export 0esb0zcz2sjpy8aqh1uv1deoe3q625h मॉड्यूल:string/decodeEntities 828 306871 487584 2026-09-01T17:19:43Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487584 Scribunto text/plain local load_module = "Module:load" local string_char_module = "Module:string/char" local find = string.find local gsub = string.gsub local match = string.match local require = require local tonumber = tonumber local function u(...) u = require(string_char_module) return u(...) end local entities local function get_entities() entities, get_entities = require(load_module).load_data("Module:data/entities"), nil return entities end local function decode_entity(hash, x, code) -- "#" isn't included in "[%w\128-\255]", so if no "#" is found then it's a -- a named entity or a false match. if hash == "" then return (entities or get_entities())[x .. code] end -- Exclude numbers that don't fit the expected format. local cp if x == "" then cp = match(code, "^()%d+$") and tonumber(code) else cp = match(code, "^()%x+$") and tonumber(code, 16) end -- Exclude surrogates (U+D800 to U+DFFF) and codepoints that are too high. return cp and ( cp <= 0xD7FF or cp >= 0xE000 and cp <= 0x10FFFF ) and u(cp) or nil end return function(str) -- As an optimisation, only do a full search with gsub() if plain searches -- for "&" and ";" find anything. local amp = find(str, "&", nil, true) -- Search for ";" after the point "&" was found. return amp and find(str, ";", amp + 1, true) and -- Non-ASCII characters aren't valid in proper HTML named entities, but -- MediaWiki uses them in some nonstandard aliases (which have also been -- included in [[Module:data/entities]]), so include them anyway. gsub(str, "&(#?)([xX]?)([%w\128-\255]+);", decode_entity) or str end 1ehplvn1q6ksitguquhvf1khnaq3mxd मॉड्यूल:string/char 828 306872 487585 2026-09-01T17:21:13Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487585 Scribunto text/plain local math_module = "Module:math" local char = string.char local error = error local format = string.format local pcall = pcall local select = select local tonumber = tonumber local type = type local function to_hex(...) to_hex = require(math_module).to_hex return to_hex(...) end local function codepoint_err(cp, i) -- Throw error: to_hex can only return integers, so only show the bad value -- if it can be converted into something that looks like a codepoint. local success, result = pcall(to_hex, cp, true) error(format( "bad argument #%d to 'string/char' (codepoint between 0x0 and 0x10FFFF expected%s)", i, success and "; got " .. result or ""), i + 3) end local function utf8_char(n, i, v, ...) local cp = tonumber(v) if cp == nil then error(format("bad argument #%d to 'char' (number expected; got %s)", i, type(v)), i + 2) elseif cp < 0 then codepoint_err(cp, i) elseif cp < 0x80 then if i == n then return cp end return cp, utf8_char(n, i + 1, ...) elseif cp < 0x800 then if i == n then return 0xC0 + cp / 0x40, 0x80 + cp % 0x40 end return 0xC0 + cp / 0x40, 0x80 + cp % 0x40, utf8_char(n, i + 1, ...) elseif cp < 0x10000 then -- Don't return "?" for surrogates, like mw.ustring.char does, as they -- have legitimate uses (e.g. in JSON). if i == n then return 0xE0 + cp / 0x1000, 0x80 + cp / 0x40 % 0x40, 0x80 + cp % 0x40 end return 0xE0 + cp / 0x1000, 0x80 + cp / 0x40 % 0x40, 0x80 + cp % 0x40, utf8_char(n, i + 1, ...) elseif cp < 0x110000 then if i == n then return 0xF0 + cp / 0x40000, 0x80 + cp / 0x1000 % 0x40, 0x80 + cp / 0x40 % 0x40, 0x80 + cp % 0x40 end return 0xF0 + cp / 0x40000, 0x80 + cp / 0x1000 % 0x40, 0x80 + cp / 0x40 % 0x40, 0x80 + cp % 0x40, utf8_char(n, i + 1, ...) end codepoint_err(cp, i) end return function(...) local n = select("#", ...) if n ~= 0 then return char(utf8_char(n, 1, ...)) end end qud4hkutkfwzx4yv3ba5z040h7pzaqb मॉड्यूल:string/removeComments 828 306873 487586 2026-09-01T17:24:26Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487586 Scribunto text/plain local concat = table.concat local find = string.find local sub = string.sub local function remove_comments(str, pre) local pos1 = find(str, "<!--", nil, true) if not pos1 then return str end local pos2 = find(str, "-->", pos1 + 4, true) if not pos2 then return pre and sub(str, 1, pos1 - 1) or str end local ret = sub(str, 1, pos1 - 1) pos1 = pos2 + 3 pos2 = find(str, "<!--", pos1, true) if not pos2 then return ret .. sub(str, pos1) end local pos3 = find(str, "-->", pos2 + 4, true) if not pos3 then return ret .. sub(str, pos1, pre and pos2 - 1 or nil) end ret = {ret, sub(str, pos1, pos2 - 1)} local n = 2 while true do pos1 = pos3 + 3 pos2 = find(str, "<!--", pos1, true) if not pos2 then return concat(ret) .. sub(str, pos1) end pos3 = find(str, "-->", pos2 + 4, true) if not pos3 then return concat(ret) .. sub(str, pos1, pre and pos2 - 1 or nil) end n = n + 1 ret[n] = sub(str, pos1, pos2 - 1) end end --[==[Removes any HTML comments from the input text. `stage` can be one of three options: * {"PRE"} (default) applies the method used by MediaWiki's preprocessor: all {{code|html|<nowiki><!-- ... --></nowiki>}} pairs are removed, as well as any text after an unclosed {{code|html|<nowiki><!--</nowiki>}}. This is generally suitable when parsing raw template or [[mw:Parser extension tags|parser extension tag]] code. (Note, however, that the actual method used by the preprocessor is considerably more complex and differs under certain conditions (e.g. comments inside nowiki tags); if full accuracy is absolutely necessary, use [[Module:template parser]] instead). * {"POST"} applies the method used to generate the final page output once all templates have been expanded: it loops over the text, removing any {{code|html|<nowiki><!-- ... --></nowiki>}} pairs until no more are found (e.g. {{code|html|<nowiki><!-<!-- ... -->- ... --></nowiki>}} would be fully removed), but any unclosed {{code|html|<nowiki><!--</nowiki>}} is ignored. This is suitable for handling links embedded in template inputs, where the {"PRE"} method will have already been applied by the native parser. * {"BOTH"} applies {"PRE"} then {"POST"}.]==] return function(str, stage) if stage == nil or stage == "PRE" then return remove_comments(str, true) elseif stage == "BOTH" then str = remove_comments(str, true) elseif stage ~= "POST" then error("bad argument #2 to 'remove_comments' (expected PRE, POST, or BOTH)", 2) end while true do local processed = remove_comments(str) if processed == str then return str end str = processed end end 6q2u94c4jook0g0vegx0uyg6x3jd1ms मॉड्यूल:table/numKeys 828 306874 487592 2026-09-01T17:52:40Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487592 Scribunto text/plain local math_module = "Module:math" local pairs = pairs local sort = table.sort local function is_positive_integer(...) is_positive_integer = require(math_module).is_positive_integer return is_positive_integer(...) end --[==[ Given a table, return an array containing all positive integer keys, sorted either in numerical order, or using a custom `keySort` function.]==] return function(t, keySort) local nums, i = {}, 0 for k in pairs(t) do if is_positive_integer(k) then i = i + 1 nums[i] = k end end -- No need for [[Module:math/compare]], as the default is adequate for integers. sort(nums, keySort) return nums end 9c7afk02cuh6j5vb8qjjz77xn7dijyy मॉड्यूल:math 828 306875 487593 2026-09-01T17:54:03Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487593 Scribunto text/plain local export = {} local byte = string.byte local ceil = math.ceil local floor = math.floor local format = string.format local is_integer -- defined below local match = string.match local select = select local tonumber = tonumber local tonumber_ext -- defined below local tostring = tostring local type = type local INF = math.huge local function sign(x, signed_0) if x > 0 then return 1 elseif x < 0 then return -1 elseif x == 0 then -- 1/(+0) is infinity and 1/(-0) is -infinity. return signed_0 and (1 / x > 0 and 1 or -1) or 0 end -- NaN: convert to string with a forced sign prefix, and grab the first byte. local sign = byte(format("%+f", x)) return sign == 0x2B and 1 or -- + sign == 0x2D and -1 or -- - -- If there's no sign, throw an error. This shouldn't be possible, but -- avoids silent errors if it does happen. error("Internal error: cannot determine sign of " .. x) end --[==[ An extended version of {tonumber()}, which attempts to convert `x` to a number. Like {tonumber()}, it will convert from base 10 by default, and the optional parameter `base` can be used to specify a different base between 2 and 36, with the letters {A-Z} (case-insensitive) representing additional digits beyond {0-9}. When strings contain hexadecimal notation (e.g. {"0x100"}), base 16 is used as the default instead, but this is overridden if `base` is set to anything other than 16. This function differs from {tonumber()} in the following ways: * If `finite_real` is set, then the function will only return finite real numbers; inputs which would normally produce ±infinity or NaN will instead produce {nil}. * If `no_prefix` is set, then strings which start with {"0x"} will not be interpreted as containing hexadecimal notation, resulting in {nil}. * If `base` is explicitly set to {10}, then strings in hexadecimal notation will always return {nil}. This fixes a bug in {tonumber()}, which treats {base=10} the same as {base} being unset, causing base 16 to be used if `x` contains hexadecimal notation (e.g. {tonumber("0x10", 10)} returns {16}, whereas {tonumber_extended("0x10", 10)} returns {nil}).]==] function export.tonumber_extended(x, base, finite_real, no_prefix) -- TODO: tonumber() maxes out at 2^64 if the base is anything other than 10. -- TODO: support binary (0b) and octal (0o) prefixes. local n = tonumber(x, base) if not n or finite_real and (n ~= n or n == INF or n == -INF) then return nil -- If `base` is explicitly set to 10 (not simply nil), or `no_prefix` is set -- and `base` is nil or 16, filter out inputs that started with hexadecimal -- prefixes. Note that if `base` is anything else, the initial "0x" will -- have been interpreted as digits by tonumber() instead of a prefix (as "x" -- can be a digit from base 34 upwards), so there's no prefix to check for. elseif base == 10 or no_prefix and (base == nil or base == 16) then return not match(x, "^%s*[+-]?0[xX]()") and n or nil end return n end tonumber_ext = export.tonumber_extended --[==[ Converts `x` to an integer by removing the fractional portion (e.g. {3.5} becomes {3}, and {-2.9} becomes {-2}). This is equivalent to rounding down positive numbers and rounding up negative numbers. If conversion is not possible, returns {nil}.]==] function export.to_integer(x) x = tonumber(x) if not (x and x == x and x ~= INF and x ~= -INF) then return nil elseif x % 1 == 0 then return x -- Round-down positives. elseif x >= 0 then return floor(x) end --Round-up negatives. return ceil(x) end --[==[ Returns {1} if `x` is positive, {-1} if `x` is negative, or {0} if `x` is {0}. If `signed_0` is set, this function will only return either {1} or {-1}, and will make a distinction between [[w:signed zero|signed zeroes]] ({+0} and {-0}). This is useful when a {0} result could be disruptive (e.g. {x % 0}).]==] function export.sign(x, signed_0) return sign( tonumber(x) or error(format("bad argument #1 to 'sign' (number expected, got %s)", type(x)), 2), signed_0 ) end --[==[ Returns {true} if `x` is a finite real number, or {false} if not.]==] function export.is_finite_real_number(x) return x and x == x and not (x == INF or x == -INF) and type(x) == "number" end --[==[ Returns {true} if `x` is an integer, or {false} if not.]==] function export.is_integer(x) return x and type(x) == "number" and x % 1 == 0 or false end is_integer = export.is_integer --[==[ Returns {true} if `x` is a positive integer (or zero if the `include_0` flag is set), or {false} if not.]==] function export.is_positive_integer(x, include_0) return x and type(x) == "number" and (x > 0 or include_0 and x == 0) and x % 1 == 0 or false end --[==[ Returns {true} is `x` is [[w:NaN|NaN]] (Not a Number), or {false} if not. NaN is a value that has the type "number", but does not represent an actual numeric value; it has the unique property that if {x} is NaN, {x ~= x} evaluates to {true}.]==] function export.is_NaN(x) return x ~= x end --[==[ Returns the base-10 logarithm of `x`. This function should be used instead of {math.log10}, which is deprecated and may stop working if Scribunto is updated to a more recent Lua version.]==] function export.log10(x) -- Structured like this so that module documentation works. local log10 = math.log10 if log10 ~= nil then return log10 end local log = math.log return log(10, 10) == 1 and function(x) -- Lua 5.2 return log(x, 10) end or function(x) -- Lua 5.1 return log(x) * 0.43429448190325182765112891891660508229439700580367 -- log10(e) end end export.log10 = export.log10() -- Sets the actual returned function. local function integer_error(x, param, func_name) local type_x = type(x) error(format( "bad argument #%d to '%s' (integer expected, got %s)", param, func_name, type_x == "number" and tostring(x) or type_x ), 3) end --[==[ Converts a decimal number to hexadecimal. If `include_prefix` is set, the returned number will include the 0x prefix.]==] function export.to_hex(dec, include_prefix) dec = tonumber(dec) or dec if not is_integer(dec) then integer_error(dec, 1, "to_hex") end local neg = dec < 0 if neg then dec = -dec end -- Inputs >= 2^64 cause string.format to return "0". if dec >= 0x1p64 then error("integer overflow in 'to_hex': cannot convert inputs with a magnitude greater than or equal to 2^64 (18446744073709551616)", 2) end -- string.format treats hex numbers as unsigned, so any sign must be added manually. return format("%s%s%X", neg and "-" or "", include_prefix and "0x" or "", dec) end --[==[ Returns the greatest common divisor of an arbitrary number of input numbers.]==] function export.gcd(x, ...) x = tonumber(x) or x if not is_integer(x) then integer_error(x, 1, "gcd") end local q, args_len, integers = ..., select("#", ...) -- Compute p_1 = gcd(n_1, n_2), p_2 = gcd(p_1, n_3), ... i.e. compute GCD by Euclid's algorithm for the current result and the next number. for i = 2, args_len + 1 do q = tonumber(q) or q if not is_integer(q) then integer_error(q, i, "gcd") elseif x ~= 1 then -- If x is 1, validate remaining inputs. -- GCD of two integers x, q with Euclid's algorithm. while q ~= 0 do x, q = q, x % q end end if i <= args_len then -- Only create a table if absolutely necessary, as it's inefficient. if i == 2 then integers = {...} end q = integers[i] end end return x < 0 and -x or x end --[==[ Returns the least common multiple of an arbitrary number of input numbers.]==] function export.lcm(x, ...) x = tonumber(x) or x if not is_integer(x) then integer_error(x, 1, "lcm") end local q, args_len, integers = ..., select("#", ...) -- Compute the product of all inputs as p and GCD as x. for i = 2, args_len + 1 do q = tonumber(q) or q if not is_integer(q) then integer_error(q, i, "lcm") elseif x ~= 0 then -- If x is 0, validate remaining inputs. -- Compute the product. local p = x * q -- GCD of two integers x, q with Euclid's algorithm. while q ~= 0 do x, q = q, x % q end -- Divide product by the GCD to get new LCM. x = p / x end if i <= args_len then -- Only create a table if absolutely necessary, as it's inefficient. if i == 2 then integers = {...} end q = integers[i] end end return x < 0 and -x or x end return export 9iueib95u6jd0lc3zzrya3gsltprarl मॉड्यूल:memoize 828 306876 487596 2026-09-01T17:57:50Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487596 Scribunto text/plain local math_module = "Module:math" local table_pack_module = "Module:table/pack" local require = require local select = select local unpack = unpack or table.unpack -- Lua 5.2 compatibility -- table.pack: in Lua 5.2+, this is a function that wraps the parameters given -- into a table with the additional key `n` that contains the total number of -- parameters given. This is not available on Lua 5.1, so [[Module:table/pack]] -- provides the same functionality. local function pack(...) pack = require(table_pack_module) return pack(...) end local function sign(...) sign = require(math_module).sign return sign(...) end ----- M E M O I Z A T I O N----- -- Memoizes a function or callable table. -- Supports any number of arguments and return values. -- If the optional parameter `simple` is set, then the memoizer will use a faster implementation, but this is only compatible with one argument and one return value. If `simple` is set, additional arguments will be accepted, but this should only be done if those arguments will always be the same. -- Sentinels. local _nil, neg_0, pos_nan, neg_nan = {}, {}, {}, {} -- Certain values can't be used as table keys, so they require sentinels as well: e.g. f("foo", nil, "bar") would be memoized at memo["foo"][_nil]["bar"][memo]. These values are: -- nil. -- -0, which is equivalent to 0 in most situations, but becomes "-0" on conversion to string; it also behaves differently in some operations (e.g. 1/a evaluates to inf if a is 0, but -inf if a is -0). -- NaN and -NaN, which are the only values for which n == n is false; they only seem to differ on conversion to string ("nan" and "-nan"). local function get_key(x) if x == x then return x == nil and _nil or x == 0 and 1 / x < 0 and neg_0 or x end return sign(x) == 1 and pos_nan or neg_nan end -- Return values are memoized as tables of return values, which are looked up using each input argument as a key, followed by `memo`. e.g. if the input arguments were (1, 2, 3), the memo would be located at t[1][2][3][memo]. `memo` is always used as the final lookup key so that (for example) the memo for f(1, 2, 3), f[1][2][3][memo], doesn't interfere with the memo for f(1, 2), f[1][2][memo]. local function get_memo(memo, n, nargs, key, ...) key = get_key(key) local next_memo = memo[key] if next_memo == nil then next_memo = {} memo[key] = next_memo end memo = next_memo return n == nargs and memo or get_memo(memo, n + 1, nargs, ...) end -- Used to catch the function output values instead of using a table directly, -- since pack() returns a table with the key `n`, giving the number of return -- values, even if they are nil. This ensures that any nil return values after -- the last non-nil value will always be present (e.g. pack() gives {n = 0}, -- pack(nil) gives {n = 1}, pack(nil, "foo", nil) gives {[2] = "foo", n = 3} -- etc.). The distinction between nil and nothing affects some native functions -- (e.g. tostring() throws an error, but tostring(nil) returns "nil"), so it -- needs to be reconstructable from the memo. local function memoize_then_return(memo, _memo, ...) _memo[memo] = pack(...) return ... end return function(func, simple) local memo = {} if simple then return function(...) local key = get_key((...)) local output = memo[key] if output == nil then output = func(...) memo[key] = output == nil and _nil or output return output elseif output == _nil then return nil end return output end end return function(...) local nargs = select("#", ...) -- Since all possible inputs need to be memoized (including true, false -- and nil), the memo table itself is used as a sentinel to ensure that -- the table of arguments will always have a unique key. local _memo = nargs == 0 and memo or get_memo(memo, 1, nargs, ...) local output = _memo[memo] -- If get_memo() returned nil, call `func` with the arguments and catch -- the output with memoize_then_return(); this packs the return values -- into a table to memoize them, then returns them. Since the return -- values are available to it as `...`, this avoids the need to call -- unpack() on the memoized table on the first call, as they can be -- returned directly. if output == nil then return memoize_then_return(memo, _memo, func(...)) end -- Unpack from 1 to the original number of return values (memoized at -- key `n`); unpack() returns nil for any values not in output. return unpack(output, 1, output.n) end end 8gmyvbgmtmwh2pu7neciscs7liw1v30 मॉड्यूल:table/pack 828 306877 487597 2026-09-01T17:58:52Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487597 Scribunto text/plain --[==[ An implementation of the {table.pack} function found in Lua 5.2+, which returns a table containing a list of the arguments passed. The returned table also contains the key {n}, which is an integer giving the number of arguments passed. Note that the list in the returned table will contain gaps if any of the arguments passed were {nil}. This will also be reflected in the value of {n}, which always matches the number of arguments passed (e.g. {pack("foo")} returns the table { {"foo", n = 1} }, whereas {pack("foo", nil, nil)} returns { {"foo", n = 3} }).]==] return table.pack or function(...) -- On Lua 5.1, use the hidden `arg` variable with `...`, which is the same -- as table.pack(...) on Lua 5.2+. Both are strictly equivalent to -- {n = select("#", ...), ...}, but more performant. return arg end ai5lyp0zhpjyp9n736jj7c60lm0cvm7 मॉड्यूल:string/charsetEscape 828 306878 487598 2026-09-01T18:00:41Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487598 Scribunto text/plain local gsub = string.gsub local chars local function get_chars() chars, get_chars = { ["\000"] = "%z", ["%"] = "%%", ["-"] = "%-", ["]"] = "%]", ["^"] = "%^", }, nil return chars end --[==[Escapes the magic characters used in pattern character sets: {%-]^}, and converts the null character to {%z}.]==] return function(str) return (gsub(str, "[%z%%%-%]^]", chars or get_chars())) end jrbz2u5ynegbco1b6oqpnqiz7xje0en मॉड्यूल:table/getUnprotectedMetatable 828 306879 487601 2026-09-01T18:03:47Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487601 Scribunto text/plain local _getmetatable = debug.getmetatable -- For testing (and just in case it gets enabled). if _getmetatable ~= nil then -- Avoid debug.getmetatable() throwing an error if 0 arguments are passed, -- for parity with the other function. return function(t) return _getmetatable(t) end end _getmetatable = getmetatable local pcall = pcall local rawget = rawget local setmetatable = setmetatable local type = type --[==[ Attempts to retrieve the input value's metatable, and returns it if found. If the value does not have a metatable, returns {nil}. If the input value does have a metatable, but that metatable is not possible to retrieve because it is protected with the `__metatable` metamethod, returns {false}. This is a useful way to ensure that functions can reliably distinguish between objects that do not have metamethods, objects with known metamethods, and objects with unknown metamethods.]==] return function(t) local mt = _getmetatable(t) -- If `mt` is nil, there's no metatable. if mt == nil then return nil -- If `mt` is not a table, the real metatable is protected and there's no -- way of retrieving it. elseif type(mt) ~= "table" then return false end -- Try setting `mt` as the metatable with `setmetatable`; if the metatable -- is protected, this will cause an error to be thrown (revealing it as -- protected), and if it isn't, then `mt` must be the real metatable anyway, -- so nothing has changed. Also make a special exception for data loaded via -- mw.loadData(), which sets each metatable at its own __metatable key as a -- way to stop the use of setmetatable() without actually hiding it. This is -- spoofable, but low-risk. return (pcall(setmetatable, t, mt) or rawget(mt, "mw_loadData") == true) and mt or false end oqd72lzzcljldqpmbzxsx5fm947exar मॉड्यूल:title/makeTitle 828 306880 487602 2026-09-01T18:06:00Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487602 Scribunto text/plain local make_title = mw.title.makeTitle --[==[ A modified version of {mw.title.makeTitle} that fixes a bug which causes certain inputs to generate title objects for the empty string. Such empty string titles do not represent a valid page, and are broken in various ways (e.g. attempting to access certain keys results in an error); see [[phab:T240678]].]==] return function(ns, title, fragment, interwiki) local title = make_title(ns, title, fragment, interwiki) return title and title.prefixedText ~= "" and title or nil end coce82xngappecrexg1r1dsnope2mef मॉड्यूल:languages/chars 828 306881 487605 2026-09-01T18:13:09Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487605 Scribunto text/plain local export = {} local table = table local insert = table.insert local u = require("Module:string/char") -- UTF-8 encoded strings for some commonly-used diacritics. local c = { prime = u(0x02B9), grave = u(0x0300), acute = u(0x0301), circ = u(0x0302), -- circumflex tilde = u(0x0303), macron = u(0x0304), overline = u(0x0305), breve = u(0x0306), dotabove = u(0x0307), diaer = u(0x0308), -- diaeresis ringabove = u(0x030A), dacute = u(0x030B), -- double acute caron = u(0x030C), lineabove = u(0x030D), dgrave = u(0x030F), -- double grave invbreve = u(0x0311), -- inverted breve turnedcommaabove = u(0x0312), commaabove = u(0x0313), revcommaabove = u(0x0314), -- reversed comma above dotbelow = u(0x0323), diaerbelow = u(0x0324), -- diaeresis below ringbelow = u(0x0325), cedilla = u(0x0327), ogonek = u(0x0328), caronbelow = u(0x032C), brevebelow = u(0x032E), macronbelow = u(0x0331), perispomeni = u(0x0342), ypogegrammeni = u(0x0345), CGJ = u(0x034F), -- combining grapheme joiner zigzag = u(0x035B), dbrevebelow = u(0x035C), -- double breve below dmacron = u(0x035E), -- double macron dtilde = u(0x0360), -- double tilde dinvbreve = u(0x0361), -- double inverted breve small_a = u(0x0363), small_e = u(0x0364), small_i = u(0x0365), small_o = u(0x0366), small_u = u(0x0367), keraia = u(0x0374), lowerkeraia = u(0x0375), tonos = u(0x0384), palatalization = u(0x0484), dasiapneumata = u(0x0485), psilipneumata = u(0x0486), kashida = u(0x0640), fathatan = u(0x064B), dammatan = u(0x064C), kasratan = u(0x064D), fatha = u(0x064E), damma = u(0x064F), kasra = u(0x0650), shadda = u(0x0651), sukun = u(0x0652), hamzaabove = u(0x0654), nunghunna = u(0x0658), zwarakay = u(0x0659), smallv = u(0x065A), superalef = u(0x0670), udatta = u(0x0951), anudatta = u(0x0952), tacute = u(0x1ACB), -- triple acute dsvarita = u(0x1CDA), -- double svarita tsvarita = u(0x1CDB), -- triple svarita dottedgrave = u(0x1DC0), dottedacute = u(0x1DC1), coronis = u(0x1FBD), psili = u(0x1FBF), dasia = u(0x1FEF), ZWNJ = u(0x200C), -- zero width non-joiner ZWJ = u(0x200D), -- zero width joiner RSQuo = u(0x2019), -- right single quote kavyka = u(0xA67C), VS01 = u(0xFE00), -- variation selector 1 -- Punctuation for the standard_chars field. -- Note: characters are literal (i.e. no magic characters). punc = " ',-​‌‍‐‑‒–—…∅◌", -- Range covering all diacritics. diacritics = u(0x300) .. "-" .. u(0x34E) .. u(0x350) .. "-" .. u(0x36F) .. u(0x1AB0) .. "-" .. u(0x1ACE) .. u(0x1DC0) .. "-" .. u(0x1DFF) .. u(0x20D0) .. "-" .. u(0x20F0) .. u(0xFE20) .. "-" .. u(0xFE2F), } -- Braille characters for the standard_chars field. local braille = {} for i = 0x2800, 0x28FF do insert(braille, u(i)) end c.braille = table.concat(braille) export.chars = c -- Pre-generate PUA characters, generally used in sortkeys. -- Note: if changing the amount, use powers of 2 to maximise memory efficiency (due to the way memory is allocated for tables). local p = {} for i = 1, 32 do p[i] = u(0xF000+i-1) end export.puaChars = p local cs = {} -- Used in the default strip_diacritics and sort_key for Cyrs, but also used directly by Old Ruthenian (zle-ort). cs["Cyrs_remove_diacritics"] = c.grave .. c.acute .. c.dotabove .. c.diaer .. c.invbreve .. c.palatalization .. c.dasiapneumata .. c.psilipneumata .. c.dottedgrave .. c.dottedacute .. c.kavyka export.chars_substitutions = cs return export fsf6ixs8oigvoxxmoilnwf9c50lo7o0 मॉड्यूल:fun/isCallable 828 306882 487610 2026-09-01T18:28:20Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487610 Scribunto text/plain local debug_track_module = "Module:debug/track" local table_get_metamethod_module = "Module:table/getMetamethod" local require = require local type = type local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local function get_metamethod(...) get_metamethod = require(table_get_metamethod_module) return get_metamethod(...) end --[==[ Return {true} if the input is a function or functor (an object which can be called like a function, because it has a {__call} metamethod). Note: if the input is an object with a {__call} metamethod, but this function is not able to find it because the object's metatable is protected with {__metatable}, then it will return {false} by default, or {nil} if the {allow_maybe} flag is set.]==] return function(obj, allow_maybe) if type(obj) == "function" then return true end -- An object is callable if it has a __call metamethod, so try to get it -- with get_metamethod(). local success, __call = get_metamethod(obj, "__call") -- If this succeeds, `obj` will only be callable if the __call metamethod is -- a function (i.e. it can't itself be a callable table), so don't recurse -- to check it. if __call and type(__call) == "function" then return true -- If not, then the metatable is protected, so it's not possible to know if -- `obj` is callable without actually calling it. elseif not success then debug_track("fun/isCallable/protected metatable") if allow_maybe then return nil end end return false end nr6fmojt64uvmsick8bst0i74ec4d2z मॉड्यूल:table/getMetamethod 828 306883 487611 2026-09-01T18:29:28Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487611 Scribunto text/plain local table_get_unprotected_metatable = "Module:table/getUnprotectedMetatable" local rawget = rawget local select = select local function get_unprotected_metatable(...) get_unprotected_metatable = require(table_get_unprotected_metatable) return get_unprotected_metatable(...) end local function get_metamethod(n, i, mt, mm, ...) if mt then mm = rawget(mt, mm) else mm = nil end if i == n then return mm end return mm, get_metamethod(n, i + 1, mt, ...) end --[==[ Takes an input value and any number of metamethods, and attempts to retrieve the values at those keys in the value's metatable. Returns a boolean stating whether the value's metamethods are findable, followed by a return value for each metamethod. A value's metamethods are findable if it does not have a protected metatable, so the first return value is {true} if the value either has a metatable which does not contain the {__metatable} metamethod, or it has no metatable at all. If the value does have a protected metatable, the first return value is {false}, and all remaining return values default to {nil}.]==] return function(t, ...) local mt, n = get_unprotected_metatable(t), select("#", ...) -- get_unprotected_metatable() returns the metatable if it's unprotected, -- false if it's protected, or nil if there is no metatable. It checks -- whether a metatable is protected by trying pcall(setmetatable, t), -- so it's always possible to determine accurately. if n == 0 then return mt ~= false end return mt ~= false, get_metamethod(n, 1, mt, ...) end tfl070cq0h5icostaevq3t6kcrhpcyw मॉड्यूल:table/extend 828 306884 487612 2026-09-01T18:31:11Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487612 Scribunto text/plain local insert = table.insert local select = select --[==[ Extend an existing list by a new list, modifying the existing list in-place. Compare the Python expression {list.extend(new_items)}.]==] return function(t, ...) local i = 0 if select("#", ...) < 2 then local list = ... while true do i = i + 1 local v = list[i] if v == nil then return t end insert(t, v) end else local pos, list = ... while true do i = i + 1 local v = list[i] if v == nil then return t end insert(t, pos, v) pos = pos + 1 end end end adajacgjldccb0g5nl3tceeu9y5qxf5 मॉड्यूल:table/extendIfNot 828 306885 487613 2026-09-01T18:32:12Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487613 Scribunto text/plain local table_insert_if_not_module = "Module:table/insertIfNot" local table_shallow_copy_module = "Module:table/shallowCopy" local require = require local type = type local function insert_if_not(...) insert_if_not = require(table_insert_if_not_module) return insert_if_not(...) end local function shallow_copy(...) shallow_copy = require(table_shallow_copy_module) return shallow_copy(...) end local function extend_with_pos(list, new_items, options) local i = 1 while true do local item = new_items[i] if item == nil then return list end local success = insert_if_not(list, item, options) if success then options.pos = options.pos + 1 end i = i + 1 end end local function extend_with_options_as_pos(list, new_items, pos) local i = 1 while true do local item = new_items[i] if item == nil then return list end local success = insert_if_not(list, item, pos) if success then pos = pos + 1 end i = i + 1 end end local function extend_without_pos(list, new_items, options) local i = 1 while true do local item = new_items[i] if item == nil then return list end insert_if_not(list, item, options) i = i + 1 end end --[==[ Extend an existing list by a new list, using {insertIfNot()} for each item. `options` is an optional table of additional options to control the behavior of the operation. The following options are recognized: * `pos`: As in {insertIfNot()}. * `comparison`: As in {insertIfNot()}. * `key`: As in {insertIfNot()}. * `combine`: As in {insertIfNot()}. Unlike {insertIfNot()}, this function does not return a boolean indicating whether any items were inserted.]==] return function(list, new_items, options) if options == nil then return extend_without_pos(list, new_items) elseif type(options) == "number" then return extend_with_options_as_pos(list, new_items, options) end local pos = options.pos if pos == nil then return extend_without_pos(list, new_items, options) end return extend_with_pos(list, new_items, shallow_copy(options)) end crdbb3ps6pmk0j0qpkle192t06mpn8v मॉड्यूल:table/insertIfNot 828 306886 487614 2026-09-01T18:32:53Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487614 Scribunto text/plain local table_find_module = "Module:table/find" local insert = table.insert local type = type local function table_find(...) table_find = require(table_find_module) return table_find(...) end --[==[ Given a `list` and a `new_item` to be inserted, append the value to the end of the list if not already present (or insert at an arbitrary position, if `options.pos` is given; see below). Comparison is by value, using {deepEquals}. `options` is an optional table of additional options to control the behavior of the operation. The following options are recognized: * `pos`: Position at which insertion happens (i.e. before the existing item at position `pos`). * `comparison`: Function of two arguments to compare whether `item` is equal to an existing item in `list`. If unspecified, items are considered equal if either the standard equality operator {==} or {deepEquals} return {true}. As a special case, if the string value {"=="} is specified, then the standard equality operator alone will be used. * `key`: Function of one argument to return a comparison key, which will be used with the comparison function. The key function is applied to both `item` and the existing item in `list` to compare against, and the comparison is done against the results. This is useful when inserting a complex structure into an existing list while avoiding duplicates. * `combine`: Function of three arguments (the existing item, the new item and the position, respectively) to combine an existing item with `new_item`, when `new_item` is found in `list`. If unspecified, the existing item is left alone. Returns {false} if an entry is already found, or {true} if inserted. By default, {false} indicates that no change was made to the input table, but if the `combine` is used, {false} indicates that the pre-existing entry was modified. For compatibility, `pos` can be specified directly as the third argument in place of `options`, but this is not recommended for new code. NOTE: This function is O(N) in the size of the existing list. If you use this function in a loop to insert several items, you will get O(M*(M+N)) behavior, effectively O((M+N)^2). Thus it is not recommended to use this unless you are sure the total number of items will be small. (An alternative for large lists is to insert all the items without checking for duplicates, and use {removeDuplicates()} at the end.)]==] return function(list, new_item, options) local pos if options then if type(options) == "number" then pos, options = options, nil else pos = options.pos end end local i = table_find(list, new_item, options) if not i then if pos == nil then insert(list, new_item) else insert(list, pos, new_item) end return true elseif options ~= nil then local combine_func = options.combine if combine_func ~= nil then local newval = combine_func(list[i], new_item, i) if newval ~= nil then list[i] = newval end end end return false end tjy2hflim20bhcfnmmalkf8958c64ib मॉड्यूल:table/find 828 306887 487615 2026-09-01T18:33:34Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487615 Scribunto text/plain local table_deep_equals_module = "Module:table/deepEquals" local deep_equals local function get_deep_equals() deep_equals, get_deep_equals = require(table_deep_equals_module), nil return deep_equals end local function equality_op(a, b) return a == b end --[==[ Given a list and a value to be found, returns the value's index if the value is in the array portion of the list, or {nil} if not found. `options` is an optional table of additional options to control the behavior of the operation. The following options are recognized: * `comparison`: Function of two arguments to compare whether `item` will be deemed equal to an existing item in `list`. If unspecified, items are deemed equal if {deepEquals} returns {true} (which is always the case if the equality operator {==} would return true). As a special case, if the string value {"=="} is specified, then the equality operator alone will be used. * `key`: Function of one argument to return a comparison key, which will be used with the comparison function. The key function is applied to both `item` and the existing item in `list` to compare against, and the comparison is done against the results.]==] return function(list, x, options) local i, key_func, comp_func = 1 if options == nil then comp_func = deep_equals or get_deep_equals() else key_func, comp_func = options.key, options.comparison if key_func ~= nil then x = key_func(x) end if comp_func == nil then comp_func = deep_equals or get_deep_equals() elseif comp_func == "==" then comp_func = equality_op end end while true do local v = list[i] if v == nil then return nil elseif key_func ~= nil then v = key_func(v) end if comp_func(v, x) then return i end i = i + 1 end end rwdwjaudop2hyb464ozqxzbdhpka0td मॉड्यूल:table/deepEquals 828 306888 487616 2026-09-01T18:34:35Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487616 Scribunto text/plain local getmetatable = getmetatable local next = next local pairs = pairs local type = type local function is_eq(a, b, seen, include_mt) -- If `a` and `b` have been compared before, return the memoized result. This will usually be true, since failures normally fail the whole check outright, but match failures are tolerated during the laborious check without this happening, since it compares key/value pairs until it finds a match, so it could be false. local memo_a = seen[a] if memo_a then local result = memo_a[b] if result ~= nil then return result end -- To avoid recursive references causing infinite loops, assume the tables currently being compared are equivalent by memoizing the comparison as true; this will be corrected to false if there's a match failure. memo_a[b] = true else memo_a = {[b] = true} seen[a] = memo_a end -- Don't bother checking `memo_b` for `a`, since if `a` and `b` had been compared before then `b` would be in `memo_a`, but it isn't. local memo_b = seen[b] if memo_b then memo_b[a] = true else memo_b = {[a] = true} seen[b] = memo_b end -- If `include_mt` is set, check the metatables are equivalent. if include_mt then local mt_a, mt_b = getmetatable(a), getmetatable(b) if not (mt_a == mt_b or type(mt_a) == "table" and type(mt_b) == "table" and is_eq(mt_a, mt_b, seen, true)) then memo_a[b], memo_b[a] = false, false return false end end -- Copy all key/values pairs in `b` to `remaining_b`, and count the size: this uses `pairs`, which will also be used to iterate over `a`, ensuring that `a` and `b` are iterated over using the same iterator. This is necessary to ensure that `deepEquals(a, b)` and `deepEquals(b, a)` always give the same result. Simply iterating over `a` while accessing keys in `b` for comparison would ignore any `__pairs` metamethod that `b` has, which could cause asymmetrical outputs if `__pairs` returns more or less than the complete set of key/value pairs accessible via `__index`, so using `pairs` for both `a` and `b` prevents this. -- TODO: handle exotic `__pairs` methods which return the same key multiple times with different values. local remaining_b, size_b = {}, 0 for k_b, v_b in pairs(b) do remaining_b[k_b], size_b = v_b, size_b + 1 end -- Fast check: iterate over the keys in `a`, checking if an equivalent value exists at the same key in `remaining_b`. As matches are found, key/value pairs are removed from `remaining_b`. If any keys in `a` or `remaining_b` are tables, the fast check will only work if the exact same object exists as a key in the other table. Any others from `a` that don't match anything in `remaining_b` are added to `remaining_a`, while those in `remaining_b` that weren't found will still remain once the loop ends. `remaining_a` and `remaining_b` are then compared at the end with the laborious check. local size_a, remaining_a = 0 for k, v_a in pairs(a) do local v_b = remaining_b[k] -- If `k` isn't in `remaining_b`, `a` and `b` can't be equivalent unless it's a table. if v_b == nil then if type(k) ~= "table" then memo_a[b], memo_b[a] = false, false return false -- Otherwise, add the `k`/`v_a` pair to `remaining_a` for the laborious check. elseif not remaining_a then remaining_a = {} end remaining_a[k], size_a = v_a, size_a + 1 -- Otherwise, if `k` exists in `a` and `remaining_b`, `v_a` and `v_b` must be equivalent for there to be a match. elseif v_a == v_b or type(v_a) == "table" and type(v_b) == "table" and is_eq(v_a, v_b, seen, include_mt) then remaining_b[k], size_b = nil, size_b - 1 else memo_a[b], memo_b[a] = false, false return false end end -- Must be the same number of remaining keys in each table. if size_a ~= size_b then memo_a[b], memo_b[a] = false, false return false -- If the size is 0, there's nothing left to check. elseif size_a == 0 then return true end -- Laborious check: since it's not possible to use table lookups to check if two keys are equivalent when they're tables, check each key/value pair in `remaining_a` against every key/value pair in `remaining_b` until a match is found, removing the matching key/value pair from `remaining_b` each time, to ensure one-to-one equivalence. for k_a, v_a in next, remaining_a do local success for k_b, v_b in next, remaining_b do -- Keys/value pairs must be equivalent in order to match. if ( -- More efficient to compare the values first, as they might not be tables. (v_a == v_b or type(v_a) == "table" and type(v_b) == "table" and is_eq(v_a, v_b, seen, include_mt)) and (k_a == k_b or type(k_a) == "table" and type(k_b) == "table" and is_eq(k_a, k_b, seen, include_mt)) ) then -- Remove matched key from `remaining_b`, and break the inner loop. success, remaining_b[k_b] = true, nil break end end -- Fail if `remaining_b` runs out of keys, as the `k_a`/`v_a` pair still hasn't matched. if not success then memo_a[b], memo_b[a] = false, false return false end end -- If every key/value pair in `remaining_a` matched with one in `remaining_b`, `a` and `b` must be equivalent. Note that `remaining_b` will now be empty, since the laborious check only starts if `remaining_a` and `remaining_b` are the same size. return true end --[==[ Recursively compare two values that may be tables, and returns true if all key-value pairs are structurally equivalent. Note that this handles arbitrary nesting of subtables (including recursive nesting) to any depth, for keys as well as values. If `include_mt` is true, then metatables are also compared.]==] return function(a, b, include_mt) -- Do simple checks before calling is_eq to avoid generating an unnecessary memo. -- Simple equality check and type check; if not a ~= b, a and b can only be equivalent if they're both tables. return a == b or type(a) == "table" and type(b) == "table" and is_eq(a, b, {}, include_mt) end 6rgswepb0gwhbiojbyrcr1at7m4h27n मॉड्यूल:table/shallowCopy 828 306889 487617 2026-09-01T18:35:41Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487617 Scribunto text/plain local next = next local pairs = pairs local type = type --[==[ Returns a clone of an object. If the object is a table, the value returned is a new table, but all subtables and functions are shared. Metamethods are respected unless the `raw` flag is set, but the returned table will have no metatable of its own.]==] return function(orig, raw) if type(orig) ~= "table" then return orig end local copy, iter, state, init = {} if raw then iter, state = next, orig else iter, state, init = pairs(orig) end for k, v in iter, state, init do copy[k] = v end return copy end t51fcj6fuqkknha7dzzm33l4y4ohb22 मॉड्यूल:string/encode entities 828 306890 487623 2026-09-01T18:47:39Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487623 Scribunto text/plain local gsub = string.gsub local chars local function get_chars() chars, get_chars = { ["\000"] = "%z", ["$"] = "%$", ["%"] = "%%", ["("] = "%(", [")"] = "%)", ["*"] = "%*", ["+"] = "%+", ["-"] = "%-", ["."] = "%.", ["?"] = "%?", ["["] = "%[", ["]"] = "%]", ["^"] = "%^", }, nil return chars end --[==[Escapes the magic characters used in a pattern: {$%()*+-.?[]^}, and converts the null character to {%z}. For example, {"^$()%.[]*+-?\0"} becomes {"%^%$%(%)%%%.%[%]%*%+%-%?%z"}. This is necessary when constructing a pattern involving arbitrary text (e.g. from user input).]==] return function(str) return (gsub(str, "[%z$%%()*+%-.?[%]^]", chars or get_chars())) end kdhwp5dohwvh931huz7m0oufqqh05wl मॉड्यूल:string/replacementEscape 828 306891 487624 2026-09-01T18:48:46Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487624 Scribunto text/plain local gsub = string.gsub --[==[Escapes {%}, which is the only magic character used in replacement strings, which are given as the third argument to {string.gsub} and {mw.ustring.gsub}, as well as format strings given to {string.format} and {mw.ustring.format}.]==] return function(str) return (gsub(str, "%%", "%%%%")) end aid90he3azqkc4qrytnczmfsjczbfe3 मॉड्यूल:require when needed 828 306892 487625 2026-09-01T18:50:09Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487625 Scribunto text/plain local getmetatable = getmetatable local ipairs = ipairs local loaded = package.loaded local pairs = pairs local require = require local select = select local setmetatable = setmetatable local tostring = tostring local unpack = unpack or table.unpack -- Lua 5.2 compatibility local function get_nested(obj, ...) local n = select("#", ...) if n == 0 then return obj end obj = obj[...] for i = 2, n do obj = obj[select(i, ...)] end return obj end local function get_obj(mt) local obj = require(mt[1]) if #mt > 1 then obj = get_nested(obj, unpack(mt, 2)) end mt[0] = obj return obj end local function __call(self, ...) local mt = getmetatable(self) local obj = mt[0] if obj == nil then obj = get_obj(mt) end return obj(...) end local function __index(self, k) local mt = getmetatable(self) local obj = mt[0] if obj == nil then obj = get_obj(mt) end return obj[k] end local function __ipairs(self) local mt = getmetatable(self) local obj = mt[0] if obj == nil then obj = get_obj(mt) end return ipairs(obj) end local function __newindex(self, k, v) local mt = getmetatable(self) local obj = mt[0] if obj == nil then obj = get_obj(mt) end obj[k] = v end local function __pairs(self) local mt = getmetatable(self) local obj = mt[0] if obj == nil then obj = get_obj(mt) end return pairs(obj) end local function __tostring(self) local mt = getmetatable(self) local obj = mt[0] if obj == nil then obj = get_obj(mt) end return tostring(obj) end return function(modname, ...) local mod = loaded[modname] if mod ~= nil then return get_nested(mod, ...) end return setmetatable({}, { modname, __call = __call, __index = __index, __ipairs = __ipairs, __newindex = __newindex, __pairs = __pairs, __tostring = __tostring, -- TODO: other metamethods, if needed. ... }) end 1p8upm5p2cm943t5atixatwvtsenpe2 मॉड्यूल:string/patternEscape 828 306893 487626 2026-09-01T18:51:07Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487626 Scribunto text/plain local gsub = string.gsub local chars local function get_chars() chars, get_chars = { ["\000"] = "%z", ["$"] = "%$", ["%"] = "%%", ["("] = "%(", [")"] = "%)", ["*"] = "%*", ["+"] = "%+", ["-"] = "%-", ["."] = "%.", ["?"] = "%?", ["["] = "%[", ["]"] = "%]", ["^"] = "%^", }, nil return chars end --[==[Escapes the magic characters used in a pattern: {$%()*+-.?[]^}, and converts the null character to {%z}. For example, {"^$()%.[]*+-?\0"} becomes {"%^%$%(%)%%%.%[%]%*%+%-%?%z"}. This is necessary when constructing a pattern involving arbitrary text (e.g. from user input).]==] return function(str) return (gsub(str, "[%z$%%()*+%-.?[%]^]", chars or get_chars())) end kdhwp5dohwvh931huz7m0oufqqh05wl मॉड्यूल:title/newTitle 828 306894 487627 2026-09-01T18:52:54Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487627 Scribunto text/plain local load_module = "Module:load" local scribunto_module = "Module:Scribunto" local title_get_current_namespace_module = "Module:title/getCurrentNamespace" local title_get_current_title_module = "Module:title/getCurrentTitle" local title_get_main_page_title_module = "Module:title/getMainPageTitle" local byte = string.byte local find = string.find local match = string.match local new_title = mw.title.new local reverse = string.reverse local sub = string.sub local type = type local function get_current_title(...) get_current_title = require(title_get_current_title_module) return get_current_title(...) end local function get_main_page_title(...) get_main_page_title = require(title_get_main_page_title_module) return get_main_page_title(...) end local function php_ltrim(...) php_ltrim = require(scribunto_module).php_ltrim return php_ltrim(...) end local function php_rtrim(...) php_rtrim = require(scribunto_module).php_rtrim return php_rtrim(...) end local current_pagename local function get_current_pagename() -- Call mw.title.getCurrentTitle() directly rather than the modified version -- at [[Module:title/getCurrentTitle]], as it doesn't do anything extra when -- no fragment argument is given, so there's no point in loading it. current_pagename, get_current_pagename = mw.title.getCurrentTitle().prefixedText, nil return current_pagename end local namespace_has_subpages local function get_namespace_has_subpages() namespace_has_subpages, get_namespace_has_subpages = require(load_module).load_data(title_get_current_namespace_module).hasSubpages, nil return namespace_has_subpages end local function split_text(text) -- Split off the fragment. local hash, target, fragment = find(text, "#", nil, true) if hash then target, fragment = sub(text, 1, hash - 1), sub(text, hash) else target, fragment = text, "" end return php_rtrim(target), fragment end --[==[ A modified version of {mw.title.new}: * It is no longer possible to generate title objects for the empty string by inputting a title starting with {"#"}. Such empty string titles do not represent a valid page, and are broken in various ways (e.g. attempting to access certain keys results in an error); see [[phab:T240678]]. * There are two additional boolean flags: ** If {allowOnlyFragment} is set, string inputs starting with {#} are handled analogously to links (e.g. the input {"#foo"} returns a title object for the current page with the addition of the fragment {"foo"}, analogous to the link [[#foo]]). As a special case, the input {"#"} returns the title for the main page (see TitleValue.php). ** If {allowRelative} is set, inputs representing relative titles will work (e.g. {"/foo"} and {"../"}, analogous to the relative links [[/foo]] and [[../]]).]==] return function(text_or_id, defaultNamespace, allowOnlyFragment, allowRelative) -- Process relative titles in the same way as normalizeSubpageLink() in -- Linker.php. if ( allowRelative and type(text_or_id) == "string" and -- Distinguish nil and false for the purposes of calling the getter. (namespace_has_subpages == nil and get_namespace_has_subpages() or namespace_has_subpages) ) then -- For both kinds of relative title, `text_or_id` has to be split into -- `target` and `fragment` (if any). `target` has to be trimmed, but -- as an optimisation, only do a left-trim on `text_or_id`, which is -- sufficient for the initial checks for potential relative titles, as -- this avoids unnecessary splitting/trimming in the vast majority of -- cases where the title won't be relative. In the cases where it is, -- `target` will then be right-trimmed once it has been split out of -- `text_or_id`. text_or_id = php_ltrim(text_or_id) local init = byte(text_or_id) -- If the target starts with "/", it's treated as a subpage of the -- current page. Final slashes are trimmed, but this can't affect the -- intervening slash (e.g. "[[///]]" refers to "[[{{PAGENAME}}/]]"). if init == 0x2F then -- / local target, fragment = split_text(text_or_id) text_or_id, defaultNamespace = (current_pagename or get_current_pagename()) .. (match(target, "^/.*[^/]") or "/") .. fragment, nil -- If the title starts with "../", trim it and any further "../" that -- follow, and go up that many subpage levels. Then, treat any -- additional text as a subpage of that page. Final slashes are trimmed. elseif init == 0x2E and sub(text_or_id, 2, 3) == "./" then -- ../ local n, target, fragment = 4, split_text(text_or_id) while sub(target, n, n + 2) == "../" do n = n + 3 end -- Retain an initial "/". target = sub(target, n - 1) -- Trim the relevant number of subpages from the pagename. local pagename, i = reverse(current_pagename or get_current_pagename()), 0 for _ = 1, (n - 1) / 3 do i = find(pagename, "/", i + 1, true) -- Fail if there aren't enough slashes. if not i then return nil end end -- Add the subpage text; since the intervening "/" is retained in -- `target`, it can be trimmed along with any other final slashes -- (e.g. [[..///]] refers to "{{BASEPAGENAME}}".) text_or_id, defaultNamespace = reverse(sub(pagename, i + 1)) .. (match(target, "^.*[^/]") or "") .. fragment, nil end end local title = new_title(text_or_id, defaultNamespace) if not title then return nil elseif title.prefixedText ~= "" then return title -- If `prefixedText` is the empty string, the input only has a fragment. elseif not allowOnlyFragment then return nil end -- Retrieve the fragment: if it's the empty string, return a title object -- for the main page (which is where the link [[#]] resolves); otherwise, -- return a current title object using [[Module:title/getCurrentTitle]], -- which sets the fragment on the returned title to the string passed in. -- (Note that inputs like "##foo" aren't interpreted as the main page with -- the fragment "foo"; instead, it's a fragment for the section "#foo" on -- the current page, since "#" is itself a valid fragment character.) local fragment = title.fragment return fragment == "" and get_main_page_title() or get_current_title(fragment) end aooqpfbxewgzf96rcljwg1e7vf0j43b मॉड्यूल:title/getCurrentNamespace 828 306895 487628 2026-09-01T18:58:20Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487628 Scribunto text/plain --[==[ Returns the data table for the current namespace from {mw.site.namespaces}. This module may be loaded with {mw.loadData}.]==] return mw.site.namespaces[mw.title.getCurrentTitle().namespace] 2udpe5a40x351nzks01by6n1mixwd3o मॉड्यूल:title/isTitle 828 306896 487629 2026-09-01T18:59:28Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487629 Scribunto text/plain local table_get_metamethod_module = "Module:table/getMetamethod" local error = error local rawequal = rawequal local type = type local function get_metamethod(...) get_metamethod = require(table_get_metamethod_module) return get_metamethod(...) end local title_eq, title_lt local function get_title_mm() local success, eq, lt = get_metamethod(mw.title.getCurrentTitle(), "__eq", "__lt") if not success then error("Failed to fetch current title") -- this should never happen end title_eq, title_lt, get_title_mm = eq, lt, nil return eq end --[==[ Returns {true} if the input is a title object, or {false} if not.]==] return function(obj) if not (obj and type(obj) == "table") then return false end local success, eq, lt = get_metamethod(obj, "__eq", "__lt") -- There's no foolproof method for checking for a title object, but the -- __eq and __lt metamethods should always be the same. Also discount titles -- that only have fragments (returned by mw.title.new() and -- mw.title.makeTitle() if the input starts with "#"), since they cannot -- represent a valid page, and are broken in various ways (e.g. attempting -- to access certain keys results in an error); see [[phab:T240678]]. return success and eq ~= nil and lt ~= nil and rawequal(eq, (title_eq or get_title_mm())) and rawequal(lt, title_lt) and obj.prefixedText ~= "" end j1ejjc7c8trmnla3tstyr2or7aay9ft मॉड्यूल:data/magic words 828 306897 487630 2026-09-01T19:01:50Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487630 Scribunto text/plain local next = next local date_and_time = "mw:Help:Magic words#Date and time" local escaped_characters = "mw:Help:Magic words#Escaped characters" local formatting = "mw:Help:Magic words#Formatting" local labeled_section_transclusion = "mw:Extension:Labeled Section Transclusion" local liquidthreads = "mw:Extension:LiquidThreads" local localization_functions = "mw:Help:Magic words#Localization functions" local localization_variables = "mw:Help:Magic words#Localization variables" local miscellaneous = "mw:Help:Magic words#Miscellaneous" local namespaces = "mw:Help:Magic words#Namespaces" local namespaces_2 = "mw:Help:Magic words#Namespaces 2" local noexternallanglinks = "mw:Wikibase/Installation/Advanced configuration#noexternallanglinks" local page_names = "mw:Help:Magic words#Page names" local parser_functions_ext = "mw:Help:Extension:ParserFunctions##" -- ## is not a typo local statistics = "mw:Help:Magic words#Statistics" local substitution = "mw:Manual:Substitution" local technical_metadata = "mw:Help:Magic words#Technical metadata" local technical_metadata_of_another_page = "mw:Help:Magic words#Technical metadata of another page" local transclusion_modifiers = "mw:Help:Magic words#Transclusion modifiers" local url_data = "mw:Help:Magic words#URL data" local data = {} for k, v in next, { ["!"] = { parser_variable = escaped_characters, case_sensitive = false }, ["#BABEL"] = { parser_function = "mw:Extension:Babel#Usage", case_sensitive = false }, ["#bcp47"] = { -- Case-sensitive lowercase. parser_function = localization_functions, parser_variable = localization_functions, -- Not a typo. case_sensitive = true }, ["#CATEGORYTREE"] = { parser_function = "mw:Extension:CategoryTree#The {{#categorytree}} parser function", case_sensitive = false }, ["#COMMASEPARATEDLIST"] = { parser_function = formatting, case_sensitive = false }, ["#dir"] = { -- Case-sensitive lowercase. parser_function = localization_functions, parser_variable = localization_functions, -- Not a typo. case_sensitive = true }, ["#EXPR"] = { parser_function = parser_functions_ext .. "expr", case_sensitive = false }, ["#FORMAL"] = { parser_function = localization_functions, case_sensitive = true }, ["#FORMATDATE"] = { aliases = {"#DATEFORMAT"}, parser_function = formatting, case_sensitive = false }, ["#IF"] = { parser_function = parser_functions_ext .. "if", case_sensitive = false }, ["#IFEQ"] = { parser_function = parser_functions_ext .. "ifeq", case_sensitive = false }, ["#IFERROR"] = { parser_function = parser_functions_ext .. "iferror", case_sensitive = false }, ["#IFEXIST"] = { parser_function = parser_functions_ext .. "ifexist", case_sensitive = false }, ["#IFEXPR"] = { parser_function = parser_functions_ext .. "ifexpr", case_sensitive = false }, ["#interlanguagelink"] = { -- Case-sensitive lowercase. parser_function = miscellaneous, case_sensitive = true }, ["#interwikilink"] = { -- Case-sensitive lowercase. parser_function = miscellaneous, case_sensitive = true }, ["#INVOKE"] = { parser_function = "mw:Extension:Scribunto#Usage", case_sensitive = false }, ["#LANGUAGE"] = { parser_function = localization_functions, parser_variable = localization_functions, -- Not a typo. case_sensitive = false }, ["#LQTPAGELIMIT"] = { parser_function = liquidthreads, case_sensitive = false }, ["#LST"] = { aliases = {"#SECTION"}, parser_function = labeled_section_transclusion, case_sensitive = false }, ["#LSTH"] = { aliases = {"#SECTION-H"}, parser_function = labeled_section_transclusion, case_sensitive = false }, ["#LSTX"] = { aliases = {"#SECTION-X"}, parser_function = labeled_section_transclusion, case_sensitive = false }, ["#PROPERTY"] = { parser_function = "m:Wikidata/Notes/Inclusion syntax", case_sensitive = false }, ["#REL2ABS"] = { parser_function = parser_functions_ext .. "rel2abs", case_sensitive = false }, ["#SPECIAL"] = { parser_function = miscellaneous, case_sensitive = false }, ["#SPECIALE"] = { parser_function = miscellaneous, case_sensitive = false }, ["#STATEMENTS"] = { parser_function = "d:WD:How to use data on Wikimedia projects#Parser function", case_sensitive = false }, ["#SWITCH"] = { parser_function = parser_functions_ext .. "switch", case_sensitive = false }, ["#TAG"] = { parser_function = miscellaneous, case_sensitive = false }, ["#TARGET"] = { parser_function = "mw:Extension:MassMessage#Parser function delivery lists", case_sensitive = false }, ["#TIME"] = { parser_function = parser_functions_ext .. "time", case_sensitive = false }, ["#timef"] = { -- Case-sensitive lowercase. parser_function = parser_functions_ext, case_sensitive = true }, ["#timefl"] = { -- Case-sensitive lowercase. parser_function = parser_functions_ext, case_sensitive = true }, ["#TIMEL"] = { parser_function = parser_functions_ext .. "timel", case_sensitive = false }, ["#TITLEPARTS"] = { parser_function = parser_functions_ext .. "titleparts", case_sensitive = false }, ["#USELIQUIDTHREADS"] = { parser_function = liquidthreads, case_sensitive = false }, ["="] = { parser_variable = escaped_characters, case_sensitive = false }, ["ANCHORENCODE"] = { parser_function = url_data, case_sensitive = false }, ["ARTICLEPATH"] = { parser_variable = technical_metadata, case_sensitive = false }, ["BASEPAGENAME"] = { parser_function = page_names, parser_variable = page_names, case_sensitive = true }, ["BASEPAGENAMEE"] = { parser_function = page_names, parser_variable = page_names, case_sensitive = true }, ["BIDI"] = { parser_function = formatting, case_sensitive = false }, ["CANONICALURL"] = { parser_function = url_data, case_sensitive = false }, ["CANONICALURLE"] = { parser_function = url_data, case_sensitive = false }, ["CASCADINGSOURCES"] = { parser_function = technical_metadata_of_another_page, parser_variable = technical_metadata, case_sensitive = true }, ["CONTENTLANGUAGE"] = { aliases = {"CONTENTLANG"}, parser_variable = technical_metadata, case_sensitive = true }, ["CURRENTDAY"] = { parser_variable = date_and_time, case_sensitive = true }, ["CURRENTDAY2"] = { parser_variable = date_and_time, case_sensitive = true }, ["CURRENTDAYNAME"] = { parser_variable = date_and_time, case_sensitive = true }, ["CURRENTDOW"] = { parser_variable = date_and_time, case_sensitive = true }, ["CURRENTHOUR"] = { parser_variable = date_and_time, case_sensitive = true }, ["CURRENTMONTH"] = { aliases = {"CURRENTMONTH2"}, parser_variable = date_and_time, case_sensitive = true }, ["CURRENTMONTH1"] = { parser_variable = date_and_time, case_sensitive = true }, ["CURRENTMONTHABBREV"] = { parser_variable = date_and_time, case_sensitive = true }, ["CURRENTMONTHNAME"] = { parser_variable = date_and_time, case_sensitive = true }, ["CURRENTMONTHNAMEGEN"] = { parser_variable = date_and_time, case_sensitive = true }, ["CURRENTTIME"] = { parser_variable = date_and_time, case_sensitive = true }, ["CURRENTTIMESTAMP"] = { parser_variable = date_and_time, case_sensitive = true }, ["CURRENTVERSION"] = { parser_variable = technical_metadata, case_sensitive = true }, ["CURRENTWEEK"] = { parser_variable = date_and_time, case_sensitive = true }, ["CURRENTYEAR"] = { parser_variable = date_and_time, case_sensitive = true }, ["DEFAULTSORT"] = { aliases = {"DEFAULTCATEGORYSORT", "DEFAULTSORTKEY"}, parser_function = technical_metadata, case_sensitive = true }, ["DIRECTIONMARK"] = { aliases = {"DIRMARK"}, parser_variable = technical_metadata, case_sensitive = true }, ["DISPLAYTITLE"] = { parser_function = technical_metadata, case_sensitive = true }, ["FILEPATH"] = { parser_function = url_data, case_sensitive = false }, ["FORMATNUM"] = { parser_function = formatting, case_sensitive = false }, ["FULLPAGENAME"] = { parser_function = page_names, parser_variable = page_names, case_sensitive = true }, ["FULLPAGENAMEE"] = { parser_function = page_names, parser_variable = page_names, case_sensitive = true }, ["FULLURL"] = { parser_function = url_data, case_sensitive = false }, ["FULLURLE"] = { parser_function = url_data, case_sensitive = false }, ["GENDER"] = { parser_function = localization_functions, case_sensitive = false }, ["GRAMMAR"] = { parser_function = localization_functions, case_sensitive = false }, ["INT"] = { parser_function = localization_functions, case_sensitive = false }, ["LC"] = { parser_function = formatting, case_sensitive = false }, ["LCFIRST"] = { parser_function = formatting, case_sensitive = false }, ["LOCALDAY"] = { parser_variable = date_and_time, case_sensitive = true }, ["LOCALDAY2"] = { parser_variable = date_and_time, case_sensitive = true }, ["LOCALDAYNAME"] = { parser_variable = date_and_time, case_sensitive = true }, ["LOCALDOW"] = { parser_variable = date_and_time, case_sensitive = true }, ["LOCALHOUR"] = { parser_variable = date_and_time, case_sensitive = true }, ["LOCALMONTH"] = { aliases = {"LOCALMONTH2"}, parser_variable = date_and_time, case_sensitive = true }, ["LOCALMONTH1"] = { parser_variable = date_and_time, case_sensitive = true }, ["LOCALMONTHABBREV"] = { parser_variable = date_and_time, case_sensitive = true }, ["LOCALMONTHNAME"] = { parser_variable = date_and_time, case_sensitive = true }, ["LOCALMONTHNAMEGEN"] = { parser_variable = date_and_time, case_sensitive = true }, ["LOCALTIME"] = { parser_variable = date_and_time, case_sensitive = true }, ["LOCALTIMESTAMP"] = { parser_variable = date_and_time, case_sensitive = true }, ["LOCALURL"] = { parser_function = url_data, case_sensitive = false }, ["LOCALURLE"] = { parser_function = url_data, case_sensitive = false }, ["LOCALWEEK"] = { parser_variable = date_and_time, case_sensitive = true }, ["LOCALYEAR"] = { parser_variable = date_and_time, case_sensitive = true }, ["MSG"] = { transclusion_modifier = transclusion_modifiers, priority = 2, case_sensitive = false }, ["MSGNW"] = { transclusion_modifier = transclusion_modifiers, priority = 2, case_sensitive = false }, ["NAMESPACE"] = { parser_function = namespaces, parser_variable = namespaces, case_sensitive = true }, ["NAMESPACEE"] = { parser_function = namespaces, parser_variable = namespaces, case_sensitive = true }, ["NAMESPACENUMBER"] = { parser_function = namespaces, parser_variable = namespaces, case_sensitive = true }, ["NOEXTERNALLANGLINKS"] = { parser_function = noexternallanglinks, parser_variable = noexternallanglinks, case_sensitive = false }, ["NS"] = { parser_function = namespaces_2, case_sensitive = false }, ["NSE"] = { parser_function = namespaces_2, case_sensitive = false }, ["NUMBERINGROUP"] = { aliases = {"NUMINGROUP"}, parser_function = statistics, case_sensitive = true }, ["NUMBEROFACTIVEUSERS"] = { parser_function = statistics, parser_variable = statistics, case_sensitive = true }, ["NUMBEROFADMINS"] = { parser_function = statistics, parser_variable = statistics, case_sensitive = true }, ["NUMBEROFARTICLES"] = { parser_function = statistics, parser_variable = statistics, case_sensitive = true }, ["NUMBEROFEDITS"] = { parser_function = statistics, parser_variable = statistics, case_sensitive = true }, ["NUMBEROFFILES"] = { parser_function = statistics, parser_variable = statistics, case_sensitive = true }, ["NUMBEROFPAGES"] = { parser_function = statistics, parser_variable = statistics, case_sensitive = true }, ["NUMBEROFUSERS"] = { parser_function = statistics, parser_variable = statistics, case_sensitive = true }, ["PADLEFT"] = { parser_function = formatting, case_sensitive = false }, ["PADRIGHT"] = { parser_function = formatting, case_sensitive = false }, ["PAGEID"] = { parser_function = technical_metadata_of_another_page, parser_variable = technical_metadata, case_sensitive = false }, ["PAGELANGUAGE"] = { parser_variable = technical_metadata, case_sensitive = true }, ["PAGENAME"] = { parser_function = page_names, parser_variable = page_names, case_sensitive = true }, ["PAGENAMEE"] = { parser_function = page_names, parser_variable = page_names, case_sensitive = true }, ["PAGESINCATEGORY"] = { aliases = {"PAGESINCAT"}, parser_function = statistics, case_sensitive = true }, ["PAGESIZE"] = { parser_function = technical_metadata_of_another_page, case_sensitive = true }, ["PLURAL"] = { parser_function = localization_functions, case_sensitive = false }, ["PROTECTIONEXPIRY"] = { parser_function = { technical_metadata, technical_metadata_of_another_page }, case_sensitive = true }, ["PROTECTIONLEVEL"] = { parser_function = { technical_metadata, technical_metadata_of_another_page }, case_sensitive = true }, ["RAW"] = { transclusion_modifier = transclusion_modifiers, priority = 3, case_sensitive = false }, ["REVISIONDAY"] = { parser_function = technical_metadata_of_another_page, parser_variable = technical_metadata, case_sensitive = true }, ["REVISIONDAY2"] = { parser_function = technical_metadata_of_another_page, parser_variable = technical_metadata, case_sensitive = true }, ["REVISIONID"] = { parser_function = technical_metadata_of_another_page, parser_variable = technical_metadata, case_sensitive = true }, ["REVISIONMONTH"] = { parser_function = technical_metadata_of_another_page, parser_variable = technical_metadata, case_sensitive = true }, ["REVISIONMONTH1"] = { parser_function = technical_metadata_of_another_page, parser_variable = technical_metadata, case_sensitive = true }, ["REVISIONSIZE"] = { parser_variable = technical_metadata, case_sensitive = true }, ["REVISIONTIMESTAMP"] = { parser_function = technical_metadata_of_another_page, parser_variable = technical_metadata, case_sensitive = true }, ["REVISIONUSER"] = { parser_function = technical_metadata_of_another_page, parser_variable = technical_metadata, case_sensitive = true }, ["REVISIONYEAR"] = { parser_function = technical_metadata_of_another_page, parser_variable = technical_metadata, case_sensitive = true }, ["ROOTPAGENAME"] = { parser_function = page_names, parser_variable = page_names, case_sensitive = true }, ["ROOTPAGENAMEE"] = { parser_function = page_names, parser_variable = page_names, case_sensitive = true }, ["SAFESUBST"] = { transclusion_modifier = substitution, priority = 1, case_sensitive = false }, ["SCRIPTPATH"] = { parser_variable = technical_metadata, case_sensitive = false }, ["SERVER"] = { parser_variable = technical_metadata, case_sensitive = false }, ["SERVERNAME"] = { parser_variable = technical_metadata, case_sensitive = false }, ["SITENAME"] = { parser_variable = technical_metadata, case_sensitive = true }, ["STYLEPATH"] = { parser_variable = technical_metadata, case_sensitive = false }, ["SUBJECTPAGENAME"] = { aliases = {"ARTICLEPAGENAME"}, parser_function = page_names, parser_variable = page_names, case_sensitive = true }, ["SUBJECTPAGENAMEE"] = { aliases = {"ARTICLEPAGENAMEE"}, parser_function = page_names, parser_variable = page_names, case_sensitive = true }, ["SUBJECTSPACE"] = { aliases = {"ARTICLESPACE"}, parser_function = namespaces, parser_variable = namespaces, case_sensitive = true }, ["SUBJECTSPACEE"] = { aliases = {"ARTICLESPACEE"}, parser_function = namespaces, parser_variable = namespaces, case_sensitive = true }, ["SUBPAGENAME"] = { parser_function = page_names, parser_variable = page_names, case_sensitive = true }, ["SUBPAGENAMEE"] = { parser_function = page_names, parser_variable = page_names, case_sensitive = true }, ["SUBST"] = { transclusion_modifier = substitution, priority = 1, case_sensitive = false }, ["TALKPAGENAME"] = { parser_function = page_names, parser_variable = page_names, case_sensitive = true }, ["TALKPAGENAMEE"] = { parser_function = page_names, parser_variable = page_names, case_sensitive = true }, ["TALKSPACE"] = { parser_function = namespaces, parser_variable = namespaces, case_sensitive = true }, ["TALKSPACEE"] = { parser_function = namespaces, parser_variable = namespaces, case_sensitive = true }, ["UC"] = { parser_function = formatting, case_sensitive = false }, ["UCFIRST"] = { parser_function = formatting, case_sensitive = false }, ["URLENCODE"] = { parser_function = url_data, case_sensitive = false }, ["USERLANGUAGE"] = { parser_variable = localization_variables, case_sensitive = true }, } do data[k] = v if not v.name then v.name = k end local aliases = v.aliases if aliases then for i = 1, #aliases do data[aliases[i]] = v end v.aliases = nil end end return data jkwpl1ihlf560owi79olg91zvhvb1xy मॉड्यूल:maintenance category 828 306898 487631 2026-09-01T19:02:57Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487631 Scribunto text/plain local export = {} local pages_module = "Module:pages" local parameters_module = "Module:parameters" local utilities_module = "Module:utilities" local new_title = mw.title.new local uses_hidden_category -- Defined below. --[==[ Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==] local function format_categories(...) format_categories = require(utilities_module).format_categories return format_categories(...) end local function is_sandbox(...) is_sandbox = require(pages_module).is_sandbox return is_sandbox(...) end local function is_testcase_page(...) is_testcase_page = require(pages_module).is_testcase_page return is_testcase_page(...) end local function process_params(...) process_params = require(parameters_module).process return process_params(...) end --[==[ Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==] local current_title local function get_current_title() current_title, get_current_title = mw.title.getCurrentTitle(), nil return current_title end function export.uses_hidden_category(title) local namespace = title.namespace -- Thread: and Summary: pages are named "Thread:PAGE" or "Summary:PAGE", -- where PAGE is the page they relate to. How we treat them therefore -- depends on what that page is. while namespace == 90 or namespace == 92 do title = new_title(title.text) namespace = title.namespace end -- User: and all talk namespaces, as well as all sandboxes and testcase pages (including their documentation pages). return ( namespace == 2 or title.isTalkPage or is_sandbox(title, "include documentation") or is_testcase_page(title, "include documentation") ) and true or false end uses_hidden_category = export.uses_hidden_category function export.get_category(name, cat) if uses_hidden_category(current_title or get_current_title()) then name = name .. "/hidden" end return cat and format_categories(name, nil, "-", nil, true) or name end function export.template(frame) local args = process_params(frame:getParent().args, { [1] = {required = true, default = ""}, ["cat"] = {type = "boolean", default = false} }) return export.get_category(args[1], args.cat) end return export 0k9xe0i9582irnmc4uhevzdi2o9uso3 मॉड्यूल:table/setNested 828 306900 487639 2026-09-01T19:23:39Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487639 Scribunto text/plain local error = error local select = select --[==[ Given a table, value and an arbitrary number of keys, will successively access subtables using each key in turn, and sets the value at the final key. For example, if {t} is { {} }, {export.setNested(t, "foo", 1, 2, 3)} will modify {t} to { {[1] = {[2] = {[3] = "foo"} } } }. If no subtable exists for a given key value, one will be created, but the function will throw an error if a non-table value is found at an intermediary key. Note: the parameter order (table, value, keys) differs from functions like rawset, because the number of keys can be arbitrary. This is to avoid situations where an additional argument must be appended to arbitrary lists of variables, which can be awkward and error-prone: for example, when handling variable arguments ({...}) or function return values.]==] return function(...) local n = select("#", ...) if n < 3 then error("Must provide a table, value and at least one key.") end local t, v, k = ... for i = 4, n do local next_t = t[k] if next_t == nil then -- If there's no next table while setting nil, there's nothing more -- to do. if v == nil then return end next_t = {} t[k] = next_t end t, k = next_t, select(i, ...) end t[k] = v end 1jxfjipchypy8qfjkmtb9b9sal1bcc1 मॉड्यूल:table/sortedPairs 828 306901 487640 2026-09-01T19:24:47Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487640 Scribunto text/plain local table_keys_to_list_module = "Module:table/keysToList" local function keys_to_list(...) keys_to_list = require(table_keys_to_list_module) return keys_to_list(...) end --[==[ Iterates through a table, with the keys sorted using the keysToList function. If there are only numerical keys, `export.sparseIpairs` is probably faster.]==] return function(t, key_sort) local list, i = keys_to_list(t, key_sort), 0 return function() i = i + 1 local k = list[i] if k ~= nil then return k, t[k] end end end k9kspqkam96jj5np6nfk0sg15yvnnd3 मॉड्यूल:table/getNested 828 306902 487641 2026-09-01T19:26:46Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487641 Scribunto text/plain local error = error local select = select --[==[ Given a table and an arbitrary number of keys, will successively access subtables using each key in turn, returning the value at the final key. For example, if {t} is { {[1] = {[2] = {[3] = "foo"}}}}, {export.getNested(t, 1, 2, 3)} will return {"foo"}. If no subtable exists for a given key value, returns nil, but will throw an error if a non-table is found at an intermediary key.]==] return function(...) local n = select("#", ...) if n < 2 then error("Must provide a table and at least one key.") end local t, k = ... for i = 3, n do local v = t[k] if v == nil then return nil end t, k = v, select(i, ...) end return t[k] end tm1q0pycz7xr0ute9n4h4yhpf1jzo33 मॉड्यूल:table/keysToList 828 306903 487642 2026-09-01T19:27:42Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487642 Scribunto text/plain local compare_module = "Module:compare" local pairs = pairs local sort = table.sort local compare local function get_compare() compare, get_compare = require(compare_module), nil return compare end --[==[ Returns a list of the keys in a table, sorted using either the default `table.sort` function or a custom `key_sort` function. If there are only numerical keys, [[Module:table/numKeys]] is probably faster.]==] return function(t, key_sort) local list, i = {}, 0 for key in pairs(t) do i = i + 1 list[i] = key end -- Use specified sort function, or otherwise `compare`. sort(list, key_sort == nil and (compare or get_compare()) or key_sort) return list end db7h2mui4n7duv8tkb39qolcbe3t8rm मॉड्यूल:compare 828 306904 487643 2026-09-01T19:30:52Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487643 Scribunto text/plain local math_compare_module = "Module:math/compare" local string_compare_module = "Module:string/compare" local table_compare_module = "Module:table/compare" local require = require local type = type local types local function get_types() types, get_types = { ["nil"] = "\1", ["boolean"] = "\2", ["number"] = "\3", ["string"] = "\4", }, nil return types end local compare_funcs local function get_compare_funcs() compare_funcs = {} function compare_funcs.boolean(a, b) return a == true and b == false end function compare_funcs.number(...) local math_compare = require(math_compare_module) compare_funcs.number = math_compare return math_compare(...) end function compare_funcs.string(...) local string_compare = require(string_compare_module) compare_funcs.string = string_compare return string_compare(...) end function compare_funcs.table(...) local table_compare = require(table_compare_module) compare_funcs.table = table_compare return table_compare(...) end get_compare_funcs = nil return compare_funcs end --[==[ A general comparison function, which returns {true} if {a} sorts before {b}, or otherwise {false}; it can be used as the sort function with {table.sort}. This function is roughly equivalent to the {<} operator, but is capable of comparing a mix of types, using the following rules: * When items of different types are compared, the type-order is {"nil"}, {"boolean"}, {"number"}, {"string"}, then alphabetical order by type name for all other types. * Numbers are compared with [[Module:math/compare]]. * Strings are compared with [[Module:string/compare]]. * Tables are compared with [[Module:table/compare]]. * Boolean {true} sorts before {false}. * All other types always return {false}.]==] return function(a, b) local type_a, type_b = type(a), type(b) if type_a == type_b then local func = (compare_funcs or get_compare_funcs())[type_a] return func and func(a, b) or false end return ((types or get_types())[type_a] or type_a) < (types[type_b] or type_b) end fs82yur52kblfpa4j6uwsb5dbcxr7em मॉड्यूल:math/compare 828 306905 487644 2026-09-01T19:31:35Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487644 Scribunto text/plain local math_module = "Module:math" local function is_NaN(...) is_NaN = require(math_module).is_NaN return is_NaN(...) end local function sign(...) sign = require(math_module).sign return sign(...) end --[==[ A comparison function for numbers, which returns {true} if {a} sorts before {b}, or otherwise {false}; it can be used as the sort function with {table.sort}. This function is roughly equivalent to the {<} operator, but contains the following special considerations in accordance with the {{w|IEEE 754}} standard: * {{w|NaN}} is sorted as though it has a larger absolute value than infinity ({-NaN < -Inf}; {+Inf < +NaN}). * {{w|Signed zero}} is acknowledged, with {-0 < +0}.]==] return function(a, b) -- <, > and == canot return true if either `a` or `b` are NaN. if a < b then return true -- Use > then == instead of >=, so that the ±0 check is only done when `a` -- and `b` are equal. elseif a > b then return false elseif a == b then -- 1/(+0) is Inf; 1/(-0) is -Inf. return a == 0 and b == 0 and 1 / a < 1 / b or false -- One or both must be NaN, and NaN is the only number that returns false -- to a self-equality check, so if `a` == `a` then `b` is NaN (and vice- -- versa). -NaN sorts before everything and +NaN after everything, so the -- sign determines the result. elseif not is_NaN(a) then -- `b` is NaN return sign(b) == 1 elseif not is_NaN(b) then -- `a` is NaN return sign(a) == -1 end -- If both are NaN, only return true if `a` is -NaN and `b` is +NaN. return sign(a) < sign(b) end 632obodjr2zjfbz9zpr3erx1io9vwm4 मॉड्यूल:string/compare 828 306906 487645 2026-09-01T19:43:23Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487645 Scribunto text/plain local byte = string.byte local match = string.match local sub = string.sub --[==[ A comparison function for strings, which returns {true} if {a} sorts before {b}, or otherwise {false}; it can be used as the sort function with {table.sort}. This function always sorts using byte-order, which makes it roughly equivalent to the {<} operator, but with fixes for two serious bugs raised in [[phab:T193096#4161287]] and [[phab:T49137#9167559]]: * {<} is supposed to compare UTF-8 codepoints in the two strings, but when a codepoint that is U+10000 or above is encountered in the left-hand string, {<} always returns {false}, irrespective of the content of the other string. * {<} treats unassigned codepoints and non-UTF-8 byte sequences as being higher than {"\0"} but lower than {"\1"}, instead of sorting according to byte order.]==] return function(a, b) -- Equality check. if a == b then return false end -- Byte comparison is slow, so only do it when it's really needed: -- iterate over both strings, grabbing a set of ASCII bytes followed by -- a set of non-ASCII bytes from each (either of which could be empty), -- and compare them with ==. If the ASCII substrings are unequal, just -- use <, since the bug won't affect it. Otherwise, compare bytes in the -- non-ASCII substrings. local loc, ascii_a, nonascii_a, ascii_b, nonascii_b = 1 repeat ascii_a, nonascii_a = match(a, "^([^\128-\255]*)([\128-\255]*)", loc) ascii_b, nonascii_b, loc = match(b, "^([^\128-\255]*)([\128-\255]*)()", loc) -- update `loc` on the second call -- When comparing ASCII sets, use <. The lower substring will be -- from the lower string *except* when it comprises the start of the -- other substring and is followed by a non-ASCII character. For -- instance, if `ascii_a` is "pqrs": -- If `ascii_b` is "abc", `b` is lower, since "abc" < "pqrs". -- If `ascii_b` is "pqr" and followed by non-ASCII "ž", `a` is -- lower, since "pqrs" < "pqrž". -- If `ascii_b` is "pqr" and at the end of `b`, `b` is lower, since -- "pqr" < "pqrs". if ascii_a ~= ascii_b then if ascii_a < ascii_b then return nonascii_a == "" or ascii_a ~= sub(ascii_b, 1, #ascii_a) end return not (nonascii_b == "" or ascii_b ~= sub(ascii_a, 1, #ascii_b)) end -- If the non-ASCII parts are not equal, terminate the loop. until nonascii_a ~= nonascii_b -- If either one is the empty string, then the end of that string has -- been reached, making it the lower string. if nonascii_a == "" then return true elseif nonascii_b == "" then return false end loc = 1 while true do -- 4 bytes at a time is a balance between minimizing the number of -- byte() calls without grabbing unnecessary extra bytes after the -- difference. local b_a1, b_a2, b_a3, b_a4 = byte(nonascii_a, loc, loc + 3) if b_a1 == nil then return true end local b_b1, b_b2, b_b3, b_b4 = byte(nonascii_b, loc, loc + 3) if b_a1 ~= b_b1 then return b_b1 and b_a1 < b_b1 elseif b_a2 ~= b_b2 then return b_a2 == nil or b_b2 and b_a2 < b_b2 elseif b_a3 ~= b_b3 then return b_a3 == nil or b_b3 and b_a3 < b_b3 elseif b_a4 ~= b_b4 then return b_a4 == nil or b_b4 and b_a4 < b_b4 end loc = loc + 4 end end fshgty7mojs150t5jnkyy2f1rbcgty2 मॉड्यूल:table/compare 828 306907 487646 2026-09-01T19:46:45Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487646 Scribunto text/plain local string_linesub_module = "Module:string/linesub" local table_get_metamethod_module = "Module:table/getMetamethod" local error = error local rawequal = rawequal local require = require local sub = string.sub local traceback = debug.traceback local xpcall = xpcall local function get_metamethod(...) get_metamethod = require(table_get_metamethod_module) return get_metamethod(...) end local function linesub(...) linesub = require(string_linesub_module) return linesub(...) end local _a, _b -- used to pass arguments to compare_for_xpcall() local NOT_COMPARABLE = {} -- sentinel local function compare_for_xpcall() local a, b = _a, _b _a, _b = nil return a < b end local function err_handler(err) -- Error message relate to comparing two table values, but the trace at the -- start of the message needs to be trimmed. Traceback will only refer to -- xpcall() on line 5 if the error occured in compare_for_xpcall(); if it -- originated further up the stack (i.e. in a metamethod), xpcall() will -- only be mentioned on a later line. if ( sub(err, -35) == "attempt to compare two table values" and linesub(traceback(), 5, 5) == "\t[C]: in function 'xpcall'" ) then return NOT_COMPARABLE end return err end --[==[ A comparison function for tables, which returns {true} if {a} sorts before {b}, or otherwise {false}; it can be used as the sort function with {table.sort}. By default, attempting to compare two tables will result in an error, unless both tables have the same {__lt} metamethod. This function will also use the {__lt} metamethod under the same circumstances, but will return {false} instead of throwing an error if the two tables are not comparable.]==] return function(a, b) -- If `a` and `b` are tables, they are only comparable if they both have the -- same __lt metamethod. get_unprotected_metatable() returns nil if there is -- no metatable, and false if the metatable is protected. local success_a, __lt_a = get_metamethod(a, "__lt") -- Not comparable if `a` has no __lt metamethod. if success_a and __lt_a == nil then return false end local success_b, __lt_b = get_metamethod(b, "__lt") if success_b then -- Not comparable if `b` has no __lt metamethod. if __lt_b == nil then return false -- If `a` and `b` have known __lt metamethods, they are only comparable -- if the two metamethods are primitively equal. elseif __lt_a ~= nil then return rawequal(__lt_a, __lt_b) and a < b end end -- Not possible to know if `a` and `b` are comparable if either or both have -- protected metatables, and neither are confirmed to have no __lt -- metamethod. Use xpcall() when comparing them, with an error handler that -- determines if the error was due to `a` and `b` not being comparable. -- Unlike pcall(), xpcall() can't pass on arguments to the called function, -- so use upvalues in the top-level of the module to circumvent this. _a, _b = a, b local success, result = xpcall(compare_for_xpcall, err_handler) if success then return result elseif result == NOT_COMPARABLE then return false end -- If the error wasn't due to the comparison, rethrow it. error(result) end 8mcw42u3tihzaq6279e3zlbjws3nhdr मॉड्यूल:string/linesub 828 306908 487647 2026-09-01T19:47:49Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487647 Scribunto text/plain local index_module = "Module:index" local string_linelen_module = "Module:string/linelen" local find = string.find local require = require local sub = string.sub local function index_range(...) index_range = require(index_module).range return index_range(...) end local function linelen(...) linelen = require(string_linelen_module) return linelen(...) end return function(str, i, j) i, j = index_range(str, i, j, linelen) if j and j < i then return "" end local first, pos1, pos2, newline, pattern, plain = 1 if not find(str, "\r", nil, true) then pattern, plain = "\n", true elseif not find(str, "\n", nil, true) then pattern, plain = "\r", true else pattern = "([\n\r]\n?)" end for _ = 1, i - 1 do pos1, pos2, newline = find(str, pattern, first, plain) if pos1 == nil then return "" end first = newline == "\n\n" and pos2 or pos2 + 1 end if j == nil then return sub(str, first) end local last = first for _ = i, j do pos1, pos2, newline = find(str, pattern, last, plain) if pos1 == nil then return sub(str, first) end last = newline == "\n\n" and pos2 or pos2 + 1 end last = pos1 - 1 return sub(str, first, last) end qzydmib4uoy2d53y6s4vvt1a6pynnwv मॉड्यूल:string/linelen 828 306909 487648 2026-09-01T19:50:08Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487648 Scribunto text/plain local gmatch = string.gmatch --[==[ Counts the number of lines in the input string, treating {"\n"}, {"\r"} and {"\r\n"} as new lines.]==] return function(str) local n = 1 for newline in gmatch(str, "([\n\r]\n?)[^\n\r]*") do n = n + (newline == "\n\n" and 2 or 1) end return n end jpgjm9kkpx83bv03ujdphtzhtxxjsg2 मॉड्यूल:string/startswith 828 306910 487649 2026-09-01T19:52:05Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487649 Scribunto text/plain local sub = string.sub --[==[ Returns {true} if the string {str} starts with the string {val}, or {false} if not. The optional indices {i} and {j} can be used to check a substring of {str}. Note that {val} is a string literal, not a Lua pattern.]==] return function(str, val, i, j) return sub(i == nil and j == nil and str or sub(str, i, j), 1, #val) == val end jgk0bml25td95gm31b74lbvgn76z0xt मॉड्यूल:title/redirectTarget 828 306911 487650 2026-09-01T19:53:46Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487650 Scribunto text/plain local pcall = pcall local at_limit local function is_redirect(title) return title.isRedirect end --[==[ Returns the title object of the redirect target if title page is a redirect. Checking {title.redirectTarget} will transclude the title page, which may be undesirable when checking large numbers of titles. To avoid this, this function will attempt to check the {title.isRedirect} key first, only checking {title.redirectTarget} if it is confirmed that the title is a redirect. However, doing so will increment the expensive function count, which has a limit of 500. Once the limit has been reached, this function reverts to checking {title.redirectTarget} directly instead. The {force_transclusion} flag may be set to force the use of transclusion ({title.redirectTarget}) in all instances, which can be used to avoid incrementing the expensive function count; this is sometimes useful when making a large number of checks, as hitting the expensive function limit can be disruptive to other modules or templates.]==] return function(title, force_transclusion) if not (force_transclusion or at_limit) then local success, result = pcall(is_redirect, title) if not success then at_limit = true elseif not result then return false end end local redirect = title.redirectTarget if not redirect then return false end -- If the original title had a fragment, carry it over to the redirect. local fragment = title.fragment if fragment and fragment ~= "" then redirect.fragment = fragment end return redirect end 0fmvtjkqug22ktp797jksqoi89g47pw मॉड्यूल:en-utilities 828 306912 487651 2026-09-01T19:55:46Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487651 Scribunto text/plain local export = {} local add_suffix -- Defined below. local find = string.find local is_regular_plural -- Defined below. local match = string.match local remove_possessive -- Defined below. local reverse = string.reverse local sub = string.sub local toNFD = mw.ustring.toNFD local ugsub = mw.ustring.gsub local ulower = mw.ustring.lower local umatch = mw.ustring.match local usub = mw.ustring.sub local uupper = mw.ustring.upper local vowels = "aæᴀᴁɐɑɒ@eᴇǝⱻəɛɘɜɞɤiıɪɨᵻoøœᴏɶɔᴐɵuᴜʉᵾɯꟺʊʋʌyʏ" local hyphens = "%-‐‑‒–—" --[==[ Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==] local diacritics local function get_diacritics() diacritics, get_diacritics = mw.loadData("Module:headword/data").page.comb_chars.diacritics_all .. "+", nil return diacritics end -- Normalize a string, so that case and diacritics are ignored. By default, "gu" -- and "qu" are normalized to "g" and "q", because they behave like consonants -- under certain conditions (e.g. final "y" does not usually have the plural -- "ies" after a vowel, but it's regular for "quy" to become "quies". The flag -- `not_gu` prevents this happening to "gu", and is needed because terms ending -- "-guy" are almost always compounds of "guy" (→ "guys"). local function normalize(str, followed_by, not_gu) if not followed_by then followed_by = "" end str = ugsub(toNFD(str) .. followed_by, "([" .. (not_gu and "" or "Gg") .. "Qq])u([".. vowels .. "])", "%1%2") return ulower(ugsub(sub(str, 1, #str - #followed_by), diacritics or get_diacritics(), "")) end local function epenthetic_e_default(stem) return sub(stem, -1) ~= "e" end local function epenthetic_e_for_s(stem, term) -- If the stem is different, it must be from "y" → "i". if stem ~= term then return true end local final if match(stem, "^[^\128-\255]*$") then final = sub(stem, -1) else stem = ugsub(toNFD(stem), diacritics or get_diacritics(), "") final = usub(stem, -1) end -- Epenthetic "e" is added after a sibilant or sibilant-affricate. The vast -- majority of these are spelled "s", "x", "z", "ch" and "sh", but "dg" -- (→ "dge") and "ß" (→ "ss") can be found in obsolete spellings, "shh" in -- onomatopoeia, and "zh", "dj", "jj" (and more) in loanwords. return ( final == "g" and sub(stem, -2, -2) == "d" or final == "h" and match(stem, "[csz]h+$") or final == "j" and umatch(stem, "[^" .. vowels .. "]j$") or final == "s" or final == "u" and umatch(stem, "%f[%w']u$") or final == "x" or final == "z" or final == "ß" ) end function export.remove_possessive(stem) return match(stem, "^(.*)'s$") or match(stem, "^(.*s)'$") or stem end remove_possessive = export.remove_possessive local suffixes = {} suffixes["'s"] = { truncated = function(stem) return sub(stem, -1) == "s" and "'" or "'s" end, } suffixes["s.plural"] = { final_y_is_i = true, epenthetic_e = epenthetic_e_for_s, modifies_possessive = true, } suffixes["s.verb"] = { final_y_is_i = true, final_consonant_is_doubled = true, epenthetic_e = epenthetic_e_for_s } suffixes["ing"] = { final_consonant_is_doubled = true, remove_silent_e = true, } suffixes["d"] = { final_y_is_i = true, final_consonant_is_doubled = true, epenthetic_e = epenthetic_e_default, } suffixes["dst"] = suffixes["d"] suffixes["st.verb"] = suffixes["d"] suffixes["th"] = suffixes["d"] suffixes["n"] = { final_y_is_i = true, final_y_is_i_after_vowel = true, final_guy_is_gui = true, final_consonant_is_doubled = true, -- No epenthetic "e" after an "e", or an "i", "r" or "w" preceded by a vowel. epenthetic_e = function(stem) return not ( sub(stem, -1) == "e" or umatch(normalize(stem), "[" .. vowels .. "][irw]$") ) end, } suffixes["r"] = { final_y_is_i = true, final_ey_is_i = true, final_guy_is_gui = true, final_consonant_is_doubled = true, epenthetic_e = epenthetic_e_default } suffixes["st.superlative"] = suffixes["r"] -- Returns the stem used for suffixes that sometimes convert final "y" into "i", -- such as "-es" ("-ies"), e.g. "penny" → "penni" ("pennies"). If -- `final_ey_is_i` is true, final "ey" may also be converted, e.g. "plaguey" → -- "plagui"; this is needed for "-er" ("-ier") and "-est" ("-iest"). If `not_gu` -- is true, then normalize() will be called with the `not_gu` flag (see there -- for more info); this is true in most cases. local function convert_final_y_to_i(str, not_gu, final_ey_is_i, final_y_is_i_after_vowel) local final3 = usub(str, -3) -- Special case: treat "eey" as "ee" + "y" (e.g. "treey" → "treeiest"). -- "oey" and "uey" are usually vowel + "ey", but examples of "oe" + "y" and -- "ue" = "y" do also exist: compare "go" → "goey" → "goier" with "doe" → -- "doey" → "doeier"; "flu" → "fluey" → "fluiest" and "flue" → "fluey" → -- "flueiest" form a theoretically possible minimal pair. if final3 == "eey" then return sub(str, 1, -2) .. "i" end local final2 = usub(str, -2) -- If `final_ey_is_i` is true, treat final "-ey" can also be reduced. if final_ey_is_i and final2 == "ey" then -- Remove "ey" to get the base stem. local base_stem = sub(str, 1, -3) -- Special case: allow final "-ey" ("potato-ey" → "potato-iest"). if umatch(final3, "[" .. hyphens .. "]ey") then return base_stem .. "i" end -- Final "ey" becomes "i" iff the term is polysyllabic (e.g. not -- "grey"). "ey" is common if the base stem ends in a vowel ("echo → -- "echoey"), so the presence of a vowel anywhere in the base stem is -- sufficient to deem it polysyllabic. ("echoey" → "echo" → "echoiest", -- "beigey" → "beig" → "beigiest", but "grey" → "gr" → "greyest"). The -- first "y" in "-yey" can be treated as a vowel as long as it's -- preceded by something ("clayey" → "clay" → "clayiest", "cryey" → -- "cry" → "cryiest", but "*yey" → "*y" → "*yeyest"), so it needs to be -- treated as a special case. local normalized = normalize(base_stem, "ey") if sub(normalized, -1) == "y" then if umatch(normalized, "[%w@][yY]$") then return base_stem .. "i" end elseif umatch(normalized, "[" .. vowels .. "%d]%w*$") then return base_stem .. "i" end -- Special cases: -- Final "quy" ("soliloquy" → "soliloquies"). -- Final "guy" iff `not_gu` is false ("roguy" → "roguiest"). -- Final "y" after a vowel iff `final_y_is_i_after_vowel` is true ("slay" → -- "slain"). -- Final "-y" ("bro-y" → "bro-iest"), accounting for hyphen variation. elseif umatch(final2, "[" .. hyphens .. "]y") then -- Replace final "y" with "i". return sub(str, 1, -2) .. "i" -- Otherwise, final "y" becomes "i" iff it's not preceded by a vowel -- ("shy" → "shiest", "horsy" → "horsies", but "day" → "days", "coy" → -- "coyest"). else -- Remove "y" to get the base stem. local base_stem = sub(str, 1, -2) if umatch(normalize(base_stem, "y", not_gu), "[^%s%p" .. (final_y_is_i_after_vowel and "" or vowels) .. "]$") then return base_stem .. "i" end end return str end local function double_final_consonant(str, final) local initial = umatch(normalize(sub(str, 1, -2), final), "^.*%f[^%z%s" .. hyphens .. "…]([%l%p]*)[" .. vowels .. "]$") return initial and ( initial == "" or initial == "y" or match(initial, "^.[\128-\191]*$") and umatch(initial, "[^" .. vowels .. "]") or umatch(initial, "^[^" .. vowels .. "]*%f[^%l]$") ) and (str .. final) or str end local function remove_silent_e(str) local final2 = sub(str, -2) if final2 == "ie" then -- Replace "ie" with "y", unless it follows another "y" (e.g. -- "spulyie" → "spulyieing"). return ugsub(str, "([^yY%s%p])ie$", "%1y") end local base_stem = sub(str, 1, -2) -- Silent "e" occurs after "u" or a consonant (cluster) preceded by a vowel. return ( final2 == "ue" or umatch(normalize(base_stem, "e"), "[" .. vowels .. "][^" .. vowels .. "]+$") ) and base_stem or str end function export.add_suffix(term, suffix, pos) local data, possessive = suffixes[suffix] -- If modifies_possessive is set, check for and remove any possessive -- suffix, which will be re-added again at the end. if data.modifies_possessive then local new = remove_possessive(term) if new ~= term then term, possessive = new, true end end suffix = match(suffix, "^([^.]*)") local final, stem = sub(term, -1) -- Proper nouns don't have a final "y" changed to "i" (e.g. "the Gettys", -- "the public Ivys"). if data.final_y_is_i and final == "y" and pos ~= "proper noun" then stem = convert_final_y_to_i(term, not data.final_guy_is_gui, data.final_ey_is_i, data.final_y_is_i_after_vowel) elseif data.remove_silent_e and final == "e" then stem = remove_silent_e(term) else stem = term end local epenthetic_e = data.epenthetic_e if epenthetic_e and epenthetic_e(stem, term) then suffix = "e" .. suffix end if ( data.final_consonant_is_doubled and match(final, "^[bcdfgjklmnpqrstvz]$") and -- Only double regular consonants. umatch(suffix, "^[" .. vowels .. "]") ) then stem = double_final_consonant(term, final) end local truncated = data.truncated if truncated then suffix = truncated(stem) end local output = stem .. suffix -- Re-add the possessive suffix, if applicable. if possessive then output = add_suffix(output, "'s", pos) end return output end add_suffix = export.add_suffix --[==[ Pluralize a word in a smart fashion, according to normal English rules. # If the word ends in a consonant or "qu" + "-y", replace "-y" with "-ies". # If the word ends in "s", "x", "z", "ch", "sh" or "zh", add "-es". # Otherwise, add "-s". This handles links correctly: # If a piped link, change the second part appropriately. # If a non-piped link and rule #1 above applies, convert to a piped link with the second part containing the plural. # If a non-piped link and rules #2 or #3 above apply, add the plural outside the link. ]==] function export.pluralize(str) -- Treat as a link if a "[[" is present and the string ends with "]]". if not (find(str, "[[", 1, true) and sub(str, -2) == "]]") then return add_suffix(str, "s.plural") end -- Find the last "[[" (in case there is more than one) by reversing -- the string. local str_rev = reverse(str) local open = find(str_rev, "[[", 3, true) -- If the last "[[" is followed by a "]]" which isn't at the end, -- then the final "]]" is just plaintext (e.g. "[[foo]]bar]]"). local bad_close = find(str_rev, "]]", 3, true) -- Note: the bad "]]" will have a lower index than the last "[[" in -- the reversed string. if bad_close and bad_close < open then return add_suffix(str, "s.plural") end open = #str - open + 2 -- Get the target and display text by searching from just after "[[". local target, display = match(str, "([^|]*)|?(.*)%]%]$", open) display = add_suffix(display ~= "" and display or target, "s.plural") -- If the link target is a substring of the display text, then -- use a trail (e.g. "[[foo]]" → "[[foo]]s", since "foo" is a substring -- of "foos"). local index, trail = find(display, target, 1, true) if index == 1 then return sub(str, 1, open - 1) .. target .. "]]" .. sub(display, trail + 1) end -- Otherwise, return a piped link. return sub(str, 1, open - 1) .. target .. "|" .. display .. "]]" end --[==[ Returns true if `plural` is an expected, regular plural of `term`. The optional parameter `pos` can be used to specify the part of speech, which is necessary because proper nouns do not change a {"-y"} suffix to {"-ies"} (e.g. {"Abby"} → {"Abbys"}). By default, `pos` is set to {"noun"}. In addition to {"proper noun"}, it can also take the special value {"noun+"}, which means that the function will first attempt the check with the {"noun"} setting, and will then attempt it with the {"proper noun"} setting iff the term begins with a capital letter. ]==] function export.is_regular_plural(plural, term, pos) local init_plural, init_term, try_as_proper_noun = plural, term if pos == "noun+" then pos, try_as_proper_noun = "noun", true end -- Ignore any final punctuation that occurs in both forms, which is common -- in abbreviations (e.g. "abbr." → "abbrs."). local final_punc = umatch(term, "%p*$") local final_punc_len = #final_punc if sub(plural, -final_punc_len) == final_punc then term = sub(term, 1, -final_punc_len - 1) plural = sub(plural, 1, -final_punc_len - 1) end if plural == add_suffix(term, "s.plural", pos) then return true end local final = sub(term, -1) if ( -- Doubled final consonants in "s" and "z". final == "s" and plural == term .. "ses" or -- e.g. "busses" final == "z" and plural == term .. "zes" or -- e.g. "quizzes" -- convert_final_y_to_i() without the `not_gu` flag set, to catch -- "-guy" → "-guies", but not "day" → "daies". final == "y" and plural == convert_final_y_to_i(term) .. "es" or -- Capitalized terms like "$DEITY" → "$DEITIES (should we treat this as regular?) final == "Y" and ulower(plural) == convert_final_y_to_i(ulower(term)) .. "es" ) then return true elseif try_as_proper_noun then local init = umatch(init_term, "^[^%w%s]*(%w)") return init and uupper(init) == init and ulower(init) ~= init and is_regular_plural(init_plural, init_term, "proper noun") or false end return false end is_regular_plural = export.is_regular_plural do local function do_singularize(str) local sing = match(str, "^(.-)ies$") if sing then return sing .. "y" end -- Handle cases like "[[parish]]es" return match(str, "^(.-[cs]h%]*)es$") or -- not -zhes -- Handle cases like "[[box]]es" match(str, "^(.-x%]*)es$") or -- not -ses or -zes -- Handle regular plurals match(str, "^(.-)s$") or -- Otherwise, return input str end local function collapse_link(link, linktext) if link == linktext then return "[[" .. link .. "]]" end return "[[" .. link .. "|" .. linktext .. "]]" end --[==[ Singularize a word in a smart fashion, according to normal English rules. Works analogously to {pluralize()}. '''NOTE''': This doesn't always work as well as {pluralize()}. Beware. It will mishandle cases like "passes" -> "passe", "eyries" -> "eyry". # If word ends in -ies, replace -ies with -y. # If the word ends in -xes, -shes, -ches, remove -es. [Does not affect -ses, cf. "houses", "impasses".] # Otherwise, remove -s. This handles links correctly: # If a piped link, change the second part appropriately. Collapse the link to a simple link if both parts end up the same. # If a non-piped link, singularize the link. # A link like "[[parish]]es" will be handled correctly because the code that checks for -shes etc. allows ] characters between the 'sh' etc. and final -es. ]==] function export.singularize(str) if type(str) == "table" then -- allow calling from a template str = str.args[1] end -- Check for a link. This pattern matches both piped and unpiped links. -- If the link is not piped, the second capture (linktext) will be empty. local beginning, link, linktext = match(str, "^(.*)%[%[([^|%]]+)%|?(.-)%]%]$") if not link then return do_singularize(str) elseif linktext ~= "" then return beginning .. collapse_link(link, do_singularize(linktext)) end return beginning .. "[[" .. do_singularize(link) .. "]]" end end --[==[ Return the appropriate indefinite article to prefix to `str`. Correctly handles links and capitalized text. Does not correctly handle words like [[union]], [[uniform]] and [[university]] that take "a" despite beginning with a 'u'. The returned article will have its first letter capitalized if `ucfirst` is specified, otherwise lowercase. ]==] function export.get_indefinite_article(str, ucfirst) str = str or "" -- If there's a link at the beginning, examine the first letter of the -- link text. This pattern matches both piped and unpiped links. -- If the link is not piped, the second capture (linktext) will be empty. local link, linktext = match(str, "^%[%[([^|%]]+)%|?(.-)%]%]") if match(link and (linktext ~= "" and linktext or link) or str, "^()[AEIOUaeiou]") then return ucfirst and "An" or "an" end return ucfirst and "A" or "a" end get_indefinite_article = export.get_indefinite_article --[==[ Prefix `text` with the appropriate indefinite article to prefix to `text`. Correctly handles links and capitalized text. Does not correctly handle words like [[union]], [[uniform]] and [[university]] that take "a" despite beginning with a 'u'. The returned article will have its first letter capitalized if `ucfirst` is specified, otherwise lowercase. ]==] function export.add_indefinite_article(text, ucfirst) return get_indefinite_article(text, ucfirst) .. " " .. text end export.vowels = vowels export.vowel = "[" .. vowels .. "]" return export qmuwy34gf3az49fu17xn4hzrc6y4prc मॉड्यूल:en-utilities/templates 828 306913 487652 2026-09-01T20:01:38Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487652 Scribunto text/plain -- Prevent substitution. if mw.isSubsting() then return require("Module:unsubst") end local export = {} local en_utilities_module = "Module:en-utilities" local process_params = require("Module:parameters").process function export.pluralize_t(frame) return require(en_utilities_module).pluralize(process_params(frame:getParent().args, { [1] = true })[1]) end return export q5nvncywdimgj7thilh0re85h0hai2b साँचा:wp 10 306914 487653 2026-09-01T20:08:58Z SM7 6218 [[साँचा:wikipedia]] को अनुप्रेषित 487653 wikitext text/x-wiki #पुनर्प्रेषित [[साँचा:wikipedia]] 7m3dtduiuss1mub8bhl08nx6sb509xj 487654 487653 2026-09-01T20:09:16Z SM7 6218 "[[साँचा:wp]]" सुरक्षित किया ([सम्पादन=केवल प्रबंधक अनुमत] (हमेशा) [स्थानांतरण=केवल प्रबंधक अनुमत] (हमेशा)) 487653 wikitext text/x-wiki #पुनर्प्रेषित [[साँचा:wikipedia]] 7m3dtduiuss1mub8bhl08nx6sb509xj साँचा:root/doc 10 306915 487660 2026-09-01T20:31:58Z SM7 6218 "{{documentation subpage}} This template is to be added in the first line of an etymology section. <u>It is meant to not display anything</u>, and only serves the purpose of categorization. Powered by [[Module:root]]. ===Parameters=== ; {{para|1}} : The language code (see [[Wiktionary:Languages]]) of the language which derived the root, which should be the language of the section that the template is placed in. ; {{para|2}} : The..." के साथ नया पृष्ठ बनाया 487660 wikitext text/x-wiki {{documentation subpage}} This template is to be added in the first line of an etymology section. <u>It is meant to not display anything</u>, and only serves the purpose of categorization. Powered by [[Module:root]]. ===Parameters=== ; {{para|1}} : The language code (see [[Wiktionary:Languages]]) of the language which derived the root, which should be the language of the section that the template is placed in. ; {{para|2}} : The language code of the language which the root was derived from. ; {{para|3}}, {{para|4}}, {{para|5}}, ... : The root(s) in the source language that this term was derived from. ; {{para|id}}, {{para|id2}}, {{para|id3}}, ... : {{qual|optional}} Sense ids for the roots; see {{temp|l}} and {{temp|m}}. {{para|id}} corresponds to {{para|3}}, {{para|id2}} corresponds to {{para|4}}, etc. ===Example=== On {{m+|en|draw}}: ===Etymology=== {{tl|root|en|ine-pro|*dʰregʰ-}} From {{tl|inh|en|enm|drawen}} ... which will categorize the page in [[:Category:English terms derived from the Proto-Indo-European root *dʰregʰ-]]. <includeonly> [[Category:Morphology templates]] </includeonly> nubo5nbbx7arx47vpoc2pntpavxu3mb मॉड्यूल:module loader 828 306916 487662 2026-09-01T20:36:22Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487662 Scribunto text/plain --[==[ intro: A generic lazy-loading module loader with function-level caching. Provides a unified interface for loading modules via `require()` or `mw.loadData()`. == Features == * Lazy loading: modules are only loaded when first accessed * Function caching: individual functions are cached after first call * Duplicate detection: errors on duplicate names or paths == Usage == ``` local loader = require("Module:module loader") local M = loader.init({ require = { utilities = "Module:utilities", languages = "Module:languages", }, loadData = { headword_data = "Module:headword/data", parameters_data = "Module:parameters/data", }, }) -- Modules are loaded lazily on first access: M.utilities.format_categories(...) -- loads Module:utilities, caches function M.headword_data.page -- loads via mw.loadData ``` == Parameters == ; ``opts``.require : __table__ : Maps short names to module paths. Modules are loaded via {require()} on first access. Functions within the module are cached individually. ; ``opts``.loadData : __table__ : Maps short names to module paths. Modules are loaded via {mw.loadData()} on first access. The entire table is cached (no function-level proxying). ; ``opts``.loadDataOptional : __table__ : Maps short names to module paths. Same as {loadData} but load is wrapped in pcall; missing or failing modules yield nil. ; ``opts``.requireOptional : __table__ : Maps short names to module paths. Same as {require} but load is wrapped in pcall; missing or failing modules yield nil. ; ``opts``.lazy : __table__ : Maps short names to lazy getters. Each entry is either a function () → value (cached on first access) or a table of name → function () → value for a nested lazy object (e.g. ``mw`` with getCurrentTitle, getCurrentFrame, getContentLanguage). ]==] local export = {} local NIL = {} -- sentinel for optional loadData/require that failed (so we don't retry) -- Validate module configuration for duplicates. -- Throws an error if duplicate names or paths are found. local function validate(modules, data_modules, optional_data_modules, optional_require_modules, lazy_modules) local seen_names = {} local seen_paths = {} -- Check require modules for name, path in pairs(modules) do if seen_names[name] then error("Module loader: duplicate name '" .. name .. "'") end seen_names[name] = "require" if seen_paths[path] then error("Module loader: module '" .. path .. "' loaded twice (as '" .. seen_paths[path] .. "' and '" .. name .. "')") end seen_paths[path] = name end -- Check loadData modules for name, path in pairs(data_modules) do if seen_names[name] then error("Module loader: duplicate name '" .. name .. "' (in both require and loadData)") end seen_names[name] = "loadData" if seen_paths[path] then error("Module loader: module '" .. path .. "' loaded twice (as '" .. seen_paths[path] .. "' and '" .. name .. "')") end seen_paths[path] = name end -- Check loadDataOptional (names must not clash; paths can duplicate optional) for name, path in pairs(optional_data_modules or {}) do if seen_names[name] then error("Module loader: duplicate name '" .. name .. "'") end seen_names[name] = "loadDataOptional" end -- Check requireOptional (names must not clash) for name, path in pairs(optional_require_modules or {}) do if seen_names[name] then error("Module loader: duplicate name '" .. name .. "'") end seen_names[name] = "requireOptional" end -- Check lazy (names must not clash) for name in pairs(lazy_modules or {}) do if seen_names[name] then error("Module loader: duplicate name '" .. name .. "'") end seen_names[name] = "lazy" end end --[==[ Create a lazy-loading module proxy. The returned proxy uses metatables to intercept access: * For `require` modules: creates a sub-proxy that caches individual functions * For `loadData` modules: returns the data table directly (read-only, no proxying) * For function modules: caches and returns the function directly Arguments: * ``opts`` (__table__): Configuration options. ** ``opts``.require (__table__): Maps short names to module paths (loaded via {require()}). ** ``opts``.loadData (__table__): Maps short names to module paths (loaded via {mw.loadData()}). ** ``opts``.loadDataOptional (__table__): Same as loadData but load is wrapped in pcall; missing modules yield nil. ** ``opts``.requireOptional (__table__): Same as require but load is wrapped in pcall; missing or failing modules yield nil. ** ``opts``.lazy (__table__): Maps names to lazy getters. Value is a function () → value, or a table of name → function () → value for a nested lazy object. Returns a __table__ proxy that loads modules/functions on demand. ]==] -- Build a proxy for a lazy object: table of name → function () → value. Each key is evaluated once and cached. local function make_lazy_object_proxy(getters) return setmetatable({}, { __index = function(proxy, key) local getter = getters[key] if type(getter) ~= "function" then return nil end local value = getter() rawset(proxy, key, value) return value end }) end function export.init(opts) local modules = opts.require or {} local data_modules = opts.loadData or {} local optional_data_modules = opts.loadDataOptional or {} local optional_require_modules = opts.requireOptional or {} local lazy_modules = opts.lazy or {} validate(modules, data_modules, optional_data_modules, optional_require_modules, lazy_modules) local loaded_modules = {} local function get_module(module_name) if loaded_modules[module_name] ~= nil then local m = loaded_modules[module_name] return m == NIL and nil or m end if data_modules[module_name] then loaded_modules[module_name] = mw.loadData(data_modules[module_name]) elseif optional_data_modules[module_name] then local ok, data = pcall(mw.loadData, optional_data_modules[module_name]) loaded_modules[module_name] = (ok and data) and data or NIL elseif optional_require_modules[module_name] then local ok, mod = pcall(require, optional_require_modules[module_name]) loaded_modules[module_name] = (ok and mod and type(mod) == "table") and mod or NIL elseif modules[module_name] then loaded_modules[module_name] = require(modules[module_name]) end local m = loaded_modules[module_name] return m == NIL and nil or m end local proxy_metatable = { __index = function(proxy, module_name) -- Lazy: single getter function or table of getters (nested lazy object) if lazy_modules[module_name] then local lazy_def = lazy_modules[module_name] if type(lazy_def) == "function" then local value = lazy_def() rawset(proxy, module_name, value) return value end if type(lazy_def) == "table" then local sub = make_lazy_object_proxy(lazy_def) rawset(proxy, module_name, sub) return sub end end local module = get_module(module_name) if not module then return nil end -- If the module itself is a function, cache and return it directly if type(module) == "function" then rawset(proxy, module_name, module) return module end -- For loadData / loadDataOptional modules, return the table directly (no function proxying) if data_modules[module_name] or optional_data_modules[module_name] then rawset(proxy, module_name, module) return module end -- requireOptional modules get the same function-level proxy as require -- (optional_require_modules is not listed above so they fall through to the proxy) -- Otherwise create a proxy that lazily caches individual functions local function_proxy = setmetatable({}, { __index = function(function_cache, function_name) local cached_function = module[function_name] rawset(function_cache, function_name, cached_function) return cached_function end }) rawset(proxy, module_name, function_proxy) return function_proxy end } return setmetatable({}, proxy_metatable) end return export iwyqw4o7jo9m9e6uy2lpdgswy00nml1 मॉड्यूल:parameter utilities 828 306917 487667 2026-09-01T20:51:39Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487667 Scribunto text/plain local export = {} local debug_track_module = "Module:debug/track" local functions_module = "Module:fun" local parameters_module = "Module:parameters" local parse_interface_module = "Module:parse interface" local parse_utilities_module = "Module:parse utilities" local table_module = "Module:table" local dump = mw.dumpObject local error = error local insert = table.insert local ipairs = ipairs local next = next local pairs = pairs local require = require local tonumber = tonumber local type = type --[==[ Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls. ]==] local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local function is_callable(...) is_callable = require(functions_module).is_callable return is_callable(...) end local function list_to_set(...) list_to_set = require(table_module).listToSet return list_to_set(...) end local function parse_inline_modifiers(...) parse_inline_modifiers = require(parse_interface_module).parse_inline_modifiers return parse_inline_modifiers(...) end local function process_params(...) process_params = require(parameters_module).process return process_params(...) end local function shallow_copy(...) shallow_copy = require(table_module).shallowCopy return shallow_copy(...) end local function table_len(...) table_len = require(table_module).length return table_len(...) end ----------------- end loaders ---------------- local function track(page, track_module) return debug_track((track_module or "parameter utilities") .. "/" .. page) end -- Throw an error prefixed with the words "Internal error" (and suffixed with a dumped version of `spec`, if provided). -- This is for logic errors in the code itself rather than template user errors. local function internal_error(msg, spec) if spec then msg = ("%s: %s"):format(msg, dump(spec)) end error(("Internal error: %s"):format(msg)) end -- Table listing the default recognized special separator arguments and how they display. export.default_special_separators = { [";"] = "; ", ["_"] = " ", ["~"] = " ~ ", ["→"] = " → ", } -- Table listing how subitem delimiters display. Unlike for `default_special_separators`, the presence of an item in -- this table does not mean that the delimiter is recognized; only those specified by `data.splitchar` are recognized. export.default_subitem_separator_map = { [";"] = "; ", [","] = ", ", ["/"] = "/", ["_"] = " ", ["~"] = " ~ ", ["→"] = " → ", } --[==[ intro: The purpose of this module is to facilitate implementation of templates that can have arguments specified either through inline modifiers or separate parameters. There are two types of templates supported: those that take a list of items with associated properties, which can be specified either through indexed separate parameters (e.g. {{para|t2}}, {{para|pos3}}) or inline modifiers (`<t:...>`, `<pos:...>`, etc.); and those that take a single term, whose properties can be specified through non-indexed separate parameters (e.g. {{para|t}} or {{para|pos}}) or inline modifiers. Both types of templates can optionally have subitems in the term parameter(s), where the subitems are typically (but not necessarily) separated with commas and each subitem can have its own inline modifiers. Some examples of templates that take a list of items are {{tl|alter}}/{{tl|alt}}; {{tl|synonyms}}/{{tl|syn}}, {{tl|antonyms}}/{{tl|ant}}, and other "nyms" templates; {{tl|col}}, {{tl|col2}}, {{tl|col3}}, {{tl|col4}} and other column templates; {{tl|descendant}}/{{tl|desc}}; {{tl|affix}}/{{tl|af}}, {{tl|prefix}}/{{tl|pre}} and related *fix templates; {{tl|affixusex}}/{{tl|afex}} and related templates; {{tl|IPA}}; {{tl|homophones}}; {{tl|rhymes}}; and several others. Examples of templates that take a single item are form-of templates ({{tl|inflection of}}/{{tl|infl of}}, {{tl|form of}}, and specific templates such as {{tl|alt form}}/{{tl|alternative form of}}, {{tl|abbr of}}/{{tl|abbreviation of}}, {{tl|clipping of}}, and many others); for etymology templates ({{tl|bor}}/{{tl|borrowed}}, {{tl|der}}/{{tl|derived}}, etc. as well as `misc_variant` templates like {{tl|ellipsis}}, {{tl|abbrev}}, {{tl|clipping}}, {{tl|reduplication}} and the like); and other templates that take an argument structure similar to {{tl|l}} or {{tl|m}}. This module can be thought of as a combination of [[Module:parameters]] (which parses template parameters, and in particular handles the separate parameter versions of the properties) and `parse_inline_modifiers()` in [[Module:parse utilities]] (which parses inline modifiers). The two main entry points are `parse_list_with_inline_modifiers_and_separate_params()` (for templates that take a list of items) and `parse_term_with_inline_modifiers_and_separate_params()` (for templates that take a single item). However, there are other functions provided, e.g. to initialize the `param_mods` structure that is passed to the two entry points. The typical workflow for using `parse_list_with_inline_modifiers_and_separate_params()` looks as follows (a slightly simplified version of the code in [[Module:nyms]]): { local export = {} local parameter_utilities_module = "Module:parameter utilities" ... -- Entry point to be invoked from a template. function export.show(frame) local parent_args = frame:getParent().args -- Parameters that don't have corresponding inline modifiers. Note in particular that the parameter corresponding to -- the items themselves must be specified this way, and must specify either `allow_holes = true` (if the user can -- omit terms, typically by specifying the term using |altN= or <alt:...> so that they remain unlinked) or -- `disallow_holes = true` (if omitting terms is not allowed). (If neither `allow_holes` nor `disallow_holes` is -- specified, an error is thrown in parse_list_with_inline_modifiers_and_separate_params().) local params = { [1] = {required = true, type = "language", default = "und"}, [2] = {list = true, allow_holes = true, required = true, default = "term"}, } local m_param_utils = require(parameter_utilities_module) -- This constructs the `param_mods` structure by adding well-known groups of parameters (such as all the parameters -- associated with based on full_link() in [[Module:links]], with default properties that can be overridden. This is -- easier and less error-prone than manually specifying the `param_mods` structure (see below for how this would -- look). Here, we specify the group "link" (consisting of all the link parameters for use with full_link()), group -- "ref" (which adds the "ref" parameter for specifying references), group "l" (which adds the "l" and "ll" -- parameters for specifying labels) and group "q" (which adds the "q" and "qq" parameters for specifying regular -- qualifiers). By default, labels and qualifiers have `separate_no_index` set so that e.g. |q1= is distinct from -- |q=, the former specifying the left qualifier for the first item and the latter specifying the overall left -- qualifier. For compatibility, we override the `separate_no_index` setting for the group "q", which causes |q= and -- |q1= to be the same, and likewise for |qq= and |qq1=. Finally, also for compatibility, we add an "lb" parameter -- that is an alias of "ll" (in all respects; |lb= is the same as |ll=, |lb1= is the same as |ll1=, <lb:...> is the -- same as <ll:...>, etc.). local param_mods = m_param_utils.construct_param_mods { {group = {"link", "ref", "l"}}, {group = "q", separate_no_index = false}, {param = "lb", alias_of = "ll"}, } -- This processes the raw arguments in `parent_args`, parses inline modifiers and creates corresponding objects -- containing the property values specified either through inline modifiers or separate parameters. local items, args = m_param_utils.parse_list_with_inline_modifiers_and_separate_params { params = params, param_mods = param_mods, raw_args = parent_args, termarg = 2, parse_lang_prefix = true, track_module = "nyms", lang = 1, sc = "sc.default", } local lang = args[1] -- Now do the actual implementation of the template. Generally this should be split into a separate function, often -- in a separate module (if the implementation goes in [[Module:foo]], the template interface code goes in -- [[Module:foo/templates]]). ... } The `param_mods` structure controls the properties that can be specified by the user for a given item, and is conceptually very similar to the `param_mods` structure used by `parse_inline_modifiers()`. The key is the name of the parameter (e.g. {"t"}, {"pos"}) and the value is a table with optional elements as follows: * `item_dest`, `store`: Same as the corresponding fields in the `param_mods` structure passed to `parse_inline_modifiers()`. * `type`, `set`, `sublist`, `convert` and associated fields such as `family` and `method`: These control parsing and conversion of the raw values specified by the user and have the same meaning as in [[Module:parameters]] and also in `parse_inline_modifiers()` (which delegates the actual conversion to [[Module:parameters]]). These fields — and for that matter, all fields other than `item_dest`, `store` and `overall` — are forwarded to the `process()` function in [[Module:parameters]]. * `alias_of`: This parameter is an alias of some other parameter. This spec is recognized only by `process()` in [[Module:parameters]], and not by `parse_inline_modifiers()`; to set up an alias in `parse_inline_modifiers()`, you need to make sure (using `item_dest`) that both the alias and aliasee modifiers store their values in the same location, and you need to copy the remaining properties from the aliasee's spec to the aliasing modifier's spec. All of this happens automatically if you generate the `param_mods` structure using `construct_param_mods()`. * `require_index`: This means that the non-indexed parameter version of the property is not recognized. E.g. in the case of the {"sc"} property, use of the {{para|sc}} parameter would result in an error, while {{para|sc1}} is recognized and specifies the {"sc"} property for the first item. The default, if neither `require_index` nor `separate_no_index` is given, is for {{para|sc}} and {{para|sc1}} to mean the same thing (both would specify the {"sc"} property of the first item). Note that `require_index` and `separate_no_index` are mutually exclusive, and if either one is specified during processing by `construct_param_mods()`, the other one is automaticallly turned off. * `separate_no_index`: This means that e.g. the {{para|sc}} parameter is distinct from the {{para|sc1}} parameter (and thus from the `<sc:...>` inline modifier on the first item). This is typically used to distinguish an overall version of a property from the corresponding item-specific property on the first item. (In this case, for example, {{para|sc}} overrides the script code for all items, while {{para|sc1}} overrides the script code only for the first item.) If not given, and if `require_index` is not given, {{para|sc}} and {{para|sc1}} would have the same meaning and refer to the item-specific property on the first item. When this is given, the overall value can be accessed using the `.default` field of the property value in `args`, e.g. in this case `args.sc.default`. Note that (as mentioned above) `require_index` and `separate_no_index` are mutually exclusive, and if either one is specified during processing by `construct_param_mods()`, the other one is automaticallly turned off. * `list`, `allow_holes`, `disallow_holes`: These should '''not''' be given. `list` and `allow_holes` are automatically set for all parameter specs added to the `params` structure used by `process()` in [[Module:parameters]], and `disallow_holes` clashes with `allow_holes`. For the above workflow example, the call to `construct_param_mods()` generates the following `param_mods` structure: { local param_mods = { -- the parameters generated by group "link" alt = {}, t = { -- [[Module:links]] expects the gloss in "gloss". item_dest = "gloss", }, gloss = { alias_of = "t", }, tr = {}, ts = {}, g = { -- [[Module:links]] expects the genders in "genders". item_dest = "genders", type = "genders", }, pos = {}, ng = {}, lit = {}, id = {}, sc = { separate_no_index = true, type = "script", }, -- the parameters generated by group "ref" ref = { item_dest = "refs", type = "references", }, -- the parameters generated by group "l" l = { type = "labels", separate_no_index = true, }, ll = { type = "labels", separate_no_index = true, }, -- the parameters generated by group "q"; note that `separate_no_index = true` would be set, but is overridden -- (specifying `separate_no_index = false` in the `param_mods` structure is equivalent to not specifying it at all) q = { type = "qualifier", separate_no_index = false, }, qq = { type = "qualifier", separate_no_index = false, }, infl = { type = "form of tags", separate_no_index = true, }, -- the parameter generated by the individual "lb" parameter spec; note that only `alias_of` was explicitly given, -- while `item_dest` is automatically set so that inline modifier <lb:...> stores into the same place as <ll:...>, -- and the other specs are copied from the `ll` spec so `lb` works like `ll` in all regards lb = { alias_of = "ll", item_dest = "ll", type = "labels", separate_no_index = true, }, } } ]==] local qualifier_spec = { type = "qualifier", separate_no_index = true, } local label_spec = { type = "labels", separate_no_index = true, } local form_of_spec = { type = "form of tags", separate_no_index = true, } local recognized_param_mod_groups = { link = { alt = {}, t = { -- [[Module:links]] expects the gloss in "gloss". item_dest = "gloss", }, gloss = { alias_of = "t", }, tr = {}, ts = {}, g = { -- [[Module:links]] expects the genders in "genders". item_dest = "genders", type = "genders", }, pos = {}, ng = {}, lit = {}, id = {}, sc = { separate_no_index = true, type = "script", }, }, lang = { lang = { require_index = true, type = "language", }, }, q = { q = qualifier_spec, qq = qualifier_spec, }, a = { a = label_spec, aa = label_spec, }, l = { l = label_spec, ll = label_spec, }, infl = { infl = form_of_spec, }, ref = { ref = { item_dest = "refs", type = "references", }, }, } local function merge_param_mod_settings(orig, additions) local merged = shallow_copy(orig) for k, v in pairs(additions) do merged[k] = v if k == "require_index" then merged.separate_no_index = nil elseif k == "separate_no_index" then merged.require_index = nil end end merged.default = nil merged.group = nil merged.param = nil merged.exclude = nil merged.include = nil return merged end local function verify_type(spec, param, typ1, typ2) if not spec[param] then return end local val = spec[param] if type(val) ~= typ1 and (not typ2 or type(val) ~= typ2) then internal_error(("Parameter `%s` must be a %s%s but saw a %s"):format(param, typ1, typ2 and " or " .. typ2 or "", type(val)), spec) end end local function verify_well_constructed_spec(spec) local num_control = (spec.default and 1 or 0) + (spec.group and 1 or 0) + (spec.param and 1 or 0) if num_control == 0 then internal_error( "Spec passed to construct_param_mods() must have either the `default`, `group` or `param` keys set", spec) end if num_control > 1 then internal_error( "Exactly one of `default`, `group` or `param` must be set in construct_param_mods() spec", spec) end if spec.list or spec.allow_holes then -- FIXME: We need to support list = "foo" for list parameters that are stored in e.g. 2=, foo2=, foo3=, etc. internal_error("`list` and `allow_holes` may not be set; they are automatically set when constructing the " .. "corresponding spec in the `params` object passed to [[Module:parameters]]", spec) end if spec.disallow_holes then internal_error("`disallow_holes` may not be set; it conflicts with `allow_holes`, which is automatically " .. "set when constructing the corresponding spec in the `params` object passed to [[Module:parameters]]", spec) end if spec.include and spec.exclude then internal_error("Saw both `include` and `exclude` in the same spec", spec) end if (spec.include or spec.exclude) and not spec.group then internal_error( "`include` and `exclude` can only be specified along with `group`, not with `default` or `param`", spec) end verify_type(spec, "group", "string", "table") verify_type(spec, "param", "string", "table") verify_type(spec, "include", "table") verify_type(spec, "exclude", "table") end --[==[ Construct the `param_mods` structure used in parsing arguments and inline modifiers from a list of specifications. A sample invocation (a slightly simplified version of the actual invocation associated with {{tl|affix}} and related templates) looks like this: { local param_mods = require("Module:parameter utilities").construct_param_mods { -- We want to require an index for all params (or use separate_no_index, which also requires an index for the -- param corresponding to the first item). {default = true, require_index = true}, {group = {"link", "ref", "lang", "q", "l"}}, -- Override these two to have separate_no_index. {param = {"lit", "pos"}, separate_no_index = true}, } } Each specification either sets the default value for further parameter specs or adds one or more parameters. Parameters can be added directly using `param`, or groups of predefined parameters can be added using `group`. Specifications are one of three types: # Those that set the default properties for future-added parameters. These contain {default = true} as one of the properties of the spec. Specs are processed in order and you can change the defaults mid-way through. # Those that add the parameters associated with one or more pre-defined groups. These contain {group = "group"} or {group = {"group1", "group2", ...}}. The pre-defined parameter groups and their associated properties are listed below. The pre-defined properties of parameters in a group override properties associated with a {default = true} spec, and are in turn overridden by any properties given directly in the spec itself. Note as well that setting the `separate_no_index` property will automatically cause the `require_index` property to be unset and vice-versa, as the two are mutually exclusive. (This happens in the example above, where the {separate_no_index = true} setting associated with the params {"lit"} and {"pos"} cancels out the {require_index = true} default setting, as well as less obviously with the pre-defined {"sc"} property of the {"link"} group, the {"q"} and {"qq"} properties of the {"q"} group, and the {"l"} and {"ll"} properties of the {"l"} group, all of which have an associated pre-defined property {separate_no_index = true}, which overrides and cancels out the {require_index = true} default setting. Finally, when adding the parameters of a group, you can request the only a subset of the parameters be added using either the `include` or `exclude` properties, each of whose values is a list of parameters that specify (respectively) the parameters to include (all other parameters of the group are excluded) or to exclude (all other parameters of the group are included). This is used, for example, in [[Module:romance etymology]] and [[Module:it-etymology]], which specify {group = "link", exclude = {"tr", "ts", "sc"}} to exclude link parameters that aren't relevant to Latin-script languages such as the Romance languages, and conversely in [[Module:IPA/templates]], which specifies {group = "link", include = {"t", "gloss", "pos"}} to include only the specified parameters for use with {{tl|IPA}}. # Those that add individual parameters. These contain {param = "param"} or {param = {"param1", "param2", ...}}, the latter syntax used to control a set of parameters together. The resulting spec is formed by initializing the parameter's settings with any previously-specified default properties (using a spec containing {default = true}) if the parameter hasn't already been initialized, and then overriding the resulting settings with any settings given directly in the specification. In the above example, the {"lit"} and {"pos"} parameters were previously initialized through the {"link"} group (specified in the second of the three specifications) but ended up with {require_index = true} due to the {default = true} spec (the first of the three specifications). We override these two parameters to have {separate_no_index = true} (which, as mentioned above, cancels out {require_index = true}). This is done so that {{tl|affix}} and related templates have {{para|pos}} and {{para|lit}} parameters distinct from {{para|pos1}} and {{para|lit1}}, which are used to specify an overall part of speech (which applies to all parts of the affix, as opposed to applying to just one element of the expression) or a literal definition for the entire expression (instead of just for one element of the expression). The built-in parameter groups are as follows: {|class="wikitable" ! Group !! Group meaning !! Parameter !! Parameter meaning !! Default properties |- | rowspan=11| `link` | rowspan=11| link parameters; same as those available on {{tl|l}}, {{tl|m}} and other linking templates | `alt` || display text, overriding the term's display form || — |- | `t` || gloss (translation) of a non-English term || {item_dest = "gloss"} |- | `gloss` || gloss (translation); same as `t` || {alias_of = "t"} |- | `tr` || transliteration of a non-Latin-script term; only needed if the automatic transliteration is incorrect or unavailable (e.g. in Hebrew, which doesn't have automatic transliteration) || — |- | `ts` || transcription of a non-Latin-script term, if the transliteration is markedly different from the actual pronunciation; should not be used for IPA pronunciations || — |- | `g` || comma-separated list of genders; whitespace may surround the comma and will be ignored || {item_dest = "genders", type = "genders"} |- | `pos` || part of speech for the term || — |- | `ng` || arbitrary non-gloss descriptive text for the term || — |- | `lit` || literal meaning (translation) of the term || — |- | `id` || a sense ID for the term, which links to anchors on the page set by the {{tl|senseid}} template || — |- | `sc` || the script code (see [[Wiktionary:Scripts]]) for the script that the term is written in; rarely necessary, as the script is autodetected (in most cases, correctly) || {separate_no_index = true, type = "script"} |- | rowspan=2| `q` | rowspan=2| left and right normal qualifiers (as displayed using {{tl|q}}) | `q` || left normal qualifier || {separate_no_index = true, type = "qualifier"} |- | `qq` || right normal qualifier || {separate_no_index = true, type = "qualifier"} |- | rowspan=2| `a` | rowspan=2| left and right accent qualifiers (as displayed using {{tl|a}}) | `a` || comma-separated list of left accent qualifiers; whitespace must not surround the comma || {separate_no_index = true, type = "labels"} |- | `aa` || comma-separated list of right accent qualifiers; whitespace must not surround the comma || {separate_no_index = true, type = "labels"} |- | rowspan=2| `l` | rowspan=2| left and right labels (as displayed using {{tl|lb}}, but without categorizing) | `l` || comma-separated list of left labels; whitespace must not surround the comma || {separate_no_index = true, type = "labels"} |- | `ll` || comma-separated list of right labels; whitespace must not surround the comma || {separate_no_index = true, type = "labels"} |- | `ref` | reference(s) (in the format accepted by [[Module:references]]; see also the documentation for the {{para|ref}} parameter to {{tl|IPA}}) | `ref` || one or more references, in the format accepted by [[Module:references]] || {item_dest = "refs", type = "references"} |- | `lang` | language for an individual term (provided for compatibility; it is preferred to specify languages for individual terms using language prefixes instead) | `lang` || language code (see [[Wiktionary:Languages]]) for the term || {require_index = true, type = "language"} |} ]==] function export.construct_param_mods(specs) local param_mods = {} local default_specs = {} for _, spec in ipairs(specs) do verify_well_constructed_spec(spec) if spec.default then -- This will have an extra `default` field in it, but it will be erased by merge_param_mod_settings() default_specs = spec else if spec.group then local groups = spec.group if type(groups) ~= "table" then groups = {groups} end local include_set if spec.include then include_set = list_to_set(spec.include) end local exclude_set if spec.exclude then exclude_set = list_to_set(spec.exclude) end for _, group in ipairs(groups) do local group_specs = recognized_param_mod_groups[group] if not group_specs then internal_error(("Unrecognized built-in param mod group '%s'"):format(group), spec) end for group_param, group_param_settings in pairs(group_specs) do local include_param if include_set then include_param = include_set[group_param] elseif exclude_set then include_param = not exclude_set[group_param] else include_param = true end if include_param then local merged_settings = merge_param_mod_settings(merge_param_mod_settings( param_mods[group_param] or default_specs, group_param_settings), spec) param_mods[group_param] = merged_settings end end end end if spec.param then local params = spec.param if type(params) ~= "table" then params = {params} end for _, param in ipairs(params) do local settings = merge_param_mod_settings(param_mods[param] or default_specs, spec) -- If this parameter is an alias of another parameter, we need to copy the specs from the other -- parameter, since parse_inline_modifiers() doesn't know about `alias_of` and having the specs -- duplicated won't cause problems for [[Module:parameters]]. We also need to set `item_dest` to -- point to the `item_dest` of the aliasee (defaulting to the aliasee's value itself), so that -- both modifiers write to the same location. Note that this works correctly in the common case of -- <t:...> with `item_dest = "gloss"` and <gloss:...> with `alias_of = "t"`, because both will end -- up with `item_dest = "gloss"`. local aliasee = settings.alias_of if aliasee then local aliasee_settings = param_mods[aliasee] if not aliasee_settings then internal_error(("Undefined aliasee '%s'"):format(aliasee), spec) end for k, v in pairs(aliasee_settings) do if settings[k] == nil then settings[k] = v end end if settings.item_dest == nil then settings.item_dest = aliasee end end param_mods[param] = settings end end end end return param_mods end -- Return true if `k` is a "built-in" (specially recognized) key in a `param_mod` specification. All other keys -- are forwarded to the structure passed to [[Module:parameters]]. local function param_mod_spec_key_is_builtin(k) return k == "item_dest" or k == "overall" or k == "store" end --[==[ Convert the properties in `param_mods` into the appropriate structures for use by `process()` in [[Module:parameters]] and store them in `params`. If `overall_only` is given, only store the properties in `param_mods` that correspond to overall (non-item-specific) parameters. Currently this only happens when `separate_no_index` is specified. ]==] function export.augment_params_with_modifiers(params, param_mods, overall_only) if overall_only then for param_mod, param_mod_spec in pairs(param_mods) do if overall_only == "always" or param_mod_spec.separate_no_index then local param_spec = {} for k, v in pairs(param_mod_spec) do if k ~= "separate_no_index" and k ~= "require_index" and not param_mod_spec_key_is_builtin(k) then param_spec[k] = v end end params[param_mod] = param_spec end end else local list_with_holes -- Add parameters for each term modifier. for param_mod, param_mod_spec in pairs(param_mods) do local param_spec for k, v in pairs(param_mod_spec) do if not param_mod_spec_key_is_builtin(k) then if param_spec == nil then param_spec = {list = true} end param_spec[k] = v end end if param_spec == nil then if list_with_holes == nil then list_with_holes = {list = true, allow_holes = true} end param_spec = list_with_holes elseif param_spec.alias_of == nil then param_spec.allow_holes = true end params[param_mod] = param_spec end end end --[==[ Return true if `k`, a key in an item, refers to a property of the item (is not one of the specially stored values). Note that `lang` and `sc` are considered properties of the item, although `lang` is set when there's a language prefix and both `lang` and `sc` may be set from default values specified in the `data` structure passed into `parse_list_with_inline_modifiers_and_separate_params()` and `parse_term_with_inline_modifiers_and_separate_params()`. If you don't want these treated as property keys, you need to check for them yourself. ]==] function export.item_key_is_property(k) return k ~= "term" and k ~= "termlang" and k ~= "termlangs" and k ~= "itemno" and k ~= "orig_index" and k ~= "separator" end -- Fetch the argument in `args` corresponding to `index_or_value`, which may be a string of the form "foo.default" -- (requesting the value of `args["foo"].default`); a string or number (requesting the value at that key); a function of -- one argument (`args`), which returns the argument value; or the value itself. Return the resulting value and the -- parameter in `args` that the value came from, or nil if unknown (i.e. a function or direct value was specified). local function fetch_argument(args, index_or_value) if not index_or_value then return index_or_value, nil end local index_or_value_type = type(index_or_value) if index_or_value_type == "string" then if index_or_value:sub(-8) == ".default" then local index_without_default = index_or_value:sub(1, -9) local arg_obj = fetch_argument(args, index_without_default) if type(arg_obj) ~= "table" then internal_error(("Requested that the '.default' key of argument `%s` be fetched, but argument value is undefined or not a table"): format(index_without_default), arg_obj) end return arg_obj.default, index_without_default end if index_or_value:match("^%d+$") then index_or_value = tonumber(index_or_value) end return args[index_or_value], index_or_value elseif index_or_value_type == "number" then return args[index_or_value], index_or_value elseif is_callable(index_or_value) then return index_or_value(args), nil end return index_or_value, nil end function export.generate_obj_maybe_parsing_lang_prefix(data) return require(parse_utilities_module).generate_obj_maybe_parsing_lang_prefix(data) end -- Subfunction of parse_list_with_inline_modifiers_and_separate_params() and -- parse_term_with_inline_modifiers_and_separate_params(), validating certain argument-related fields that are shared -- among the two functions. local function validate_argument_related_fields(data) if not data.termarg then internal_error("`data.termarg` must be given, indicating which argument contains the terms to be parsed", data) end if not data.param_mods then internal_error("`data.param_mods` must be given, indicating the allowed inline modifiers and separate " .. "parameters to copy", data) end local subitem_param_handling = data.subitem_param_handling or "only" if subitem_param_handling ~= "only" and subitem_param_handling ~= "first" and subitem_param_handling ~= "last" then internal_error("Unrecognized value for `data.subitem_param_handling`, should be 'first', 'last' or 'only'", subitem_param_handling) end if data.raw_args then if data.processed_args then internal_error("Only one of `data.raw_args` and `data.processed_args` can be specified", data) end if not data.params then internal_error("When `data.raw_args` is specified, so must `data.params`, so that the raw arguments " .. "can be parsed", data) end if data.params[data.termarg] == nil then internal_error("There must be a spec in `data.params` corresponding to `data.termarg`", data) end else if not data.processed_args then internal_error("Either `data.raw_args` or `data.processed_args` must be specified", data) end if data.params then internal_error("When `data.processed_args` is specified, `data.params` should not be specified", data) end end end local function argval_missing(val) return val == nil or type(val) == "table" and next(val) == nil end -- Subfunction of parse_list_with_inline_modifiers_and_separate_params() and -- parse_term_with_inline_modifiers_and_separate_params(). After parsing inline modifiers, copy the separate parameters -- to the generated object (or to the appropriate subobject if there are multiple). `data` contains the following -- fields: -- -- `args`: The separate-parameter argument structure. -- `param_mods`: The structure describing the inline modifiers. -- `itemno`: The logical item number of the term being processed, or nil if there's only a single term. -- `termobj`: The object to store the inline modifiers into. If there are subitems, they are in the `terms` field; -- otherwise the properties are stored directly into `termobj`. -- `has_subitems`: True if there are subitems. -- `subitem_separator_map`: If `has_subitems` and this is specified, controls the assignment of the `separator` field -- in subitems. If not specified or a delimiter is not in the map, it is copied unchanged. -- `lang`: Language object to store into all items. -- `sc`: Script object to store into all items, or nil. -- `subitem_param_handling`: "only", "first" or "last", indicating what to do if there are multiple subitems. -- `allow_conflicting_inline_mods_and_separate_params`: If true, specifying a value for both an inline modifier and -- corresponding separate parameter is allowed, and the inline modifier takes precedence. Otherwise, an error -- occurs. -- `postprocess_termobj`: Optional function called on all items at the end, to do any postprocessing. Called with one -- argument, the object to postprocess. local function copy_separate_params_to_termobj_and_postprocess(data) local args, param_mods, itemno, termobj = data.args, data.param_mods, data.itemno, data.termobj local function set_lang_and_sc(termobj) -- Set these after parsing inline modifiers, not in generate_obj(), otherwise we'll get an error in -- parse_inline_modifiers() if we try to use <lang:...> or <sc:...> as inline modifiers. termobj.lang = termobj.lang or data.lang termobj.sc = termobj.sc or data.sc end local function fetch_separate_param(args, paramkey, itemno) local argval = args[paramkey] -- Careful with argument values that may be `false`. if argval and itemno then argval = argval[itemno] end return argval end -- Copy separate parameters to a given object. local function copy_separate_params_to_termobj(fetch_destobj) for param_mod, param_mod_spec in pairs(param_mods) do local dest = param_mod_spec.item_dest or param_mod -- Don't do anything with the `sc` param, which will get overwritten below; we don't -- want it to cause an error if there are multiple subitems. if dest ~= "sc" then local argval = fetch_separate_param(args, param_mod, itemno) if not argval_missing(argval) then local destobj = fetch_destobj(param_mod, param_mod_spec, dest) -- Don't overwrite a value already set by an inline modifier. if argval_missing(destobj[dest]) then destobj[dest] = argval elseif not data.allow_conflicting_inline_mods_and_separate_params then error(("Can't specify a value for separate parameter %s%s= because there is " .. "already an inline modifier <%s:...> specifying a value for the term"):format( param_mod, itemno or "", param_mod)) end end end end end if data.has_subitems then -- If there are any separate indexed parameters, we need to copy them to the first, last or only -- subitem, depending on the value of `data.subitem_param_handling` (which defaults to 'only', -- meaning it's an error if there are multiple subitems). Do this before calling -- postprocess_termobj() because the latter sets .lang and .sc and we want the user to be able to -- set separate langN= and scN= parameters. -- If there was no term, `termobj.terms` will not exist; make it exist to make the callers' lives easier. if not termobj.terms then termobj.terms = {} end -- Compute whether any of the separate indexed params exist for this index. local any_param_at_index for param_mod in pairs(param_mods) do local argval = fetch_separate_param(args, param_mod, itemno) if not argval_missing(argval) then any_param_at_index = true break end end -- If there was no term, but there's a separate parameter, we need to create an empty subitem. if any_param_at_index and not termobj.terms[1] then termobj.terms[1] = {} end local function fetch_destobj(param_mod, param_mod_spec, dest) if param_mod_spec.overall then return termobj end if data.subitem_param_handling == "only" and termobj.terms[2] then error(("Can't specify a value for separate parameter %s%s= because there are " .. "multiple subitems (%s) in the term; use an inline modifier"):format( param_mod, itemno or "", #termobj.terms)) end local termind -- q/a/l need to go at the beginning and qq/aa/ll/refs at the end, regardless; otherwise, respect -- `data.subitem_param_handling`. if dest == "q" or dest == "a" or dest == "l" then termind = 1 elseif dest == "qq" or dest == "aa" or dest == "ll" or dest == "refs" then termind = #termobj.terms elseif data.subitem_param_handling == "only" or data.subitem_param_handling == "first" then termind = 1 else termind = #termobj.terms end return termobj.terms[termind] end copy_separate_params_to_termobj(fetch_destobj) for i, subitem in ipairs(termobj.terms) do set_lang_and_sc(subitem) if subitem.delimiter then subitem.separator = i == 1 and "" or data.subitem_separator_map and data.subitem_separator_map[subitem.delimiter] or subitem.delimiter end if data.postprocess_termobj then data.postprocess_termobj(subitem, data) end end else -- Copy all the parsed term-specific parameters into `termobj`. copy_separate_params_to_termobj(function(param_mod, dest) return termobj end) set_lang_and_sc(termobj) if data.postprocess_termobj then data.postprocess_termobj(termobj, data) end end end local function postprocess_termobj(item, data) if not (data.disallow_custom_separators or data.use_semicolon) then if data.has_subitems and item.separator and item.separator:find(",", nil, true) then data.use_semicolon = true else -- If the displayed term (from .term/etc. or .alt) has an embedded comma, use a semicolon to -- join the terms. local term_text = item[data.term_dest] or item.alt if term_text and term_text:find(",", nil, true) then data.use_semicolon = true end end end end --[==[ Parse a list of terms, each of which may have properties specified using inline modifiers or separate parameters. This function is intended for parsing the arguments of templates like {{tl|syn}}, {{tl|ant}} and related ''*nym'' templates; alternative-form templates {{tl|alt}}/{{tl|alter}}; affix templates like {{tl|af}}/{{tl|affix}}, {{tl|com}}/{{tl|compound}}, etc.; affix usex templates like {{tl|afex}}/{{tl|affixusex}}; name templates like {{tl|name translit}}; column templates like {{tl|col}}; pronunciation templates like {{tl|rhyme}}/{{tl|rhymes}} and {{tl|hmp}}/{{tl|homophones}}; etc. In these templates there are one or more terms specified using numeric parameters, and associated separate parameters specifying per-term properties such as {{para|t1}}, {{para|t2}}, {{para|t3}}, ... for the gloss of the first, second, third, ... term respectively. All such properties can also be specified through inline modifiers attached directly to each term (`<t:...>`, `<pos:...>`, etc.). Normally it is an error if both an inline modifier and separate parameter for the same value are given, but this can be overridden (in which case inline modifiers take precedence over separate parameters when both occur). For an example of a typical workflow involving this function, see the comment at the top of this file. Some notable properties of this function: # Processing of the raw frame parent args using `process()` in [[Module:parameters]] can occur either inside of this function (the usual workflow) or outside of this function (for more complex cases). In the former case the raw parent args are passed in along with a partially built `params` structure of the sort required by [[Module:parameters]], containing only the term list itself along with any other parameters that are '''not''' term properties (such as a language code in {{para|1}} and boolean flags like {{para|nocat}}, {{para|nocap}}, etc.). This structure is ''augmented'' with list parameters, one for each per-term property, and [[Module:parameters]] is invoked. In the latter case where raw argument processing is done by the caller, they must build the partial `params` structure; augment it themselves using `augment_params_with_modifiers()`; call [[Module:parameters]] themselves; and pass in the processed arguments. In both cases, the return value of this function contains three values: a list of objects, one per term, specifying the term and all properties; the processed arguments structure, so that the non-term-property arguments can be processed as appropriate; and an object containing miscellaneous global computed properties (currently only `use_semicolon`; see below). # Optionally, each term can consist of a number of ''subitems'' separated by delimiters (usually a comma, but the possible delimiter or delimiters are controllable). Each subitem can have its own inline modifiers. This functionality is used, for example, by {{tl|col}} and variants, which allow each row to have comma-separated or tilde-separated subitems. When this feature is invoked, the format of the per-term object changes; instead of directly being an object describing the term and its properties, it is an object with a `terms` field containing a list of per-subitem objects along with other top-level fields describing per-term properties. By default, if there are separate parameters specified along with multiple subitems, an error occurs, but this is controllable; currently, you can request that the parameters be assigned to the first or last subitem. # By default, special ''separator'' arguments may be present, mixed in among regular term arguments. Examples of such separator arguments are (by default; this can be overridden) a bare semicolon, specifying that the terms on either side should be separated by a semicolon instead of a comma (indicating a higher-level grouping); a bare tilde, replacing the comma separator with a tilde (indicating that the terms on either side are alternants); and a bare underscore, replacing the comma separator with a space. Separator arguments are ignored when numbering the separate parameters. You disable the separator argument handling entirely if it doesn't make sense to have this (e.g. in {{tl|af}}/{{tl|affix}}, where the separator is always a {{cd|+}} sign). `data` is an object containing several possible fields. 1. Fields that are required or recommended (usually related to argument processing): * `raw_args` ('''required''' unless `processed_args` is specified): The raw arguments, normally fetched from {frame:getParent().args}. They are parsed using `process()` in [[Module:parameters]]. Most callers pass in raw arguments. * `processed_args`: The object of parsed arguments returned by `process()` in [[Module:parameters]]. One (but not both) of `raw_args` and `processed_args` must be set. * `param_mods` ('''required'''): A structure describing the possible inline modifiers and their properties. See the introductory comment above. Most often, this is generated using `construct_param_mods()` rather than specified manually. * `params` ('''required''' unless `processed_args` is specified): A structure describing the possible parameters, '''other than''' the ones that are separate-parameter equivalents of inline modifiers. This is automatically "augmented" with the separate-parameter equivalents of the inline modifiers described in `param_mods` prior to parsing the raw arguments with [[Module:parameters]]. '''WARNING:''' This structure is destructively modified, both by the "augmentation" process of adding separate-parameter equivalents of inline modifiers, and by the processing done by [[Module:parameters]] itself. (Nonetheless, substructures can safely be shared in this structure, and will be correctly handled.) * `termarg` ('''required'''): The argument containing the first item with attached inline modifiers to be parsed. Usually a numeric value such as {1} or {2}. * `track_module` ('''recommended'''): The name of the calling module, for use in adding tracking pages that are used internally to track pages containing template invocations with certain properties. Example properties tracked are missing items with corresponding properties as well as missing items without corresponding properties (which are skipped entirely). To find out the exact properties tracked and the name of the tracking pages, read the code. * `lang` ('''recommended'''): The language object for the language of the items, or the name of the argument to fetch the object from. It is not strictly necessary to specify this, as this function only initializes items based on inline modifiers and separate arguments and doesn't actually format the resulting items. However, if specified, it is used for certain purposes: *# It specifies the default for the `lang` property of returned objects if not otherwise set (e.g. by a language prefix). *# It is used to initialize an internal cache for speeding up language-code parsing (primarily useful if the same language code may appear in several items, such as with {{tl|col}} and related templates). The value of `lang` can be any of the following: * If a string of the form "foo.default", it is assumed to be requesting the value of `args["foo"].default`. * Otherwise, if a string or number, it is assumed to be requesting the value of `args` at that key. Note that if the string is in the form of a number (e.g. "3"), it is normalized to a number prior to fetching (this also happens with a spec like "2.default"). * Otherwise, if a function, it is assumed to be a function to return the argument value given `args`, which is passed to the function as its only argument. * Otherwise, it is used directly. * `sc` ('''recommended'''): The script object for the items, or the name of the argument to fetch the object from. The possible values and their handling are the same as with `lang`. In general, as with `lang`, it is not strictly necessary to specify this. However, if specified, it is used to supply the default for the `sc` property of returned items if not otherwise set (e.g. by the {{para|sc<var>N</var>}} parameter or `<sc:...>` inline modifier). The most common value is {"sc.default"}. 2. Other argument-related fields: * `process_args_before_parsing`: An optional function to apply further processing to the processed `args` structure returned by [[Module:parameters]], before parsing inline modifiers. This is passed one argument, the processed arguments. It should make modifications in-place. * `term_dest`: The field to store the value of the item itself into, after inline modifiers and (if allowed) language prefixes are stripped off. Defaults to {"term"}. * `pre_normalize_modifiers`: As in `parse_inline_modifiers()`. * `allow_conflicting_inline_mods_and_separate_params`: If specified, don't throw an error if a value is specified for a given property using both an inline modifier and separate param; in this case, the inline modifier takes precedence. 3. Fields related to language prefixes: * `parse_lang_prefix`: If true, allow and parse off a language code prefix attached to items followed by a colon, such as {la:minūtia} or {grc:[[σκῶρ|σκατός]]}. Etymology-only languages are allowed. Inline modifiers can be attached to such items. The exact syntax allowed is as specified in the `parse_term_with_lang()` function in [[Module:parse utilities]]. If `allow_multiple_lang_prefixes` is given, a {{cd|+}}-sign-separated list of language prefixes can be attached to an item. The resulting language object is stored into the `termlang` field, and also into the `lang` field (or in the case of `allow_multiple_lang_prefixes`, the list of language objects is stored into the `termlangs` field, and the first specified object is stored in the `lang` field). * `allow_multiple_lang_prefixes`: If given in conjunction with `parse_lang_prefix`, multiple language code prefixes can be given, separated by a {{cd|+}} sign. See `parse_lang_prefix` above. * `allow_bad_lang_prefix`: If given in conjunction with `parse_lang_prefix`, unrecognized language prefixes do not trigger an error, but are simply ignored (and not stripped off the item). Note that, regardless of whether this is given, prefixes before a colon do not trigger an error if they do not have the form of a language prefix or if a space follows the colon. It is not recommended that this be given because typos in language prefixes will not trigger an error and will tend to remain unfixed. 4. Fields related to custom/special separators: * `disallow_custom_separators`: If specified, disallow specifying custom separators (semicolon, underscore, tilde; see the internal `default_special_separators` table, or the `special_separators` field) as an item value to override the default separator. By default, the previous separator of each item is considered to be an empty string (for the first item) and otherwise the value of the field `default_separator` (normally a comma + space), unless either the preceding item is one of the values listed in `special_separators`, such as a bare semicolon (which causes the following item's previous separator to be a semicolon + space) or an item has an embedded comma in it (which causes ''all'' items other than the first to have their previous separator be a semicolon + space). The previous separator of each item is set on the item's `separator` property. Bare semicolons and other separator arguments do not count when indexing items using separate parameters. For example, the following is correct: ** {{tl|template|lang|item 1|q1=qualifier 1|;|item 2|q2=qualifier 2}} If `disallow_custom_separators` is specified, however, the `separator` property is not set and separator arguments are not recognized. * `default_separator`: Override the default separator (normally {", "}). * `special_separators`: Table giving the special/custom separators that can be given, and how they should display. If not specified, the default in `default_special_separators` is used. This is a table mapping separator values (such as {"~"}) to the corresponding display string (such as {" ~ "}). 5. Fields related to multiple subitems in a given term: * `splitchar`: A Lua pattern. If specified, each user-specified argument can consist of multiple delimiter-separated subitems, each of which may be followed by inline modifiers. In this case, each element in the returned list of items is no longer an object describing an item, but instead an object with a `terms` field, whose value is a list describing the subitems (whose format is the same as the normal format of an item in the top-level list when `splitchar` is not specified). Each subitem object will have a `delimiter` field holding the actual delimiter occurring before the subitem, which is useful in the case where `splitchar` matches multiple possible characters. In this case, it is possible to specify that a given modifier can only occur after the last subitem and effectively modifies the whole collection of subitems by setting `overall = true` on the modifier. In this case, the modifier's value will be stored in the top-level object (the object with the `terms` field specifying the subitems). Note that splitting on delimiters will not happen in certain protected sequences (by default comma+whitespace; see below). In addition, the algorithm to split on delimiters is sensitive to inline modifier syntax and will not be confused by delimiters inside of inline modifiers or inside of square brackets, which do not trigger splitting (whether or not contained within protected sequences). * `escape_fun` and `unescape_fun`: As in `split_escaping()` and `split_alternating_runs_escaping()` in [[Module:parse utilities]]. They control the protected sequences that won't be split when `splitchar` is specified (see previous item). By default, `escape_comma_whitespace` and `unescape_comma_whitespace` are used, so that comma+whitespace sequences won't be split. * `subitem_param_handling`: How to handle separate parameters that are specified in the presence of multiple subitems. The possible values are {"only"} (only allow separate parameters if there aren't any subitems, otherwise throw an error), {"first"} (store the separate parameters in the first subitem) and {"last"} (store the separate parameters in the last subitem). The default is {"only"}. As a special case, an {{para|scN}} separate parameter will be stored into all subitems. * `subitem_separator_map`: Table mapping user-specified delimiters to displayed separators, stored in the `separator` field of the subitem. If not specified, it defaults to `default_subitem_separator_map`. Note that the presence of an item in this table does not mean that it can be used as a delimiter; only the delimiters specified using `splitchar` are recognized. Delimiters not in this map display as-is. 6. Other fields: * `dont_skip_items`: Normally, items that are completely unspecified (have no term and no properties) are skipped and not inserted into the returned list of items. (Such items cannot occur if `disallow_holes = true` is set on the term specification in the `params` structure passed to `process()` in [[Module:parameters]]. It is generally recommended to do so unless a specific meaning is associated the term value being missing.) If `dont_skip_items` is set, however, items are never skipped, and completely unspecified items will be returned along with others. (They will not have the term or any properties set, but will have the normal non-property fields set; see below.) * `stop_when`: If specified, a function to determine when to prematurely stop processing items. It is passed a single argument, an object containing the following fields: ** `term`: The raw term, prior to parsing off language prefixes and inline modifiers (since the processing of `stop_when` happens before parsing the term). ** `any_param_at_index`: True if any separate property parameters exist for this item. ** `orig_index`: Same as `orig_index` below. ** `itemno`: Same as `itemno` below. ** `stored_itemno`: The index where this item will be stored into the returned items table. This may differ from `itemno` due to skipped items (it will never be different if `dont_skip_items` is set). The function should return true to stop processing items and return the ones processed so far (not including the item currently being processed). This is used, for example, in [[Module:alternative forms]], where an unspecified item signal the end of items and the start of labels. Three values are returned: the list of items; the processed `args` structure; and an object of miscellaneous computed global values (currently only `use_semicolon`, indicating that commas were found in individual arguments and so the default separator should be a semicolon). In each returned item, there will be one field set for each specified property (either through inline modifiers or separate parameters). If subitems are not allowed, each item directly has fields set on it for the specified properties. If subitems ''are'' allowed, each item contains a `terms` field, which is a list of subitem objects, each of which has fields set on it for the specified properties of that subitem. In addition, the following fields may be set on each item or subitem: * `term`: The term portion of the item (minus inline modifiers and language prefixes). {nil} if no term was given. * `orig_index`: The original index into the item in the items table returned by `process()` in [[Module:parameters]]. This may differ from `itemno` if there are raw semiclons and `disallow_custom_separators` is not given. * `itemno`: The logical index of the item. The index of separate parameters corresponds to this index. This may be different from `orig_index` in the presence of raw semicolons; see above. * `termlang`: If there is a language prefix, the corresponding language object is stored here (only if `parse_lang_prefix` is set and `allow_multiple_lang_prefixes` is not set). * `termlangs`: If there is are language prefixes and both `parse_lang_prefix` and `allow_multiple_lang_prefixes` are set, the list of corresponding language objects is stored here. * `lang`: The language object of the item. This is set when either (a) there is a language prefix parsed off (if multiple prefixes are allowed, this corresponds to the first one); (b) the `lang` property is allowed and specified; (c) neither (a) nor (b) apply and the `lang` field of the overall `data` object is set, providing a default value. * `sc`: The script object of the item. This is set when either (a) the `sc` property is allowed and specified; (b) `sc` isn't otherwise set and the `sc` field of the overall `data` object is set, providing a default value. * `delimiter`: If subitems are allowed, this is set on subitems and specifies the delimiter used prior to the given subitem (e.g. {","}). * `separator`: The separator to display before the item. Always set on subitems, and set on top-level items if `disallow_custom_separators` is not given. Controlled by `special_separators` (for top-level items) and `subitem_separator_map` (for subitems). ]==] function export.parse_list_with_inline_modifiers_and_separate_params(data) validate_argument_related_fields(data) local raw_args, termarg, param_mods, args = data.raw_args, data.termarg, data.param_mods if raw_args then local params = data.params local termarg_spec = params[termarg] if termarg_spec == true or not termarg_spec.list then internal_error("Term spec in `data.params` must have `list` set", termarg_spec) end if termarg_spec == true or not (termarg_spec.allow_holes or termarg_spec.disallow_holes) then internal_error("Term spec in `data.params` must have either `allow_holes` or `disallow_holes` set", termarg_spec) end export.augment_params_with_modifiers(params, param_mods) args = process_params(raw_args, params) else args = data.processed_args end local process_args_before_parsing = data.process_args_before_parsing if process_args_before_parsing then process_args_before_parsing(args) end -- Find the maximum index among any of the list parameters. local term_args = args[termarg] -- As a special case, the term args might not have a `maxindex` field because they might have -- been declared with `disallow_holes = true`, so fall back to the actual length of the list -- using the table_len function, since # can be unpredictable with arbitrary tables. local maxmaxindex = term_args.maxindex or table_len(term_args) for _, v in pairs(args) do if type(v) == "table" and v.maxindex and v.maxindex > maxmaxindex then maxmaxindex = v.maxindex end end local special_separators = data.special_separators or export.default_special_separators local items, lang_cache, use_semicolon = {}, data.lang_cache or {} local lang = fetch_argument(args, data.lang) if lang then lang_cache[lang:getCode()] = lang end local sc = fetch_argument(args, data.sc) local term_dest = data.term_dest or "term" -- FIXME: this is vulnerable to abusive inputs like 1000000=. local itemno = 0 for i = 1, maxmaxindex do local term = term_args[i] if data.disallow_custom_separators or not special_separators[term] then itemno = itemno + 1 -- Compute whether any of the separate indexed params exist for this index. local any_param_at_index for param_mod in pairs(param_mods) do local argval = args[param_mod] -- Careful with argument values that may be `false`. if argval then argval = argval[itemno] end if not argval_missing(argval) then any_param_at_index = true break end end if data.stop_when and data.stop_when{ term = term, -- FIXME, we should just pass in `any_param_at_index` directly. any_param_at_index = term ~= nil or any_param_at_index, orig_index = i, itemno = itemno, stored_itemno = #items + 1, } then break end -- If any of the params used for formatting this term is present, create a term and add it to the list. if not data.dont_skip_items and term == nil and not any_param_at_index then track("skipped-term", data.track_module) else if not term then track("missing-term", data.track_module) end local termobj = { itemno = itemno, orig_index = i, } if not data.disallow_custom_separators then termobj.separator = i == 1 and "" or special_separators[term_args[i - 1]] end -- Add 1 because first term index starts at 2. local paramname = termarg + i - 1 if term then local function generate_obj(term, parse_err) return export.generate_obj_maybe_parsing_lang_prefix { term = term, termobj = data.splitchar and {} or termobj, term_dest = term_dest, paramname = paramname, parse_lang_prefix = data.parse_lang_prefix, parse_err = parse_err, allow_bad_lang_prefix = data.allow_bad_lang_prefix, allow_multiple_lang_prefixes = data.allow_multiple_lang_prefixes, lang_cache = lang_cache, } end parse_inline_modifiers(term, { paramname = paramname, param_mods = param_mods, generate_obj = generate_obj, splitchar = data.splitchar, preserve_splitchar = true, escape_fun = data.escape_fun, unescape_fun = data.unescape_fun, outer_container = data.splitchar and termobj or nil, pre_normalize_modifiers = data.pre_normalize_modifiers, }) end local term_data = { args = args, param_mods = param_mods, itemno = itemno, termobj = termobj, term_dest = term_dest, has_subitems = not not data.splitchar, lang = lang, -- As a special case, if the caller defined a scN= separate param, set it on all subitems if there -- are multiple, falling back to the overall sc= param. sc = args.sc and args.sc[itemno] or sc, subitem_param_handling = data.subitem_param_handling, subitem_separator_map = data.subitem_separator_map or export.default_subitem_separator_map, allow_conflicting_inline_mods_and_separate_params = data.allow_conflicting_inline_mods_and_separate_params, postprocess_termobj = postprocess_termobj, disallow_custom_separators = data.disallow_custom_separators, use_semicolon = use_semicolon, } copy_separate_params_to_termobj_and_postprocess(term_data) use_semicolon = term_data.use_semicolon insert(items, termobj) end end end if not data.disallow_custom_separators then -- Set the default separator of all those items for which a separator wasn't explicitly given to the default -- separator, defaulting to comma + space; but if any items have embedded commas, set the separator to -- semicolon + space. for _, item in ipairs(items) do if not item.separator then item.separator = use_semicolon and "; " or data.default_separator or ", " end end end return items, args, {use_semicolon = use_semicolon} end --[==[ Parse a single term that may have properties specified through inline modifiers or separate parameters. This differs from `parse_list_with_inline_modifiers_and_separate_params()` in that the latter is for parsing a list of terms, each of which may have properties specified through inline modifiers or separate parameters. Both functions optionally support having multiple subitems in a single term. This function is used e.g. for form-of templates ({{tl|inflection of}}/{{tl|infl of}}, {{tl|form of}}, and specific templates such as {{tl|alt form}}/{{tl|alternative form of}}, {{tl|abbr of}}/{{tl|abbreviation of}}, {{tl|clipping of}}, and many others); for etymology templates ({{tl|bor}}/{{tl|borrowed}}, {{tl|der}}/{{tl|derived}}, etc. as well as `misc_variant` templates like {{tl|ellipsis}}, {{tl|abbrev}}, {{tl|clipping}}, {{tl|reduplication}} and the like); and for other templates with an argument structure similar to {{tl|l}} or {{tl|m}}. In these templates there is a term specified using a numeric parameter and associated separate parameters specifying term properties such as {{para|t}} for the gloss or {{para|tr}} for manual transliteration. All such properties can also be specified through inline modifiers attached directly to each term (`<t:...>`, `<tr:...>`, etc.). Normally it is an error if both an inline modifier and separate parameter for the same value are given, but this can be overridden (in which case inline modifiers take precedence over separate parameters when both occur). Some notable properties of this function: # Processing of the raw frame parent args using `process()` in [[Module:parameters]] can occur either inside of this function (the usual workflow) or outside of this function (for more complex cases). In the former case the raw parent args are passed in along with a partially built `params` structure of the sort required by [[Module:parameters]], containing only the term list itself along with any other parameters that are '''not''' term properties (such as a language code in {{para|1}} and boolean flags like {{para|nocat}}, {{para|nocap}}, etc.). This structure is ''augmented'' with parameters, one for each per-term property, and [[Module:parameters]] is invoked. In the latter case where raw argument processing is done by the caller, they must build the partial `params` structure; augment it themselves using `augment_params_with_modifiers()`; call [[Module:parameters]] themselves; and pass in the processed arguments. In both cases, the return value of this function contains two values, an object specifying the term and all properties; and the processed arguments structure, so that the non-term-property arguments can be processed as appropriate. # Optionally, the term can consist of a number of ''subitems'' separated by delimiters (usually a comma, but the possible delimiter or delimiters are controllable). Each subitem can have its own inline modifiers. This functionality is used, for example, by form-of templates. When this feature is invoked, the format of the term object changes; instead of directly being an object describing the term and its properties, it is an object with a `terms` field containing a list of per-subitem objects along with other top-level fields describing per-term properties. By default, if there are separate parameters specified along with multiple subitems, an error occurs, but this is controllable; currently, you can request that the parameters be assigned to the first or last subitem. `data` is an object containing several possible fields. 1. Fields that are required or recommended (usually related to argument processing): * `raw_args` ('''required''' unless `processed_args` is specified): The raw arguments, normally fetched from {frame:getParent().args}. They are parsed using `process()` in [[Module:parameters]]. Most callers pass in raw arguments. * `processed_args`: The object of parsed arguments returned by `process()` in [[Module:parameters]]. One (but not both) of `raw_args` and `processed_args` must be set. * `param_mods` ('''required'''): A structure describing the possible inline modifiers and their properties. See the introductory comment above. Most often, this is generated using `construct_param_mods()` rather than specified manually. * `params` ('''required''' unless `processed_args` is specified): A structure describing the possible parameters, '''other than''' the ones that are separate-parameter equivalents of inline modifiers. This is automatically "augmented" with the separate-parameter equivalents of the inline modifiers described in `param_mods` prior to parsing the raw arguments with [[Module:parameters]]. '''WARNING:''' This structure is destructively modified, both by the "augmentation" process of adding separate-parameter equivalents of inline modifiers, and by the processing done by [[Module:parameters]] itself. (Nonetheless, substructures can safely be shared in this structure, and will be correctly handled.) * `termarg` ('''required'''): The argument containing the item with attached inline modifiers to be parsed. Usually a numeric value such as {1} or {2}. * `track_module` ('''recommended'''): The name of the calling module, for use in adding tracking pages that are used internally to track pages containing template invocations with certain properties. * `lang` ('''recommended'''): The language object for the language of the item or subitems, or the name of the argument to fetch the object from. It is not strictly necessary to specify this, as this function only initializes items based on inline modifiers and separate arguments and doesn't actually format the resulting items. However, if specified, it is used for certain purposes: *# It specifies the default for the `lang` property of returned objects if not otherwise set (e.g. by a language prefix). *# It is used to initialize an internal cache for speeding up language-code parsing (primarily useful if the same language code may appear in several subitems). The value of `lang` can be any of the following: * If a string or number, it is assumed to be requesting the value of `args` at that key. Note that if the string is in the form of a number (e.g. "3"), it is normalized to a number prior to fetching. * Otherwise, if a function, it is assumed to be a function to return the argument value given `args`, which is passed to the function as its only argument. * Otherwise, it is used directly. * `sc` ('''recommended'''): The script object for the item or subitems, or the name of the argument to fetch the object from. The possible values and their handling are the same as with `lang`. In general, as with `lang`, it is not strictly necessary to specify this. However, if specified, it is used to supply the default for the `sc` property of returned items if not otherwise set (e.g. by the {{para|sc}} parameter or `<sc:...>` inline modifier). The most common value is {"sc"}. * `make_separate_g_into_list`: Set this to {true} if separate gender parameters exist are are specified using {{para|g}}, {{para|g2}}, etc. instead of using a single comma-separated {{para|g}} field. 2. Other argument-related fields: * `adjust_params_before_arg_processing`: An optional function to further adjust the `params` structure prior to calling `process()` in [[Module:parameters]]. This should be used when there are mismatches between the format of a given property as an inline modifier and the corresponding property as a separate parameter (as with the {{para|g}} parameter and {{cd|<g:...>}} modifier, but this particular case is handled by the `make_separate_g_into_list` field). * `process_args_before_parsing`: An optional function to apply further processing to the processed `args` structure returned by [[Module:parameters]], before parsing inline modifiers. This is passed one argument, the processed arguments. It should make modifications in-place. * `term_dest`: The field to store the value of the item itself into, after inline modifiers and (if allowed) language prefixes are stripped off. Defaults to {"term"}. * `pre_normalize_modifiers`: As in `parse_inline_modifiers()`. * `allow_conflicting_inline_mods_and_separate_params`: If specified, don't throw an error if a value is specified for a given property using both an inline modifier and separate param; in this case, the inline modifier takes precedence. 3. Fields related to language prefixes: * `parse_lang_prefix`: If true, allow and parse off a language code prefix attached to items followed by a colon, such as {la:minūtia} or {grc:[[σκῶρ|σκατός]]}. Etymology-only languages are allowed. Inline modifiers can be attached to such items. The exact syntax allowed is as specified in the `parse_term_with_lang()` function in [[Module:parse utilities]]. If `allow_multiple_lang_prefixes` is given, a {{cd|+}}-sign-separated list of language prefixes can be attached to an item. The resulting language object is stored into the `termlang` field, and also into the `lang` field (or in the case of `allow_multiple_lang_prefixes`, the list of language objects is stored into the `termlangs` field, and the first specified object is stored in the `lang` field). * `allow_multiple_lang_prefixes`: If given in conjunction with `parse_lang_prefix`, multiple language code prefixes can be given, separated by a {{cd|+}} sign. See `parse_lang_prefix` above. * `allow_bad_lang_prefix`: If given in conjunction with `parse_lang_prefix`, unrecognized language prefixes do not trigger an error, but are simply ignored (and not stripped off the item). Note that, regardless of whether this is given, prefixes before a colon do not trigger an error if they do not have the form of a language prefix or if a space follows the colon. It is not recommended that this be given because typos in language prefixes will not trigger an error and will tend to remain unfixed. 4. Fields related to multiple subitems in the term: * `splitchar`: A Lua pattern. If specified, the user-specified argument can consist of multiple delimiter-separated subitems, each of which may be followed by inline modifiers. In this case, the first returned value is no longer an object describing the item, but instead an object with a `terms` field, whose value is a list describing the subitems (whose format is the same as the normal format of the item when `splitchar` is not specified). Each subitem object will have a `delimiter` field holding the actual delimiter occurring before the subitem, which is useful in the case where `splitchar` matches multiple possible characters. In this case, it is possible to specify that a given modifier can only occur after the last subitem and effectively modifies the whole collection of subitems by setting `overall = true` on the modifier. In this case, the modifier's value will be stored in the top-level object (the object with the `terms` field specifying the subitems). Note that splitting on delimiters will not happen in certain protected sequences (by default comma+whitespace; see below). In addition, the algorithm to split on delimiters is sensitive to inline modifier syntax and will not be confused by delimiters inside of inline modifiers or inside of square brackets, which do not trigger splitting (whether or not contained within protected sequences). * `escape_fun` and `unescape_fun`: As in `split_escaping()` and `split_alternating_runs_escaping()` in [[Module:parse utilities]]. They control the protected sequences that won't be split when `splitchar` is specified (see previous item). By default, `escape_comma_whitespace` and `unescape_comma_whitespace` are used, so that comma+whitespace sequences won't be split. * `subitem_param_handling`: How to handle separate parameters that are specified in the presence of multiple subitems. The possible values are {"only"} (only allow separate parameters if there aren't any subitems, otherwise throw an error), {"first"} (store the separate parameters in the first subitem) and {"last"} (store the separate parameters in the last subitem). The default is {"only"}. As a special case, an {{para|scN}} separate parameter will be stored into all subitems. * `subitem_separator_map`: Table mapping user-specified delimiters to displayed separators, stored in the `separator` field of the subitem. If not specified, it defaults to `default_subitem_separator_map`. Note that the presence of an item in this table does not mean that it can be used as a delimiter; only the delimiters specified using `splitchar` are recognized. Delimiters not in this map display as-is. Two values are returned, an object describing the item (or subitems) and the processed `args` structure. In the returned item, there will be one field set for each specified property (either through inline modifiers or separate parameters). If subitems are not allowed, the item directly has fields set on it for the specified properties. If subitems ''are'' allowed, the item contains a `terms` field, which is a list of subitem objects, each of which has fields set on it for the specified properties of that subitem. In addition, the following fields may be set on the item or each subitem: * `term`: The term portion of the item (minus inline modifiers and language prefixes). {nil} if no term was given. * `termlang`: If there is a language prefix, the corresponding language object is stored here (only if `parse_lang_prefix` is set and `allow_multiple_lang_prefixes` is not set). * `termlangs`: If there is are language prefixes and both `parse_lang_prefix` and `allow_multiple_lang_prefixes` are set, the list of corresponding language objects is stored here. * `lang`: The language object of the item. This is set when either (a) there is a language prefix parsed off (if multiple prefixes are allowed, this corresponds to the first one); (b) the `lang` property is allowed and specified; (c) neither (a) nor (b) apply and the `lang` field of the overall `data` object is set, providing a default value. * `sc`: The script object of the item. This is set when either (a) the `sc` property is allowed and specified; (b) `sc` isn't otherwise set and the `sc` field of the overall `data` object is set, providing a default value. * `delimiter`: If subitems are allowed, this specifies the delimiter used prior to the given subitem (e.g. {","}). * `separator`: If subitems are allowed, this specifies the displayed form of the delimiter to be shown before a given subitem. The mapping from user-specified delimiters to displayed separators is handled by `subitem_separator_map`; see above. The first subitem always has a blank string in the `separator` field. ]==] function export.parse_term_with_inline_modifiers_and_separate_params(data) validate_argument_related_fields(data) local raw_args, termarg, param_mods, args = data.raw_args, data.termarg, data.param_mods if raw_args then local params = data.params local termarg_spec = params[termarg] if type(termarg_spec) == "table" and termarg_spec.list then internal_error("Term spec in `data.params` must not have `list` set", termarg_spec) end export.augment_params_with_modifiers(params, param_mods, "always") if data.make_separate_g_into_list then -- HACK: g= is a list for compatibility, but sublist as an inline parameter. params.g = {list = true, item_dest = "genders", type = "genders", flatten = true} end local adjust_params_before_arg_processing = data.adjust_params_before_arg_processing if adjust_params_before_arg_processing then adjust_params_before_arg_processing(params) end args = process_params(raw_args, params) else args = data.processed_args end local process_args_before_parsing = data.process_args_before_parsing if process_args_before_parsing then process_args_before_parsing(args) end local term, lang_cache = args[termarg], data.lang_cache local lang = fetch_argument(args, data.lang) if lang and lang_cache then lang_cache[lang:getCode()] = lang end local sc = fetch_argument(args, data.sc) local term_dest = data.term_dest or "term" if not term then track("missing-term", data.track_module) end local termobj, splitchar = {}, data.splitchar if term then local function generate_obj(term, parse_err) return export.generate_obj_maybe_parsing_lang_prefix { term = term, termobj = splitchar and {} or termobj, term_dest = term_dest, paramname = termarg, parse_lang_prefix = data.parse_lang_prefix, parse_err = parse_err, allow_bad_lang_prefix = data.allow_bad_lang_prefix, allow_multiple_lang_prefixes = data.allow_multiple_lang_prefixes, lang_cache = lang_cache, } end parse_inline_modifiers(term, { paramname = termarg, param_mods = param_mods, generate_obj = generate_obj, splitchar = splitchar, preserve_splitchar = true, escape_fun = data.escape_fun, unescape_fun = data.unescape_fun, outer_container = splitchar and termobj or nil, pre_normalize_modifiers = data.pre_normalize_modifiers, }) end copy_separate_params_to_termobj_and_postprocess{ args = args, param_mods = param_mods, termobj = termobj, has_subitems = not not splitchar, lang = lang, sc = sc, subitem_param_handling = data.subitem_param_handling, subitem_separator_map = data.subitem_separator_map or export.default_subitem_separator_map, allow_conflicting_inline_mods_and_separate_params = data.allow_conflicting_inline_mods_and_separate_params, } if splitchar and termobj.terms[2] then track("parse-term-multiple-subitems", data.track_module) track("parse-term-multiple-subitems") end return termobj, args end return export 17j6htwomicae9ker3scwcncfv96kk5 मॉड्यूल:parameters/finalizeSet 828 306918 487668 2026-09-01T20:53:17Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487668 Scribunto text/plain local parameters_track_module = "Module:parameters/track" local dump = mw.dumpObject local error = error local format = string.format local pairs = pairs local tostring = tostring local type = type local function track(...) track = require(parameters_track_module) return track(...) end local type_err = 'expected set members to be of type "string" or "number", but saw %s' --[==[ -- Takes `t`, a list or key map which defines a set, and returns a key map for the set (which might be the original input value). In addition to distinguishing lists from key maps, this function performs various validation checks: * Sets may only contain strings and numbers (i.e. the two valid data types for Scribunto parameters). * List inputs must be contiguous arrays, with no other keys in use (even if they are non-numbers). * Key maps are treated as having two different kinds of key: ** If a key's value is boolean {true}, it is a standard key. ** If a key's value is anything else, it is an alias of the specified key (which must not be an alias itself). For instance, if the key {"foo"} is set to {"bar"}, then {"foo"} is an alias of the key {"bar"}, which must be a non-alias key that is also in the key map.]==] return function(t, name) -- Iterates over `t` using pairs(), doing separate key map and list parses simultaneously. If the key map parse succeeds, `t` will simply be returned, but if the list parse succeeds, a key map of the values in the list will be returned instead. -- Lists and key maps are mutually exclusive, as they can be distinguished by the presence of boolean `true` as a value: -- (1) If `t` is a list, then `true` is an invalid value, because sets may only contain strings and numbers. -- (2) If `t` is a key map, then it must contain at least one `true` as a value, because any keys which do not have `true` as their value are (by definition) aliases, and aliases must be pointed to a non-alias key (i.e. a key which has the value `true`), which is only possible if one or more keys are set to `true`. -- (Formally, an empty table could be either, but it's more efficient to treat it as a key map.) local i, new_map, list_err, map_err, duplicate_in_list = 0 -- The two parses are separated into blocks, which can be skipped on any -- further iterations if that parse fails. for k, v in pairs(t) do local k_type, v_type = type(k) -- The while-blocks make it possible to use `break` as a substitute for -- `goto`, and both unconditionally terminate after one iteration. while not list_err do -- Catch holes using the same method as [[Module:table/isArray]], -- but also check for non-number keys. i = i + 1 if k_type ~= "number" or t[i] == nil then list_err = "input list is not contiguous" break end -- If `t` is a list then `v` is a set member, so it must be a string -- or number. v_type = type(v) if not (v_type == "string" or v_type == "number") then list_err = format( type_err, v_type == "boolean" and tostring(v) or v_type ) -- Populate `new_map` with valid keys. elseif not new_map then new_map = {[v] = true} -- If new_map[v] is already set, then `t` has duplicates. This -- should be tracked, but only if `t` does turn out to be a list, so -- flag it with `duplicate_in_list` for now. elseif new_map[v] then duplicate_in_list = true else new_map[v] = true end break end while not map_err do -- If `t` is a list then `k` is a set member, so it must be a string -- or number. if not (k_type == "string" or k_type == "number") then map_err = format( type_err, k_type == "boolean" and tostring(k) or k_type ) break -- If `v` is true, `k` is a non-alias key. elseif v == true then break -- Filter out invalid self-aliases. elseif k == v then map_err = format( "set member %s cannot be an alias of itself", dump(k) ) break elseif not v_type then v_type = type(v) end -- Only possible to be an alias of another key, which must be a -- string or number. if not (v_type == "string" or v_type == "number") then map_err = format( 'expected set key %s have the value true or a value of type "string" or "number", but saw %s', dump(k), v_type == "boolean" and tostring(v) or v_type ) break end -- Must be an alias of a non-alias, so the value for the key `v` -- must be `true`. local main = t[v] if main ~= true then map_err = format( "set member %s is specified as an alias of %s, %s", dump(k), dump(v), main == nil and "which is not in the set" or "which is also an alias" ) end break end -- If both parses have failed, throw an error with the two messages. if list_err and map_err then error(format( "Internal error: the `set` spec%s cannot be parsed as either a list or a key map:\nlist parse: %s\nmap parse: %s", name and format(" for parameter %s", dump(name)) or "", map_err, list_err )) end end -- If `t` can be parsed as a key map, just return it. if not map_err then return t -- Otherwise, `t` is a list, so track duplicate entries if it has been -- flagged. elseif duplicate_in_list then track("duplicate entry in set list") end -- Return the new key map. return new_map end aoylq9j5kt5vr096lzl6bv7hjufnzka मॉड्यूल:parse interface 828 306919 487669 2026-09-01T20:54:50Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487669 Scribunto text/plain local export = {} local string_utilities_module = "Module:string utilities" local parse_utilities_module = "Module:parse utilities" local table_module = "Module:table" --[=[ Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls. ]=] local function rfind(...) rfind = require(string_utilities_module).find return rfind(...) end local function rsplit(...) rsplit = require(string_utilities_module).split return rsplit(...) end local function split_on_comma(...) split_on_comma = require(parse_utilities_module).split_on_comma return split_on_comma(...) end local function split_escaping(...) split_escaping = require(parse_utilities_module).split_escaping return split_escaping(...) end local function parse_inline_modifiers(...) parse_inline_modifiers = require(parse_utilities_module).parse_inline_modifiers return parse_inline_modifiers(...) end local function parse_term_with_lang(...) parse_term_with_lang = require(parse_utilities_module).parse_term_with_lang return parse_term_with_lang(...) end local function term_contains_top_level_html(...) term_contains_top_level_html = require(parse_utilities_module).term_contains_top_level_html return term_contains_top_level_html(...) end local function escape_comma_whitespace(...) escape_comma_whitespace = require(parse_utilities_module).escape_comma_whitespace return escape_comma_whitespace(...) end local function unescape_comma_whitespace(...) unescape_comma_whitespace = require(parse_utilities_module).unescape_comma_whitespace return unescape_comma_whitespace(...) end local function shallow_copy(...) shallow_copy = require(table_module).shallowCopy return shallow_copy(...) end local function decode_entities(...) -- FIXME: Why are we doing this? It was added to [[Module:form of/templates]] in -- https://en.wiktionary.org/w/index.php?title=Module:form_of/templates&diff=prev&oldid=81900806 on 2024-09-24 -- by [[User:Theknightwho]] with the comment "Optimisations + decode HTML entities.". -- -- NOTE: We could add a check for & in the term before calling decode_entities(), but in practice, -- [[Module:string utilities]] is essentially always loaded so there's little point. str_decode_entities = require(string_utilities_module).decode_entities return str_decode_entities(...) end --[==[ This is an almost drop-in replacement for split_on_comma() in [[Module:parse utilities]], with optimizations to avoid loading and running the while algorithm in [[Module:parse utilities]] except when necessary. ]==] function export.split_on_comma(val) if val:find(",%s") or (val:find(",") and val:find("[\\%[<]")) then -- Comma after whitespace not split; nor are backslash-escaped commas or commas inside of square or -- angle brackets. If we see any of these, use the more sophisticated algorithm in -- [[Module:parse utilities]]. Otherwise it's safe to just split on commas directly. This optimization -- avoids loading [[Module:parse utilities]] unnecessarily. return split_on_comma(val) else return rsplit(val, ",") end end --[==[ This is similar to parse_term_with_lang() in [[Module:parse utilities]], but if there is no colon + non-space in the term, it will be returned directly and not parsed into link/display format. If you need the link/display arguments even in the absence of a language prefix, call [[Module:parse utilities]] directly. ]==] function export.parse_term_with_lang(data) if data.term:find(":[^ ]") then return parse_term_with_lang(data) else return data.term, nil, nil, nil end end --[==[ This is an almost drop-in replacement for parse_inline_modifiers() in [[Module:parse utilities]] except that # it won't attempt to parse inline modifiers if it detects that top-level HTML is present (but it will still split on `splitchar` if given, unless it detects the presence of the {{tl|,}} template); # it has a default for `generate_obj` that simply sets `lang` and `term` after calling `decode_entities()` on the term (FIXME: this was inherited from code added to [[Module:form of/templates]] by [[User:Theknightwho]]; I don't know why it is necessary); # it has a lot of optimizations to avoid loading [[Module:parse utilities]] in simple cases where there are no `<` signs and (when `splitchar` is given) either there are no delimiters present at all or no characters present that will make a simple split on `splitchar` invalid. Generally you should use this in preference to either calling parse_inline_modifiers() directly in [[Module:parse utilities]] or rolling your own front-end function. ]==] function export.parse_inline_modifiers(val, props) local paramname, lang, splitchar = props.paramname, props.lang, props.splitchar local preserve_splitchar, escape_fun, unescape_fun = props.preserve_splitchar, props.escape_fun, props.unescape_fun local outer_container = props.outer_container local generate_obj = props.generate_obj or function(term) return {lang = lang, term = decode_entities(term)} end local delimiter_key = props.delimiter_key or "delimiter" -- Check for inline modifier, e.g. מרים<tr:Miryem>. But exclude HTML entry with <span ...>, <i ...>, <br/> or -- similar in it, caused by wrapping an argument in {{l|...}}, {{af|...}} or similar. Basically, all tags of -- the sort we parse here should consist of a less-than sign, plus letters, plus a colon, e.g. <tr:...>, so if -- we see a tag on the outer level that isn't in this format, we don't try to parse it. The restriction to the -- outer level is to allow generated HTML inside of e.g. qualifier tags, such as foo<q:similar to {{m|fr|bar}}>. if val:find("<") and not term_contains_top_level_html(val) then if not props.generate_obj then props = shallow_copy(props) props.generate_obj = generate_obj end return parse_inline_modifiers(val, props) end if not splitchar then return generate_obj(val) end local retval if splitchar == "," and escape_fun == nil and unescape_fun == nil then if val:find(",</") then -- This happens when there's an embedded {{,}} template, as in [[MMR]], [[TMA]], [[DEI]], where an -- initialism expands to multiple terms; easiest not to try and parse the lemma spec as multiple lemmas. retval = {val} else retval = export.split_on_comma(val) end for i, split in ipairs(retval) do retval[i] = generate_obj(split) if preserve_splitchar and i > 1 then retval[delimiter_key] = "," end end elseif rfind(val, splitchar) then if val:find(",</") then -- This happens when there's an embedded {{,}} template, as in [[MMR]], [[TMA]], [[DEI]], where an -- initialism expands to multiple terms; easiest not to try and parse the lemma spec as multiple lemmas. retval = {val} elseif escape_fun or unescape_fun or val:find(",%s") or val:find("[\\%[<]") then local defaulted_escape_fun, defaulted_unescape_fun if escape_fun == nil then defaulted_escape_fun = escape_comma_whitespace end if unescape_fun == nil then defaulted_unescape_fun = unescape_comma_whitespace end retval = split_escaping(val, splitchar, preserve_splitchar, defaulted_escape_fun, defaulted_unescape_fun) elseif preserve_splitchar then retval = rsplit(val, "(" .. splitchar .. ")") else retval = rsplit(val, splitchar) end if preserve_splitchar then local new_retval = {} for j = 1, #retval, 2 do local obj = generate_obj(retval[j]) if j > 1 then obj[delimiter_key] = retval[j - 1] end table.insert(new_retval, obj) end retval = new_retval else for i, split in ipairs(retval) do retval[i] = generate_obj(split) end end else retval = {generate_obj(val)} end if outer_container then outer_container.terms = retval return outer_container end return retval end return export bq5sys0ifgirhdamppe6s3lw9xawfoo साँचा:as-IPA 10 306920 487671 2026-09-01T21:02:23Z SM7 6218 "<includeonly>{{#invoke:as-IPA|make}}</includeonly><noinclude>{{documentation}}</noinclude>" के साथ नया पृष्ठ बनाया 487671 wikitext text/x-wiki <includeonly>{{#invoke:as-IPA|make}}</includeonly><noinclude>{{documentation}}</noinclude> ctzcnvrm97njuupp52lbk93zyzro3b4 मॉड्यूल:as-IPA 828 306921 487672 2026-09-01T21:03:20Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487672 Scribunto text/plain local export = {} local lang = require("Module:languages").getByCode("as") local sc = require("Module:scripts").getByCode("Beng") local m_translit = require("Module:as-translit").tr local m_IPA = require("Module:IPA") local gsub = mw.ustring.gsub local gmatch = mw.ustring.gmatch local correspondences = { ["g"] = "ɡ", ["ñ"] = "n", ["ṗ"] = "pʰ", ["ḃ"] = "bʱ", ["y"] = "j", ["r"] = "ɹ", ["h"] = "ɦ", ["ḱ"] = "kʰ", ["ǵ"] = "ɡʱ", ["ź"] = "zʱ", ["ṫ"] = "tʰ", ["ḋ"] = "dʱ", ["ŕ"] = "ɹʱ", ["ṙ"] = "ɹi", ["a"] = "ɑ", ["o"] = "ɔ", ["e"] = "ɛ", ["ü"] = "ʊ", ["ë"] = "e", ["ö"] = "o", ["ʏ"] = "oi", ["ɵ"] = "oʊ", ["õ"] = "ɔ̃", ["e͂"] = "ɛ̃", ["ü͂"] = "ʊ", ["ë̃"] = "ẽ", ["ö̃"] = "ɔ̃", ["a͂"] = "ɑ", ["ĩ"] = "i", ["u͂"] = "u" } local vowels = "aiueoüóéʏɵ" local syllabify_pattern = "([" .. vowels .. "])([^" .. vowels .. " %.]+)([" .. vowels .. "])" local function syllabify(text) for count = 1, 2 do text = gsub(text, syllabify_pattern, function(a, b, c) return a .. gsub(gsub(b, "(.)(.+)", "%1.%2"), "^([^%.]+)$", ".%1") .. c end) end return text end function export.link(term) return require("Module:links").full_link{ term = term, lang = lang, sc = sc } end function export.toIPA(text) local result = {} local translit = m_translit(text, lang, sc, "IPA") if not translit then error('The term "' .. text .. '" could not be transliterated.') end local translit = syllabify(translit) for character in gmatch(translit, ".") do table.insert(result, correspondences[character] or character) end result = table.concat(result) result = gsub(result, "z%.z", "d.ʑ") result = gsub(result, "([" .. vowels .. "])ɦ", "%1ʱ") return result end function export.make(frame) local args = frame:getParent().args local pagetitle = mw.loadData("Module:headword/data").pagename local p, results = {}, {} if args[1] then for index, item in ipairs(args) do table.insert(p, (item ~= "") and item or nil) end else p = { pagetitle } end for _, Assamese in ipairs(p) do table.insert(results, { pron = "/" .. export.toIPA(Assamese) .. "/" }) end return '* ' .. m_IPA.format_IPA_full { lang = lang, items = results } end return export kqcgxrxs7o9rk6elugqhl45fmx7ft3h साँचा:as-adj 10 306922 487674 2026-09-02T02:11:49Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487674 wikitext text/x-wiki {{#invoke:checkparams|warn}}<!-- Validate template parameters -->{{head|as|adjective|sort={{{sort|}}}|head={{{head|}}}|tr={{{tr|}}}<!-- -->|{{#ifeq:{{{c}}}|+|comparative}}<!-- -->|[[আৰু]] {{pagename}}<!-- -->|{{#ifeq:{{{c}}}|+|superlative}}<!-- -->|[[আটাইতকৈ]] {{pagename}}<!-- -->}}<!-- --><noinclude>{{documentation}}</noinclude> fp1ce8so3l02l0y0vqkgmd2jdzm5gaa साँचा:as-verb 10 306923 487675 2026-09-02T02:14:39Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487675 wikitext text/x-wiki {{head|as|verb|sort={{{sort|}}}|tr={{{tr|}}}|head={{{head|}}}}} {{#if:{{{1|}}}|{{tlb|as|{{#switch:{{{1|}}}|t=transitive|i=intransitive|it|ti=ambitransitive|}}}}|}}<noinclude>{{documentation}}</noinclude> bj63qc8tzad9bcagnk1in807si86gfe साँचा:as-prop 10 306924 487676 2026-09-02T02:21:49Z SM7 6218 अंग्रेजी विक्षनरी से आयातित+स्थानीयकृत 487676 wikitext text/x-wiki {{head|as|व्यक्तिवाचक संज्ञाएँ|sort={{{sort|}}}|head={{{head|}}}|tr={{{tr|}}}<!-- -->|{{#if:{{{obj|}}}|कर्मकारक}}<!-- -->|{{{obj|}}}<!-- -->|f1tr={{{objtr|}}}<!-- -->|{{#if:{{{obj2|}}}|अथवा}}<!-- -->|{{{obj2|}}}<!-- -->|f2tr={{{obj2tr|}}}<!-- -->|{{#if:{{{gen|}}}|संबंधकारक}}<!-- -->|{{{gen|}}}<!-- -->|f3tr={{{gentr|}}}<!-- -->|{{#if:{{{loc|}}}|अधिकरणकारक}}<!-- -->|{{{loc|}}}<!-- -->|f4tr={{{loctr|}}}<!-- -->|{{#if:{{{loc2|}}}|or}}<!-- -->|{{{loc2|}}}<!-- -->|f5tr={{{loc2tr|}}}<!-- -->|{{#if:{{{mw|}}}|classifier}}<!-- -->|{{{mw|}}}<!-- -->|f6tr={{{mwtr|}}}<!-- -->}}<!-- -->{{#if:{{{mw|}}}|[[श्रेणी:असमिया व्यक्तिवाचक संज्ञाएँ {{{mw}} द्वारा वर्गीकृत}]]}}<!-- --><noinclude>{{documentation}}</noinclude> oh5shhxya1155d5lkkbowzgudffov3u 487678 487676 2026-09-02T02:24:17Z SM7 6218 व्यक्तिवाचक to नामवाचक 487678 wikitext text/x-wiki {{head|as|नामवाचक संज्ञाएँ|sort={{{sort|}}}|head={{{head|}}}|tr={{{tr|}}}<!-- -->|{{#if:{{{obj|}}}|कर्मकारक}}<!-- -->|{{{obj|}}}<!-- -->|f1tr={{{objtr|}}}<!-- -->|{{#if:{{{obj2|}}}|अथवा}}<!-- -->|{{{obj2|}}}<!-- -->|f2tr={{{obj2tr|}}}<!-- -->|{{#if:{{{gen|}}}|संबंधकारक}}<!-- -->|{{{gen|}}}<!-- -->|f3tr={{{gentr|}}}<!-- -->|{{#if:{{{loc|}}}|अधिकरणकारक}}<!-- -->|{{{loc|}}}<!-- -->|f4tr={{{loctr|}}}<!-- -->|{{#if:{{{loc2|}}}|or}}<!-- -->|{{{loc2|}}}<!-- -->|f5tr={{{loc2tr|}}}<!-- -->|{{#if:{{{mw|}}}|classifier}}<!-- -->|{{{mw|}}}<!-- -->|f6tr={{{mwtr|}}}<!-- -->}}<!-- -->{{#if:{{{mw|}}}|[[श्रेणी:असमिया व्यक्तिवाचक संज्ञाएँ {{{mw}} द्वारा वर्गीकृत}]]}}<!-- --><noinclude>{{documentation}}</noinclude> ikorhsv3ttma9gjev9845ynt2b2nxpl साँचा:as-prpn 10 306925 487677 2026-09-02T02:23:34Z SM7 6218 अंग्रेजी विक्षनरी से आयातित+स्थानीयकृत 487677 wikitext text/x-wiki {{head|as|नामवाचक संज्ञाएँ|sort={{{sort|}}}|head={{{head|}}}|tr={{{tr|}}}|{{#if:{{{cl|}}}|classifier|}}|{{{cl|}}}}}<!-- --><noinclude>{{documentation}}</noinclude> 3l2v6vqt9orqnuint4qx6xsuwnqcubo साँचा:catlink 10 306926 487689 2026-09-02T03:31:42Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487689 wikitext text/x-wiki [[:श्रेणी:{{{1|}}}|{{{2|{{#invoke:string/templates|replace|{{{1|}}}|_|&#32;}}}}}]]<noinclude> {{documentation}} </noinclude> ot5cq0miwbvkp345c1fdqcc77lu08oz मॉड्यूल:string/templates 828 306927 487692 2026-09-02T03:35:31Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487692 Scribunto text/plain local export = {} local parameters_module = "Module:parameters" local string_pattern_escape_module = "Module:string/patternEscape" local string_replacement_escape_module = "Module:string/replacementEscape" local string_utilities_module = "Module:string utilities" local abs = math.abs local find = string.find local format = string.format local floor = math.floor local lower = string.lower local match = string.match local rep = string.rep local require = require local tonumber = tonumber local type = type local unpack = unpack or table.unpack -- Lua 5.2 compatibility local dump = mw.dumpObject local function decode_uri(...) decode_uri = require(string_utilities_module).decode_uri return decode_uri(...) end local function pattern_escape(...) pattern_escape = require(string_pattern_escape_module) return pattern_escape(...) end local function process_params(...) process_params = require(parameters_module).process return process_params(...) end local function replacement_escape(...) replacement_escape = require(string_replacement_escape_module) return replacement_escape(...) end local function ufind(...) ufind = require(string_utilities_module).find return ufind(...) end local function ugmatch(...) ugmatch = require(string_utilities_module).gmatch return ugmatch(...) end local function ugsub(...) ugsub = require(string_utilities_module).gsub return ugsub(...) end local function ulen(...) ulen = require(string_utilities_module).len return ulen(...) end local function ulower(...) ulower = require(string_utilities_module).lower return ulower(...) end local function umatch(...) umatch = require(string_utilities_module).match return umatch(...) end local function usub(...) usub = require(string_utilities_module).sub return usub(...) end local function track(page) return require("Module:debug/track")("string/templates/" .. page) end --[[ Helper function that populates the argument list given that user may need to use a mix of named and unnamed parameters. This is relevant because named parameters are not identical to unnamed parameters due to string trimming, and when dealing with strings we sometimes want to either preserve or remove that whitespace depending on the application. ]] local function _getParameters(frame_args, arg_list) local new_args, i, value = {}, 1 for _, arg in ipairs(arg_list) do value = frame_args[arg] if value == nil then value = frame_args[i] i = i + 1 end new_args[arg] = value end return new_args end --[[ len This function returns the length of the target string. Usage: {{#invoke:string/templates|len|target_string|}} OR {{#invoke:string/templates|len|s=target_string}} Parameters s: The string whose length to report If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the target string. ]] function export.len(frame) return ulen(_getParameters(frame.args, {"s"}).s or "") end --[[ len_visible This function returns the length of the target string, excluding the text encompassed in < ... > Usage: exactly as len, above. ]] function export.len_visible(frame) return ulen(ugsub(_getParameters(frame.args, {"s"}).s or "", "<[^<>]+>", "")) end --[[ sub This function returns a substring of the target string at specified indices. Usage: {{#invoke:string/templates|sub|target_string|start_index|end_index}} OR {{#invoke:string/templates|sub|s=target_string|i=start_index|j=end_index}} Parameters s: The string to return a subset of i: The first index of the substring to return, defaults to 1. j: The last index of the string to return, defaults to the last character. The first character of the string is assigned an index of 1. If either i or j is a negative value, it is interpreted the same as selecting a character by counting from the end of the string. Hence, a value of -1 is the same as selecting the last character of the string. If the requested indices are out of range for the given string, an error is reported. ]] function export.sub(frame) local new_args = _getParameters(frame.args, {"s", "i", "j"}) local s = new_args["s"] or "" local i, j = new_args["i"], new_args["j"] if i then i = tonumber(i) end if j then j = tonumber(j) end return usub(s, i, j) end --[[ This function implements that features of {{str sub old}} and is kept in order to maintain these older templates. ]] function export.sublength(frame) local i = tonumber(frame.args.i) or 0 local len = tonumber(frame.args.len) return usub(frame.args.s, i + 1, len and (i + len)) end --[[ match This function returns a substring from the source string that matches a specified pattern. Usage: {{#invoke:string/templates|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}} OR {{#invoke:string/templates|pos|s=source_string|pattern=pattern_string|start=start_index |match=match_number|plain=plain_flag|nomatch=nomatch_output}} Parameters s: The string to search pattern: The pattern or string to find within the string start: The index within the source string to start the search. The first character of the string has index 1. Defaults to 1. match: In some cases it may be possible to make multiple matches on a single string. This specifies which match to return, where the first match is match= 1. If a negative number is specified then a match is returned counting from the last match. Hence match = -1 is the same as requesting the last match. Defaults to 1. plain: A flag indicating that the pattern should be understood as plain text. Defaults to false. nomatch: If no match is found, output the "nomatch" value rather than an error. If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from each string. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. If the match_number or start_index are out of range for the string being queried, then this function generates an error. An error is also generated if no match is found. If one adds the parameter ignore_errors=true, then the error will be suppressed and an empty string will be returned on any failure. For information on constructing Lua patterns, a form of [regular expression], see: * http://www.lua.org/manual/5.1/manual.html#5.4.1 * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns ]] function export.match(frame) local new_args = _getParameters(frame.args, { 's', 'pattern', 'start', 'match', 'plain', 'nomatch' }) local s = new_args['s'] or '' local start = tonumber(new_args['start']) or 1 local plain_flag = export._getBoolean(new_args['plain'] or false) local pattern = new_args['pattern'] or '' local match_index = floor(tonumber(new_args['match']) or 1) local nomatch = new_args['nomatch'] if pattern == "" then return export._error('Pattern string is empty') elseif match_index == 0 or abs(start) > ulen(s) then return nomatch or "" elseif plain_flag then pattern = pattern_escape(pattern) end local result if match_index == 1 then -- Find first match is simple case result = umatch(s, pattern, start) else if start > 1 then s = usub(s, start) end local iterator = ugmatch(s, pattern) if match_index > 0 then -- Forward search for w in iterator do match_index = match_index - 1 if match_index == 0 then result = w break end end else -- Reverse search local result_table, i = {}, 0 for w in iterator do i = i + 1 result_table[i] = w end result = result_table[i + match_index] end end return result or nomatch or "" end --[[ pos This function returns a single character from the target string at position pos. Usage: {{#invoke:string/templates|pos|target_string|index_value}} OR {{#invoke:string/templates|pos|target=target_string|pos=index_value}} Parameters target: The string to search pos: The index for the character to return If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the target string. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. The first character has an index value of 1. If one requests a negative value, this function will select a character by counting backwards from the end of the string. In other words pos = -1 is the same as asking for the last character. A requested value of zero, or a value greater than the length of the string returns an error. ]] function export.pos(frame) local new_args = _getParameters(frame.args, { 'target', 'pos' }) local target_str = new_args['target'] or '' local pos = tonumber(new_args['pos']) or 0 if pos == 0 or abs(pos) > ulen(target_str) then mw.log(("String index %s from original %s out of range: should be in range [1,%s]"):format( dump(pos), dump(new_args['pos']), dump(ulen(target_str)))) track("string-index-out-of-range") -- return export._error('String index out of range') end return usub(target_str, pos, pos) end --[[ str_find This function duplicates the behavior of {{str_find}}, including all of its quirks. This is provided in order to support existing templates, but is NOT RECOMMENDED for new code and templates. New code is recommended to use the "find" function instead. Returns the first index in "source" that is a match to "target". Indexing is 1-based, and the function returns -1 if the "target" string is not present in "source". Important Note: If the "target" string is empty / missing, this function returns a value of "1", which is generally unexpected behavior, and must be accounted for separately. ]] function export.str_find(frame) local new_args = _getParameters(frame.args, { 'source', 'target' }) local source_str = new_args['source'] or '' local target_str = new_args['target'] or '' if target_str == '' then return 1 end local start = ufind(source_str, target_str, 1, true) if start == nil then start = -1 end return start end --[==[ This function allows one to search for a target string or pattern within another string. Usage: `{{#invoke:string/templates|find|source_string|target_string|start_index|plain_flag|return_end_flag}}` OR `{{#invoke:string/templates|find|source=string|target=string|start=start_index|plain=boolean|return_end=boolean}}` Parameters: ; {{para|source}} or {{para|1}} : The string to search. ; {{para|target}} or {{para|2}} : The string or pattern to find within source. ; {{para|start}} or {{para|3}} : The index within the source string to start the search, defaults to 1. ; {{para|plain}} or {{para|4}} : Boolean flag indicating that target should be understood as plain text and not as a Lua style regular expression. Defaults to false. ; {{para|return_end}} or {{para|5}} : Boolean flag indicating that index in {{para|source}} of the last character of {{para|target}} that is found should be returned. By default, the index in {{para|source}} of the first character in {{para|target}} is returned. If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the parameter; otherwise, it will be preserved. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. This function normally returns the first index >= {{para|start}} where the beginning of {{para|target}} can be found within {{para|source}}. Indices are 1-based. If {{para|target}} is not found, then this function returns an empty string. If either {{para|source}} or {{para|target}} are missing / empty, this function also returns an empty string. If the parameter {{para|return_end}} or {{para|5}} is true, the index returned is that of the end of {{para|target}} rather than the beginning. For example, * `{{#invoke:string/templates|find|apples|[pl]+}}` = 2 * `{{#invoke:string/templates|find|apples|[pl]+|return_end=1}}` = 4 This function is safe for UTF-8 strings. ]==] function export.find(frame) local main_param = {required = true, allow_empty = true, no_trim = true} local args = process_params(frame.args, { [1] = main_param, source = {alias_of = 1}, [2] = main_param, target = {alias_of = 2}, [3] = {type = "number"}, start = {alias_of = 3}, [4] = {type = "boolean"}, plain = {alias_of = 4}, [5] = {type = "boolean"}, return_end = {alias_of = 5}, }) local start, end_ = ufind(args[1], args[2], args[3], args[4]) if args[5] then return end_ and tostring(end_) or "" else return start and tostring(start) or "" end end --[[ replace This function allows one to replace a target string or pattern within another string. Usage: {{#invoke:string/templates|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}} OR {{#invoke:string/templates|replace|source=source_string|pattern=pattern_string|replace=replace_string| count=replacement_count|plain=plain_flag}} Parameters source: The string to search pattern: The string or pattern to find within source replace: The replacement text count: The number of occurences to replace, defaults to all. plain: Boolean flag indicating that pattern should be understood as plain text and not as a Lua style regular expression, defaults to true ]] function export.replace(frame) local new_args = _getParameters(frame.args, { 'source', 'pattern', 'replace', 'count', 'plain' }) local source_str = new_args['source'] or '' local pattern = new_args['pattern'] or '' local replace = new_args['replace'] or '' local count = tonumber(new_args['count']) local plain = new_args['plain'] or true if source_str == '' or pattern == '' then return source_str end plain = export._getBoolean(plain) if plain then pattern = pattern_escape(pattern) replace = replacement_escape(replace) end return (ugsub(source_str, pattern, replace, count)) end function export.gsub(frame) local main_param = {required = true, allow_empty = true, no_trim = true} return (ugsub(unpack(process_params(frame.args, { [1] = main_param, [2] = main_param, [3] = main_param, [4] = {type = "number"}, })))) end --[[ simple function to pipe string.rep to templates. ]] function export.rep(frame) local repetitions = tonumber(frame.args[2]) if not repetitions then return export._error('function rep expects a number as second parameter, received "' .. (frame.args[2] or '') .. '"') end return rep(frame.args[1] or '', repetitions) end function export.lower(frame) return ulower(frame.args[1] or "") end export.lc = export.lower --[[ format This function allows one to format strings according to a template. This is a direct interface onto export.format() in Lua, and works like the C printf() function. For example: {{#invoke:string/templates|format|page_%04d.html|65}} will produce the result page_0065.html Parameters 1: The format template. See https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#string.format 2, 3, ...: Arguments to be inserted into the template. Note that leading and trailing whitespace is not removed from the arguments. ]] function export.format(frame) local fmt = frame.args[1] -- You can't call unpack() directly on frame.args because it isn't really a -- table, and doesn't support the # operator. local args = {} local i = 2 while true do local val = frame.args[i] if not val then break end table.insert(args, val) i = i + 1 end return format(fmt, unpack(args)) end --[[ Helper function to handle error messages. ]] function export._error(error_str) local frame = mw.getCurrentFrame() local ignore_errors = frame.args.ignore_errors or false if export._getBoolean(ignore_errors) then return '' end error(error_str) end --[[ Helper Function to interpret boolean strings ]] function export._getBoolean(boolean_str) local boolean_str_type = type(boolean_str) if boolean_str_type == 'boolean' then return boolean_str elseif boolean_str_type ~= "string" then error('No boolean value found') end boolean_str = lower(boolean_str) return not ( boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0' or boolean_str == '' ) end function export.matchToArray(text, pattern) local invoked = false if type(text) == "table" then invoked = true if text.args then local frame = text local params = { [1] = { required = true }, [2] = { required = true }, } local args = process_params(frame.args, params) text = args[1] pattern = args[2] else error("If the first argument to matchToArray is a table, it should be a frame object.") end else if not (type(pattern) == "string" or type(pattern) == "number") then error("The second argument to matchToArray should be a string or a number.") end end local matches = {} local i = 0 for match in ugmatch(text, pattern) do i = i + 1 matches[i] = match end if i > 0 then if invoked then return table.concat(matches, ", ") else return matches end else if invoked then return "" else return nil end end end --[=[ Similar to gmatch, but it returns the count of the match in addition to the list of captures, something like ipairs(). If the pattern doesn't contain any captures, the whole match is returned. Invoke thus: for i, whole_match in require("Module:string/templates").imatch(text, pattern) do [ do something with i and whole_match ] end or for i, capture1[, capture2[, capture3[, ...]]] in require("Module:string/templates").imatch(text, pattern) do [ do something with i and capture1 ] end For example, this code for i, whole_match in require("Module:string/templates").imatch("a b c", "[a-z]") do mw.log(i, whole_match) end will log 1 a 2 b 3 c ]=] function export.imatch(text, pattern, pos, plain, use_basic_Lua_function) local i = 0 pos = pos or 0 if not match(pattern, "%b()") then pattern = "(" .. pattern .. ")" end local _find = use_basic_Lua_function and find or ufind return function() i = i + 1 local return_values = { _find(text, pattern, pos, plain) } local j = return_values[2] if return_values[3] then pos = j + 1 -- Skip the first two returned values, which are the indices of the -- whole match. return i, unpack(return_values, 3) end end end function export.URIdecode(frame) return decode_uri(frame.args[1], frame.args[2] or "PATH") end return export mqrq52i3ojzqn4cv9h5a1meyiuu6ms8 অন্ধকূপ 0 306928 487695 2026-09-02T03:45:38Z अजीत कुमार तिवारी 4887 +असमिया से शब्द. 487695 wikitext text/x-wiki == असमिया == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== सूखा कुँआ जिसका मुँह घास-पात से ढका हो, अंधेरा कुँआ। (पुल्लिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ===असमिया=== ===संज्ञा=== {{as-noun}} # [[अंधकूप]] tld82krmbyweypdfzdkq4csayi13qsr 487696 487695 2026-09-02T03:46:44Z अजीत कुमार तिवारी 4887 /* असमिया */ सुधार. 487696 wikitext text/x-wiki == असमिया == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== सूखा कुँआ जिसका मुँह घास-पात से ढका हो, अंधेरा कुँआ। (पुल्लिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===संज्ञा=== {{as-noun}} # [[अंधकूप]] rf9j1jowbhg9dxuzb6o5vlqvs6cm9ah 487706 487696 2026-09-02T04:56:08Z अजीत कुमार तिवारी 4887 प्रारूप सुधार. 487706 wikitext text/x-wiki ==असमिया== ===संज्ञा=== {{as-noun}} # [[अंधकूप]] === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== सूखा कुँआ जिसका मुँह घास-पात से ढका हो, अंधेरा कुँआ। (पुल्लिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] 4n1lj62e76rjqob75sszg9kq09z0hgi অকৰণীয 0 306929 487697 2026-09-02T03:49:15Z अजीत कुमार तिवारी 4887 +असमिया से शब्द. 487697 wikitext text/x-wiki == असमिया == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== न करने योग्य। (पुल्लिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===विशेषण=== {{as-adj}} # [[अकरणीय]] mulkwu0bx4n8bnorm4t11ha1iv1dmpz 487704 487697 2026-09-02T04:53:55Z अजीत कुमार तिवारी 4887 प्रारूप सुधार. 487704 wikitext text/x-wiki ==असमिया== ===विशेषण=== {{as-adj}} # [[अकरणीय]] === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== न करने योग्य। (पुल्लिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] 9co8r1iyhk16xwk1ierfhu06io535f2 অকৰ্ম্ম 0 306930 487698 2026-09-02T03:53:46Z अजीत कुमार तिवारी 4887 +असमिया से शब्द. 487698 wikitext text/x-wiki == असमिया == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== # बुरा काम; # कर्म का अभाव, निष्क्रियता। (पुल्लिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===विशेषण=== {{as-noun}} # [[अकर्म]] cy9nl1jme47vybcu3v41ms1x44dhi06 487699 487698 2026-09-02T03:54:13Z अजीत कुमार तिवारी 4887 /* संज्ञा */ सुधार. 487699 wikitext text/x-wiki == असमिया == === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== # बुरा काम; # कर्म का अभाव, निष्क्रियता। (पुल्लिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ==असमिया== ===संज्ञा=== {{as-noun}} # [[अकर्म]] h2wbx1tn07g3z4huzkpgluoqbu2j5ad 487703 487699 2026-09-02T04:53:08Z अजीत कुमार तिवारी 4887 प्रारूप सुधार. 487703 wikitext text/x-wiki ==असमिया== ===संज्ञा=== {{as-noun}} # [[अकर्म]] === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== # बुरा काम; # कर्म का अभाव, निष्क्रियता। (पुल्लिंग) [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] ftv7kuufayshs68o4kv6jt9l7h342ne मॉड्यूल:table/deepCopy 828 306931 487714 2026-09-02T08:26:01Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487714 Scribunto text/plain local debug_track_module = "Module:debug/track" local dump = mw.dumpObject local error = error local getmetatable = getmetatable local next = next local pairs = pairs local rawget = rawget local type = type local setmetatable = setmetatable local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local tracked local function make_copy(orig, seen, mt_flag, keep_loaded_data) local mt, iter, state, init = getmetatable(orig) -- If `mt` is nil, just use `next`, as it's faster. if mt == nil then iter, state, init = next, orig, nil -- `mt` could be a non-table if `__metatable` has been used, but discard it in such cases. elseif type(mt) ~= "table" then mt, iter, state, init = nil, pairs(orig) -- Data loaded via `mw.loadData`, which sets the key "mw_loadData" to true in the metatable. elseif rawget(mt, "mw_loadData") == true then if keep_loaded_data then seen[orig] = orig return orig -- Track instances of such data being copied, which is very inefficient and usually unnecessary. elseif not tracked then debug_track("table/deepCopy/loaded data") tracked = true end -- Discard the metatable and use the `__pairs` metamethod. mt, iter, state, init = nil, pairs(orig) -- If `mt_flag` is "none", discard the metatable and use the `__pairs` metamethod. elseif mt_flag == "none" then mt, iter, state, init = nil, pairs(orig) -- Otherwise, keep `mt` and use `next` to copy the raw contents. else iter, state, init = next, orig, nil end local copy = {} seen[orig] = copy for k, v in iter, state, init do if k and type(k) == "table" then k = seen[k] or make_copy(k, seen, mt_flag, keep_loaded_data) end if v and type(v) == "table" then v = seen[v] or make_copy(v, seen, mt_flag, keep_loaded_data) end copy[k] = v end if mt == nil or mt_flag == "none" then return copy -- Copy the metatable if `mt_flag` is "copy"; otherwise, it will be "keep", so keep it. elseif mt_flag == "copy" then mt = seen[mt] or make_copy(mt, seen, mt_flag, keep_loaded_data) end return setmetatable(copy, mt) end --[==[ Recursive deep copy function. Preserves copied identities of subtables. A more powerful version of {mw.clone}, with customizable options. * `metatableFlag` can be one of three options: *# "none" (the default): `pairs` will be used to copy the table, meaning that any `__pairs` metamethod will be used to copy the table, if available; the resulting table will not have a metatable. *# "copy": a raw copy of the table will be made (i.e. any `__pairs` metamethod will be ignored), and the copy will be given a copy of the original table's metatable; this ensures that nothing from the original is retained, but may cause metamethods to behave unexpectedly, depending on their implementation. *# "keep": a raw copy of the table will be made (i.e. any `__pairs` metamethod will be ignored), and the copy will be given the original table's metatable; this is useful when copying objects that inherit methods from a prototype object (e.g. language objects). * If `keepLoadedData` is true, then any data loaded via {mw.loadData} will not be copied, and the original will be used instead. This is useful in iterative contexts where it is necessary to copy data being destructively modified, because objects loaded via mw.loadData are immutable. * Notes: *# Protected metatables will not be copied (i.e. those hidden behind a `__metatable` metamethod), as they are not accessible by Lua's design. Instead, the output of the `__metatable` method will be used instead. *# Data loaded via {mw.loadData} is always treated as though the "none" flag is set, because the way it has been implemented causes errors to be thrown if "copy" or "keep" are used with it.]==] return function(orig, metatableFlag, keepLoadedData) if metatableFlag == nil then metatableFlag = "none" elseif not (metatableFlag == "keep" or metatableFlag == "copy" or metatableFlag == "none") then error('metatableFlag must be "none", "copy", "keep" or nil; received ' .. dump(metatableFlag)) end if orig and type(orig) == "table" then return make_copy(orig, {}, metatableFlag, keepLoadedData) end return orig end n283xd4cxzrnpyf4zrlt9334gjwqw59 साँचा:Babel/style.css 10 306932 487715 2026-09-02T10:16:46Z SM7 6218 ".babel-box { float: left; box-sizing: border-box; border-style: solid; border-width: 1px; margin: 1px; } .babel-box-wrapper .babel-box { width: calc(100% - 2px); /* subtract horizontal margin */ } .babel-box table { border-spacing: 0; /* replacement for cellspacing="0" */ } .babel-box .babel-content { width: 100%; min-width: 238px; height: 100%; margin: 0; } .babel-box .babel-code { width: 45px; height: 45px; tex..." के साथ नया पृष्ठ बनाया 487715 sanitized-css text/css .babel-box { float: left; box-sizing: border-box; border-style: solid; border-width: 1px; margin: 1px; } .babel-box-wrapper .babel-box { width: calc(100% - 2px); /* subtract horizontal margin */ } .babel-box table { border-spacing: 0; /* replacement for cellspacing="0" */ } .babel-box .babel-content { width: 100%; min-width: 238px; height: 100%; margin: 0; } .babel-box .babel-code { width: 45px; height: 45px; text-align: center; } .babel-box .babel-text { font-size: 8pt; padding: 4pt; line-height: 1.25em; } /* might consider palettizing at some point, but that will also change the appearance quite a bit. -- Surjection 2025-09-27 */ .babel-box.babel-0 { border-color: #FFB3B3; } .babel-box.babel-0 .babel-content { background-color: #FFE0E8; } .babel-box.babel-0 .babel-code { background-color: #FFB3B3; } .babel-box.babel-1 { border-color: #C0C8FF; } .babel-box.babel-1 .babel-content { background-color: #F0F8FF; } .babel-box.babel-1 .babel-code { background-color: #C0C8FF; } .babel-box.babel-2 { border-color: #77E0E8; } .babel-box.babel-2 .babel-content { background-color: #D0F8FF; } .babel-box.babel-2 .babel-code { background-color: #77E0E8; } .babel-box.babel-3 { border-color: #99B3FF; } .babel-box.babel-3 .babel-content { background-color: #E0E8FF; } .babel-box.babel-3 .babel-code { background-color: #99B3FF; } .babel-box.babel-4 { border-color: #FFFF00; } .babel-box.babel-4 .babel-content { background-color: #FFFF99; } .babel-box.babel-4 .babel-code { background-color: #FFFF00; } .babel-box.babel-5 { border-color: #D6A6F0; } .babel-box.babel-5 .babel-content { background-color: #F3E4FA; } .babel-box.babel-5 .babel-code { background-color: #D6A6F0; } .babel-box.babel-N { border-color: #6EF7A7; } .babel-box.babel-N .babel-content { background-color: #C5FCDC; } .babel-box.babel-N .babel-code { background-color: #6EF7A7; } /* dark mode colors; styles need to be duplicated exactly between these two media blocks */ @media screen { html.skin-theme-clientpref-night .babel-box .babel-code a { color: #3366EE; } html.skin-theme-clientpref-night .babel-box.babel-0 { border-color: #FFB3B3; } html.skin-theme-clientpref-night .babel-box.babel-0 .babel-content { background-color: #45212B; } html.skin-theme-clientpref-night .babel-box.babel-0 .babel-code { color: #000000; } html.skin-theme-clientpref-night .babel-box.babel-1 { border-color: #505BA6; } html.skin-theme-clientpref-night .babel-box.babel-1 .babel-content { background-color: #1F2C38; } html.skin-theme-clientpref-night .babel-box.babel-1 .babel-code { color: #000000; } html.skin-theme-clientpref-night .babel-box.babel-2 { border-color: #489DA3; } html.skin-theme-clientpref-night .babel-box.babel-2 .babel-content { background-color: #193439; } html.skin-theme-clientpref-night .babel-box.babel-2 .babel-code { color: #000000; } html.skin-theme-clientpref-night .babel-box.babel-3 { border-color: #405BA8; } html.skin-theme-clientpref-night .babel-box.babel-3 .babel-content { background-color: #131D3A; } html.skin-theme-clientpref-night .babel-box.babel-3 .babel-code { color: #000000; } html.skin-theme-clientpref-night .babel-box.babel-4 { border-color: #666600; } html.skin-theme-clientpref-night .babel-box.babel-4 .babel-content { background-color: #222200; } html.skin-theme-clientpref-night .babel-box.babel-4 .babel-code { color: #000000; } html.skin-theme-clientpref-night .babel-box.babel-5 { border-color: #D6A6F0; } html.skin-theme-clientpref-night .babel-box.babel-5 .babel-content { background-color: #20062D; } html.skin-theme-clientpref-night .babel-box.babel-5 .babel-code { color: #000000; } html.skin-theme-clientpref-night .babel-box.babel-N { border-color: #33A161; } html.skin-theme-clientpref-night .babel-box.babel-N .babel-content { background-color: #153222; } html.skin-theme-clientpref-night .babel-box.babel-N .babel-code { color: #000000; } } @media screen and (prefers-color-scheme: dark) { html.skin-theme-clientpref-os .babel-box .babel-code a { color: #3366EE; } html.skin-theme-clientpref-os .babel-box.babel-0 { border-color: #FFB3B3; } html.skin-theme-clientpref-os .babel-box.babel-0 .babel-content { background-color: #45212B; } html.skin-theme-clientpref-os .babel-box.babel-0 .babel-code { color: #000000; } html.skin-theme-clientpref-os .babel-box.babel-1 { border-color: #505BA6; } html.skin-theme-clientpref-os .babel-box.babel-1 .babel-content { background-color: #1F2C38; } html.skin-theme-clientpref-os .babel-box.babel-1 .babel-code { color: #000000; } html.skin-theme-clientpref-os .babel-box.babel-2 { border-color: #489DA3; } html.skin-theme-clientpref-os .babel-box.babel-2 .babel-content { background-color: #193439; } html.skin-theme-clientpref-os .babel-box.babel-2 .babel-code { color: #000000; } html.skin-theme-clientpref-os .babel-box.babel-3 { border-color: #405BA8; } html.skin-theme-clientpref-os .babel-box.babel-3 .babel-content { background-color: #131D3A; } html.skin-theme-clientpref-os .babel-box.babel-3 .babel-code { color: #000000; } html.skin-theme-clientpref-os .babel-box.babel-4 { border-color: #666600; } html.skin-theme-clientpref-os .babel-box.babel-4 .babel-content { background-color: #222200; } html.skin-theme-clientpref-os .babel-box.babel-4 .babel-code { color: #000000; } html.skin-theme-clientpref-os .babel-box.babel-5 { border-color: #D6A6F0; } html.skin-theme-clientpref-os .babel-box.babel-5 .babel-content { background-color: #20062D; } html.skin-theme-clientpref-os .babel-box.babel-5 .babel-code { color: #000000; } html.skin-theme-clientpref-os .babel-box.babel-N { border-color: #33A161; } html.skin-theme-clientpref-os .babel-box.babel-N .babel-content { background-color: #153222; } html.skin-theme-clientpref-os .babel-box.babel-N .babel-code { color: #000000; } } h1bc5jldofsse17967e6run3kowvkos मॉड्यूल:JSON 828 306933 487717 2026-09-02T10:19:00Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487717 Scribunto text/plain local export = {} local m_math = require("Module:math") local m_str_utils = require("Module:string utilities") local m_table = require("Module:table") local codepoint = m_str_utils.codepoint local concat = table.concat local converter -- forward declaration local find = string.find local format = string.format local gsub = string.gsub local insert = table.insert local ipairs = ipairs local is_array = m_table.isArray local is_finite_real_number = m_math.is_finite_real_number local is_integer = m_math.is_integer local is_utf8 = mw.ustring.isutf8 local match = string.match local toNFC = mw.ustring.toNFC local tonumber = tonumber local pairs = pairs local sorted_pairs = m_table.sortedPairs local trycall = require("Module:fun/trycall") local type = type local function json_fromBoolean(b) return b and "true" or "false" end -- Given a finite real number x, returns a string containing its JSON -- representation, with enough precision that it should round-trip correctly -- (depending on the well-behavedness of the system on the other end). local function json_fromNumber(x, level) if not is_finite_real_number(x) then error(format("Cannot encode non-finite real number %g", x), level) end -- Give integers within the range RFC 7159 considers interoperable. if is_integer(x) and x < 0x1p53 and x > -0x1p53 then return format("%d", x) end -- Otherwise, give a (double) float with the %g specifier, which handles any -- leading/trailing 0s etc. Double floats have precision ranging from 15 to -- 17 digits, meaning rounding artefacts can appear when precision is set to -- 16 or 17 (e.g. 1.1 is converted to 1.1000000000000001). Avoid this by -- trying each in turn, returning the first one which converts back into the -- original number, which avoids implying that it has higher precision than -- it really does. for prec = 15, 17 do local poss = format(format("%%.%dg", prec), x) if prec == 17 or tonumber(poss) == x then x = poss break end end -- If there's an exponent, remove any + sign and leading 0s from it. if find(x, "e", nil, true) then return (gsub(x, "(e%-?)%+?0*", "%1")) end -- If it resembles an integer, convert it to scientific notation to avoid -- the other end interpreting it as one. local d, f = match(x, "^(%d)(%d-)0*$") return d and format("%s%s%se%d", d, f == "" and "" or ".", f, #x - 1) or x end local function escape_codepoint(cp) if cp < 0x10000 then return format("\\u%04X", cp) end cp = cp - 0x10000 return format("\\u%04X\\u%04X", 0xD800 + (cp / 1024), 0xDC00 + (cp % 1024)) end local escapes local function get_escapes() escapes, get_escapes = { [0x8] = [[\b]], [0x9] = [[\t]], [0xA] = [[\n]], [0xC] = [[\f]], [0xD] = [[\r]], [0x22] = [[\"]], [0x2F] = [[\/]], [0x5C] = [[\\]], }, nil local function _add(cp) if escapes[cp] == nil then escapes[cp] = escape_codepoint(cp) end end local function add(cp1, cp2) if cp2 == nil then return _add(cp1) end for cp = cp1, cp2 do _add(cp) end end add(0x0000, 0x001F) add(0x007F, 0x00A0) add(0x00AD) add(0x034F) add(0x0600, 0x0605) add(0x061C) add(0x06DD) add(0x070F) add(0x0890, 0x0891) add(0x08E2) add(0x115F, 0x1160) add(0x1680) add(0x17B4, 0x17B5) add(0x180B, 0x180F) add(0x2000, 0x200F) add(0x2028, 0x202F) add(0x205F, 0x206F) add(0x3000) add(0x3164) add(0xFDD0, 0xFDEF) add(0xFE00, 0xFE0F) add(0xFEFF) add(0xFFA0) add(0xFFF0, 0xFFFF) add(0x110BD) add(0x110CD) add(0x1107F) add(0x13430, 0x1343F) add(0x16FE4) add(0x1BC9D) add(0x1BCA0, 0x1BCA3) add(0x1D173, 0x1D17A) for i = 0x2, 0x11 do i = i * 0x10000 add(i - 2, i - 1) end return escapes end local function escape_char(ch) local cp = codepoint(ch) return (escapes or get_escapes())[cp] or escape_codepoint(cp) end local function maybe_escape_char(ch) local cp = codepoint(ch) if cp >= 0xE0000 and cp <= 0xE0FFF then return escape_char(ch) end return (escapes or get_escapes())[cp] or ch end -- Given a string, escapes any illegal characters and wraps it in double-quotes. -- Raises an error if the string is not valid UTF-8. local function json_fromString(s, ascii, level) if not is_utf8(s) then error(format("Cannot encode non-UTF-8 string '%s'", s), level) end local pattern = '[%c"/\\\128-\255][\128-\191]*' if not ascii then local escaped = gsub(s, pattern, maybe_escape_char) if escaped == toNFC(escaped) then return '"' .. escaped .. '"' end end return '"' .. gsub(s, pattern, escape_char) .. '"' end local function json_fromTable(t, opts, current, level) local ret, open, close = {} if is_array(t) then for key, value in ipairs(t) do ret[key] = converter(value, opts, current, level + 1) or "null" end open, close = "[", "]" else -- `seen_keys` memoizes keys already seen, to prevent collisions (e.g. 1 -- and "1"). local seen_keys, colon, ascii = {}, opts.compress and ":" or " : ", opts.ascii for key, value in (opts.sort_keys and sorted_pairs or pairs)(t) do local key_type = type(key) if key_type == "boolean" then key = json_fromBoolean(key) elseif key_type == "number" then key = json_fromNumber(key, level + 1) elseif key_type ~= "string" then error(format("Cannot use type '%s' as a table key", key_type), level) end key = json_fromString(key, ascii, level + 1) if seen_keys[key] then error(format("Collision for JSON key %s", key), level) end seen_keys[key] = true insert(ret, key .. colon .. (converter(value, opts, current, level + 1) or "null")) end open, close = "{", "}" end ret = open .. ( opts.compress and concat(ret, ",") .. close or " " .. concat(ret, ", ") .. ( #ret == 0 and "" or " " ) .. close ) current[t] = nil return ret end function converter(this, opts, current, level) -- local declared above local val_type = type(this) if val_type == "nil" then return "null" elseif val_type == "boolean" then return json_fromBoolean(this) elseif val_type == "number" then return json_fromNumber(this, level + 1) elseif val_type == "string" then return json_fromString(this, opts.ascii, level + 1) elseif val_type ~= "table" then error(format("Cannot encode type '%s'", val_type), level) elseif current[this] then error("Cannot use recursive tables", level) end -- Memoize the table to enable recursion checking. current[this] = true if opts.ignore_toJSON then return json_fromTable(this, opts, current, level + 1) end -- Check if a toJSON method can be used. Use the lua_table flag to get a Lua -- table, as any options need to be applied to the output. local to_json = this.toJSON if to_json == nil then return json_fromTable(this, opts, current, level + 1) end -- Try to call it. local success, new = trycall(to_json, this, {lua_table = true}) if success then -- If successful, use the returned value. local ret = converter(new, opts, current, level + 1) current[this] = nil return ret end -- Otherwise, treat as a conventional value. return json_fromTable(this, opts, current, level + 1) end -- This function makes an effort to convert an arbitrary Lua value to a string -- containing a JSON representation of it. function export.toJSON(this, opts) return converter(this, opts == nil and {} or opts, {}, 3) end return export 2ak4p5c82rula80h5a4l22jokudmyrq मॉड्यूल:category tree/affixes and compounds 828 306934 487719 2026-09-02T10:29:12Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487719 Scribunto text/plain local labels = {} local raw_categories = {} local handlers = {} ----------------------------------------------------------------------------- -- -- -- LABELS -- -- -- ----------------------------------------------------------------------------- labels["alliterative compounds"] = { description = "{{{langname}}} noun phrases composed of two or more stems that alliterate.", parents = {"compound terms", "alliterative phrases"}, } labels["antonymous compounds"] = { description = "{{{langname}}} compounds in which one part is an antonym of the other.", parents = {"dvandva compounds", sort = "antonym"}, } labels["bahuvrihi compounds"] = { description = "{{{langname}}} compounds in which the first part (A) modifies the second (B), and whose meaning follows a [[metonymic]] pattern: “<person> having a B that is A.”", parents = {"compound terms", "exocentric compounds"}, } -- Add "compound POS" categories for various parts of speech. local compound_poses = { "विशेषण", "क्रियाविशेषण", "conjunctions", "determiners", "interjections", "संज्ञाएँ", "अंक", "particles", "postpositions", "उपसर्ग", "prepositions", "सर्वनाम", "नामवाचक संज्ञाएँ", "suffixes", "क्रियाएँ", } for _, pos in ipairs(compound_poses) do labels["कंपाउंड " .. pos] = { description = "{{{langname}}} " .. pos .. " composed of two or more stems.", parents = {{name = "कंपाउंड टर्म", sort = " "}, pos}, } end labels["compound determinatives"] = { description = "{{{langname}}} determinatives composed of two or more stems.", parents = {"compound terms", "determiners"}, } labels["कंपाउंड टर्म"] = { description = "{{{langname}}} terms composed of two or more stems.", umbrella_parents = "Terms by etymology subcategories by language", parents = {"व्युत्पत्ति अनुसार टर्म"}, } labels["dvandva compounds"] = { description = "{{{langname}}} terms composed of two or more stems whose stems could be connected by an 'and'.", parents = {"compound terms"}, } labels["dvigu compounds"] = { description = "{{{langname}}} [[tatpuruṣa]] compounds where the modifying member is a number", parents = {"tatpurusa compounds"}, } labels["endocentric compounds"] = { description = "{{{langname}}} terms composed of two or more stems, one of which is the [[w:head (linguistics)|head]] of that compound.", parents = {"compound terms"}, } labels["endocentric noun-noun compounds"] = { description = "{{{langname}}} terms composed of two or more stems, one of which is the [[w:head (linguistics)|head]] of that compound.", breadcrumb = "noun-noun", parents = {"endocentric compounds", "compound terms"}, } labels["endocentric verb-noun compounds"] = { description = "{{{langname}}} compounds in which the first element is a verbal stem, the second a nominal stem and the head of the compound.", breadcrumb = "verb-noun", parents = {"endocentric compounds", "verb-noun compounds"}, } labels["exocentric compounds"] = { description = "{{{langname}}} terms composed of two or more stems, none of which is the [[w:head (linguistics)|head]] of that compound.", parents = {"compound terms"}, } labels["exocentric verb-noun compounds"] = { description = "{{{langname}}} compounds in which the first element is a transitive verb, the second a noun functioning as its direct object, and whose referent is the person or thing doing the action.", breadcrumb = "verb-noun", parents = {"exocentric compounds", "verb-noun compounds"}, } labels["karmadharaya compounds"] = { description = "{{{langname}}} terms composed of two or more stems in which the main stem determines the case endings.", parents = {"tatpurusa compounds"}, } labels["itaretara dvandva compounds"] = { description = "{{{langname}}} terms composed of two or more stems whose stems could be connected by an 'and'.", breadcrumb = "itaretara", parents = {"dvandva compounds"}, } labels["rhyming compounds"] = { description = "{{{langname}}} compounds composed of two or more components that rhyme.", parents = {"compound terms", "rhyming phrases"}, } labels["samahara dvandva compounds"] = { description = "{{{langname}}} terms composed of two or more stems whose stems could be connected by an 'and'.", breadcrumb = "samahara", parents = {"dvandva compounds"}, } labels["shitgibbons"] = { description = "{{{langname}}} terms that consist of a single-syllable [[expletive]] followed by a two-syllable [[trochee]] that serves as a [[nominalizer]] or [[intensifier]].", parents = {"endocentric compounds"}, } labels["synonymous compounds"] = { description = "{{{langname}}} compounds in which one part is a synonym of the other.", parents = {"dvandva compounds", sort = "synonym"}, } labels["tatpurusa compounds"] = { description = "{{{langname}}} terms composed of two or more stems", parents = {"compound terms"}, } labels["verb-noun compounds"] = { description = "{{{langname}}} compounds in which the first element is a transitive verb, the second a noun functioning as its direct object, and whose referent is the person or thing doing the action, or an adjective describing such a person or thing.", parents = {"verb-object compounds"}, } labels["verb-object compounds"] = { description = "{{{langname}}} compounds in which the first element is a transitive verb, the second a term (usually but not always a noun) functioning as its (normally direct) object, and whose referent is the person or thing doing the action, or an adjective describing such a person or thing.", additional = "Examples in English are {{m|en|pickpocket|lit=someone who picks pockets}} and {{m|en|catch-all|lit=something that catches everything}}.", parents = {"compound terms"}, } labels["verb-verb compounds"] = { description = "{{{langname}}} compounds composed of two or more verbs in apposition, often either synonyms or antonyms, and whose referent refers to the result of performing those actions.", parents = {"compound terms"}, } labels["vṛddhi derivatives"] = { description = "{{{langname}}} terms derived from a Proto-Indo-European root by the process of [[w:vṛddhi|vṛddhi]] derivation.", parents = {{name = "terms by etymology", sort = "vrddhi derivatives"}}, } labels["vṛddhi gerundives"] = { description = "{{{langname}}} [[gerundive]]s derived from a Proto-Indo-European root by the process of [[w:vṛddhi|vṛddhi]] derivation.", parents = {{name = "vṛddhi derivatives", sort = "vrddhi gerundives"}}, } labels["vyadhikarana compounds"] = { description = "{{{langname}}} terms composed of two or more stems in which the non-main stem determines the case endings.", parents = {"tatpurusa compounds"}, } for _, fixtype in ipairs({"circumfix", "infix", "interfix", "prefix", "suffix",}) do labels["टर्म " .. fixtype .." अनुसार"] = { description = "{{{langname}}} terms categorized by their " .. fixtype .. "es.", umbrella_parents = "Terms by etymology subcategories by language", parents = {{name = "टर्म व्युत्पत्ति अनुसार", sort = fixtype}, fixtype .. "es"}, } end -- Add 'umbrella_parents' key if not already present. for key, data in pairs(labels) do -- NOTE: umbrella.parents overrides umbrella_parents if both are given. if not data.umbrella_parents then data.umbrella_parents = "Types of compound terms by language" end end ----------------------------------------------------------------------------- -- -- -- RAW CATEGORIES -- -- -- ----------------------------------------------------------------------------- raw_categories["कंपाउंड टर्म के प्रकार भाषा अनुसार"] = { description = "Umbrella categories covering topics related to types of compound terms.", additional = "{{{umbrella_meta_msg}}}", parents = { "Umbrella metacategories", {name = "कंपाउंड टर्म", is_label = true, sort = " "}, {name = "व्युत्पत्ति उपश्रेणियों के अनुसार टर्म भाषा अनुसार", sort = " "}, }, } ----------------------------------------------------------------------------- -- -- -- HANDLERS -- -- -- ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- ------------------------------ Affix handlers ------------------------------- ----------------------------------------------------------------------------- table.insert(handlers, function(data) local labelpref, pos, affixtype, term_and_id = data.label:match("^(([a-z -]+) ([a-z]+fix)ed with )(.+)$") if affixtype then local term, id = term_and_id:match("^(.+) %(([^()]+)%)$") term = term or term_and_id -- Convert term/alt into affixes if needed local desc = { ["prefix"] = "beginning with the prefix", ["suffix"] = "ending with the suffix", ["circumfix"] = "bookended with the circumfix", ["infix"] = "spliced with the infix", ["interfix"] = "joined with the interfix", -- Transfixes not supported currently. -- ["transfix"] = "patterned with the transfix", } if not desc[affixtype] then return nil end -- Here, {LANG} is replaced with the actual language, {TERM_AND_ID} with the actual term (or with 'TERM<id:ID>' -- if there is an ID), {BASE} with '<var>base</var>', {BASE2} with '<var>base2</var>', {BASE_EXPL} with an -- explanation of what "base" means, {BASE_BASE2_EXPL} with an explanation of what "base" and "base2" mean, and -- {POS} with '|pos=POS' if there is a `pos` other than "terms", otherwise a blank string. local what_categorizes = { ["prefix"] = "{{tl|af|{LANG}|{TERM_AND_ID}|{BASE}{POS}}} or {{tl|affix|{LANG}|{TERM_AND_ID}|{BASE}{POS}}} (or the more specific and less-preferred equivalents {{tl|pre}} or {{tl|prefix}}), where {BASE_EXPL}", ["suffix"] = "{{tl|af|{LANG}|{BASE}|{TERM_AND_ID}{POS}}} or {{tl|affix|{LANG}|{BASE}|{TERM_AND_ID}{POS}}} (or the more specific and less-preferred equivalents {{tl|suf}} or {{tl|suffix}}), where {BASE_EXPL}", ["circumfix"] = "{{tl|af|{LANG}|{BASE}|{TERM_AND_ID}{POS}}} or {{tl|affix|{LANG}|{BASE}|{TERM_AND_ID}{POS}}}, where {BASE_EXPL}", ["infix"] = "{{tl|infix|{LANG}|{BASE}|{TERM_AND_ID}{POS}}}, where {BASE_EXPL}", ["interfix"] = "{{tl|af|{LANG}|{BASE}|{TERM_AND_ID}{POS}|{BASE2}}} or {{tl|affix|{LANG}|{BASE}|{TERM_AND_ID}|{BASE2}{POS}}}, where {BASE_BASE2_EXPL}", } local args = require("Module:parameters").process(data.args, { ["alt"] = true, ["sc"] = true, ["sort"] = true, ["tr"] = true, ["ts"] = true, }) local sc = data.sc or args.sc and require("Module:scripts").getByCode(args.sc, "sc") or nil local m_affix = require("Module:affix") -- Call make_affix to add display hyphens if they're not already present. local _, display_term, lookup_term = m_affix.make_affix(term, data.lang, sc, affixtype, nil, true) local _, display_alt = m_affix.make_affix(args.alt, data.lang, sc, affixtype) local _, display_tr = m_affix.make_affix(args.tr, data.lang, require("Module:scripts").getByCode("Latn"), affixtype) local _, display_ts = m_affix.make_affix(args.ts, data.lang, require("Module:scripts").getByCode("Latn"), affixtype) local m_script_utilities = require("Module:script utilities") local id_text = id and " (" .. id .. ")" or "" -- Compute parents. local parents = {} if id then if pos == "words" then -- don't allow formerly-named categories with "words" return nil end if pos == "टर्म" then table.insert(parents, {name = labelpref .. term, sort = id, args = args}) else table.insert(parents, {name = "टर्म " .. affixtype .. "ed with " .. term_and_id, sort = id .. ", " .. pos, args = args}) table.insert(parents, {name = labelpref .. term, sort = id, args = args}) end elseif pos == "words" then -- don't allow formerly-named categories with "words" return nil elseif pos ~= "टर्म" then table.insert(parents, {name = "टर्म " .. affixtype .. "ed with " .. term, sort = pos, args = args}) end table.insert(parents, {name = "टर्म " .. affixtype, sort = (data.lang:makeSortKey(data.lang:stripDiacritics(args.sort or term))) .." अनुसार"}) -- If other affixes are mapped to this one, show them. local additional if data.lang then local langcode = data.lang:getCode() if m_affix.langs_with_lang_specific_data[langcode] then local langdata = mw.loadData(m_affix.affix_lang_data_module_prefix .. langcode) local variants = {} if langdata.affix_mappings then for variant, canonical in pairs(langdata.affix_mappings) do -- Above, we converted the stripped link term as we received it to the lookup form, so we -- can look up the variants that are mapped to this term. Once we find them, map them to -- display form. local is_variant = false if type(canonical) == "table" then for _, canonical_v in pairs(canonical) do if canonical_v == lookup_term then is_variant = true break end end else is_variant = canonical == lookup_term end if is_variant then local _, display_variant = m_affix.make_affix(variant, data.lang, sc, affixtype) table.insert(variants, "{{m|" .. langcode .. "|" .. display_variant .. "}}") end end if #variants > 0 then table.sort(variants) additional = ("This category also includes terms %sed with %s."):format(affixtype, require("Module:table").serialCommaJoin(variants)) end end end end if data.lang then local m_str_utils = require("Module:string utilities") local what_categorizes_msg = what_categorizes[affixtype] if not what_categorizes_msg then error(("Internal error: No what_categorizes value for affixtype '%s' for label '%s', lang '%s'"): format(affixtype, data.label, data.lang:getCode())) end what_categorizes_msg = "Terms are placed in this category using " .. (what_categorizes_msg :gsub("{LANG}", data.lang:getCode()) :gsub("{TERM_AND_ID}", m_str_utils.replacement_escape( id and ("%s<id:%s>"):format(term, id) or term)) :gsub("{POS}", m_str_utils.replacement_escape( pos == "terms" and "" or ("|pos=%s"):format(pos))) :gsub("{BASE}", "<var>base</var>") :gsub("{BASE2}", "<var>base2</var>") :gsub("{BASE_EXPL}", "<code><var>base</var></code> is the base lemma from which this term is derived") :gsub("{BASE_BASE2_EXPL}", "<code><var>base</var></code> and <code><var>base2</var></code> are the " .. "base lemmas from which this term is derived") ) .. "." if data.lang:getCode() == "ja" then what_categorizes_msg = require("Module:category tree/fam/jpx/what-categorizes-msg") .get_what_categorizes_msg(term, nil, affixtype) end if what_categorizes_msg and what_categorizes_msg ~= "" then if additional then additional = additional .. "\n\n" .. what_categorizes_msg else additional = what_categorizes_msg end end end return { description = "{{{langname}}} " .. pos .. " " .. desc[affixtype] .. " " .. require("Module:links").full_link({ lang = data.lang, term = display_term, alt = display_alt, sc = sc, id = id, tr = display_tr, ts = display_ts}, "टर्म") .. ".", additional = additional, breadcrumb = pos == "टर्म" and m_script_utilities.tag_text(display_alt or display_term, data.lang, sc, "टर्म") .. id_text or pos, displaytitle = "{{{langname}}} " .. labelpref .. m_script_utilities.tag_text(term, data.lang, sc, "टर्म") .. id_text, parents = parents, umbrella = false, }, true -- true = args handled end end) return {LABELS = labels, RAW_CATEGORIES = raw_categories, HANDLERS = handlers} n685a7r5fa418omoyz2d0da9i2vehno मॉड्यूल:category tree/परिवार 828 306935 487720 2026-09-02T10:35:27Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487720 Scribunto text/plain local raw_categories = {} local raw_handlers = {} local concat = table.concat local insert = table.insert ----------------------------------------------------------------------------- -- -- -- RAW CATEGORIES -- -- -- ----------------------------------------------------------------------------- raw_categories["सभी भाषा परिवार"] = { topright = "{{commonscat|Languages by family}}\n{{wp|Language family,List of language families}}", description = "This category lists all [[language family|language families]].", parents = {"मूलभूत"}, } raw_categories["भाषाएँ परिवार अनुसार"] = { topright = "{{commonscat|Languages by family}}\n{{wp|Language family,List of language families}}", description = "This category contains all languages categorized hierarchically according to the [[language family]] they belong to.", additional = "Only top-level language families are shown here. For a full list of all language families, see [[:Category:All language families]] or [[Wiktionary:List of families]].", parents = { {name = "All languages", sort = " "}, {name = "All language families", sort = " "}, }, } raw_categories["Unassigned languages"] = { description = "Languages that have not yet been assigned to any family by Wiktionary editors, usually due to oversight.", additional = [=[This should be distinguished from: * [[:Category:Unclassifiable languages]] (languages that cannot be confidently assigned to any family, typically because the language is extinct or unresearched and has little available data on it); * [[:Category:Language isolates]] (where there is general agreement that the language has no relatives); and * [[:Category:Languages of disputed affiliation]] (languages where there is no consensus concerning which family, if any, they belong to).]=], parents = { {name = "भाषा परिवार अनुसार", sort = "*"}, "सभी भाषा परिवार", }, } ----------------------------------------------------------------------------- -- -- -- RAW HANDLERS -- -- -- ----------------------------------------------------------------------------- local function family_is_not_a_family(fam) if not fam then return false elseif fam:getCode() == "qfa-not" then return true else local family_parent = fam:getFamily() local parent_code = family_parent and family_parent:getCode() or nil -- Some families have no parent, some are in the pseudo-family sgn (sign languages), some are given as -- qfa-dis (disputed) or potentially qfa-unc (unclassifiable), but are not themselves pseudo-families. if not parent_code or parent_code == "sgn" or parent_code == "qfa-dis" or parent_code == "qfa-unc" then return false end return family_is_not_a_family(family_parent) end end local function family_has_no_category(fam) local famcode = fam:getCode() if famcode == "paa" then return false -- Papuan languages are not a family but have a category elseif famcode == "qfa-iso" or famcode == "qfa-not" then return true else local parfam = fam:getFamily() if parfam and parfam:getCode() == "qfa-not" then -- Constructed languages, sign languages, etc.; no category for them return true end end return false end -- Currently all Papuan families begin with "paa" or "ngf", local function family_is_papuan(fam) local famcode = fam:getCode() return famcode ~= "paa" and (famcode:find("^paa") or famcode:find("^ngf")) end local function infobox(fam) local ret = {} insert(ret, "<table class=\"wikitable\">\n") insert(ret, "<tr>\n<th colspan=\"2\" class=\"plainlinks\">[//en.wiktionary.org/w/index.php?title=Module:families/data&action=edit Edit family data]</th>\n</tr>\n") insert(ret, "<tr>\n<th>Canonical name</th><td>" .. fam:getCanonicalName() .. "</td>\n</tr>\n") local otherNames = fam:getOtherNames() if otherNames then local names = {} for _, name in ipairs(otherNames) do insert(names, "<li>" .. name .. "</li>") end if #names > 0 then insert(ret, "<tr>\n<th>अन्य नाम</th><td><ul>" .. concat(names, "\n") .. "</ul></td>\n</tr>\n") end end local aliases = fam:getAliases() if aliases then local names = {} for _, name in ipairs(aliases) do insert(names, "<li>" .. name .. "</li>") end if #names > 0 then insert(ret, "<tr>\n<th>उपनाम</th><td><ul>" .. concat(names, "\n") .. "</ul></td>\n</tr>\n") end end local varieties = fam:getVarieties() if varieties then local names = {} for _, name in ipairs(varieties) do if type(name) == "string" then insert(names, "<li>" .. name .. "</li>") else assert(type(name) == "table") local first_var local subvars = {} for i, var in ipairs(name) do if i == 1 then first_var = var else insert(subvars, "<li>" .. var .. "</li>") end end if #subvars > 0 then insert(names, "<li><dl><dt>" .. first_var .. "</dt>\n<dd><ul>" .. concat(subvars, "\n") .. "</ul></dd></dl></li>") elseif first_var then insert(names, "<li>" .. first_var .. "</li>") end end end if #names > 0 then insert(ret, "<tr>\n<th>Varieties</th><td><ul>" .. concat(names, "\n") .. "</ul></td>\n</tr>\n") end end insert(ret, "<tr>\n<th>[[Wiktionary:Families|Family code]]</th><td><code>" .. fam:getCode() .. "</code></td>\n</tr>\n") insert(ret, "<tr>\n<th>[[w:Proto-language|Common ancestor]]</th><td>") local protoLanguage = fam:getProtoLanguage() if protoLanguage then insert(ret, "[[:श्रेणी:" .. protoLanguage:getCategoryName() .. "|" .. protoLanguage:getCanonicalName() .. "]]") else insert(ret, "none") end insert(ret, "</td>\n") insert(ret, "\n</tr>\n") local parent = fam:getFamily() if not parent then insert(ret, "<tr>\n<th>[[Wiktionary:Families|Parent family]]</th>\n<td>") insert(ret, "unassigned") elseif parent:getCode() == "qfa-not" then insert(ret, "<tr>\n<th>[[Wiktionary:Families|Parent family]]</th>\n<td>") insert(ret, "not a family") else local chain = {} while parent do if family_has_no_category(parent) then break end insert(chain, "[[:श्रेणी:" .. parent:getCategoryName() .. "|" .. parent:getCanonicalName() .. "]]") parent = parent:getFamily() end if #chain == 0 then insert(ret, "<tr>\n<th>[[Wiktionary:परिवार|पूर्वज परिवार]]</th>\n<td>") insert(ret, "no parents") else insert(ret, "<tr>\n<th>[[Wiktionary:परिवार|Parent famil" .. (#chain == 1 and "y" or "ies") .. "]]</th>\n<td>") for i = #chain, 1, -1 do insert(ret, "<ul><li>" .. chain[i]) end insert(ret, string.rep("</li></ul>", #chain)) end end insert(ret, "</td>\n</tr>\n") if fam:getWikidataItem() and mw.wikibase then local link = '[' .. mw.wikibase.getEntityUrl(fam:getWikidataItem()) .. ' ' .. fam:getWikidataItem() .. ']' insert(ret, "<tr><th>Wikidata</th><td>" .. link .. "</td></tr>") end insert(ret, "</table>") return concat(ret) end local function NavFrame_for_family_tree(content, title) return '<div class="NavFrame"><div class="NavHead">' .. (title or '{{{title}}}') .. '</div>' .. '<div class="NavContent" style="text-align: left; font-size: calc(1em / 0.95); padding: 0.3em">' .. content .. '</div></div>' end local additional_information = { ["qfa-dis"] = "These are languages where there is no consensus concerning which family, if any, they belong to.", ["qfa-iso"] = "These are languages where there is general agreement that the language has no known relatives.", ["qfa-mix"] = "A [[mixed language]] is a language which is composed of two different languages.", ["qfa-unc"] = "These are languages that cannot be confidently assigned to a family due to lack of sufficient linguistic data. " .. "They are also commonly called {{w|unclassified language|unclassified languages}}, but this is ambiguous between " .. "languages that cannot be classified (due to insufficient data) and those that merely have not been classified " .. "(due to insufficient research).", } local preceding_information = { ["qfa-dis"] = "{{also|Category:Unclassifiable languages|Category:Unassigned languages|Category:Language isolates}}", ["qfa-iso"] = "{{also|Category:Languages of disputed affiliation|Category:Unclassifiable languages|Category:Unassigned languages}}", ["qfa-unc"] = "{{also|Category:Languages of disputed affiliation|Category:Unassigned languages|Category:Language isolates}}", ["qfa-mix"] = "{{also|Category:Creole or pidgin languages}}", ["crp"] = "{{also|Category:Mixed languages}}", } local specially_named_families = { ["Languages of disputed affiliation"] = "qfa-dis", ["Language isolates"] = "qfa-iso", } local specially_named_family_sort_keys = { ["Languages of disputed affiliation"] = "Disputed affiliation", ["Language isolates"] = "Isolate", } insert(raw_handlers, function(data) local family = require("Module:families").getByCategoryName(data.category) if not family then local special_code = specially_named_families[data.category] if special_code then family = require("Module:families").getByCode(special_code) if not family then error(("Internal error: Family code '%s' is an invalid family code."):format(special_code)) end end end if not family then return nil end local parent_fam = family:getFamily() local first_parent, parent_sort_key, first_parent_sort_key if not parent_fam or family_has_no_category(parent_fam) then first_parent = "भाषाएँ परिवार अनुसार" parent_sort_key = specially_named_family_sort_keys[data.category] first_parent_sort_key = "*" .. (parent_sort_key or "") else first_parent = parent_fam:getCategoryName() end local description, additional = "", "" local topright local preceding = preceding_information[family:getCode()] local additional_preface = additional_information[family:getCode()] if additional_preface then additional_preface = additional_preface .. "\n\n" else additional_preface = "" end if family_is_not_a_family(family) then additional_preface = additional_preface .. "This is a pseudo-family, used for grouping purposes but not forming a linguistically valid [[clade]] " .. "(i.e. a set of linguistically related languages descending from a common parent).\n\n" .. "Information about this family:\n\n" else additional_preface = "Information about " .. family:getCanonicalName() .. ":\n\n" end if not data.called_from_inside then topright = {} local wikipedia_art = family:getWikipediaArticle("noCategoryFallback") if wikipedia_art then insert(topright, "{{wp|" .. wikipedia_art .. "}}") end local commons_cat = family:getCommonsCategory() if commons_cat then insert(topright, "{{commonscat|" .. commons_cat:gsub("^श्रेणी:", "") .. "}}") end topright = #topright > 0 and concat(topright, "\n") or nil description = "This is the main category of the '''" .. family:getDisplayForm() .. "'''." additional = additional_preface .. infobox(family) end local ok, tree_of_descendants = pcall( require("Module:family tree").print_children, family:getCode(), { protolanguage_under_family = true, must_have_descendants = true }) if ok then if tree_of_descendants then additional = additional .. NavFrame_for_family_tree( tree_of_descendants, "परिवार वृक्ष") else additional = additional .. "\n\n" .. ucfirst(family:getCanonicalName()) .. " has no descendants or varieties listed in Wiktionary's language data modules." end else mw.log("error while generating tree: " .. tostring(tree_of_descendants)) end local parents = { {name = first_parent, sort = first_parent_sort_key}, {name = "सभी भाषा परिवार", sort = parent_sort_key}, } if parent_fam and parent_fam:getCode() == "sgn" then insert(parents, "All sign languages") end if family_is_papuan(family) then insert(parents, "Papuan languages") end return { preceding = preceding, topright = topright, description = description, additional = additional, parents = parents, breadcrumb = family:getCanonicalName(), can_be_empty = true, } end) return {RAW_CATEGORIES = raw_categories, RAW_HANDLERS = raw_handlers} 9eksalu5otlpo6m1zl5s2f089221ybt मॉड्यूल:fun/trycall 828 306936 487721 2026-09-02T10:39:37Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487721 Scribunto text/plain local fun_is_callable_module = "Module:fun/isCallable" local error = error local format = string.format local pcall = pcall local type = type local function is_callable(...) is_callable = require(fun_is_callable_module) return is_callable(...) end local function catch_values(obj, success, ...) if success then return success, ... -- Error message will only take this exact form if `obj` is not callable, -- because it will contain a traceback if it was thrown further up the -- stack. elseif (...) == format("attempt to call a %s value", type(obj)) then return false end return error(...) end --[==[ A special form of {pcall()}, which returns {true} plus the result value(s) if {obj} is callable, or {false} if it isn't. Errors that occur within the called function are not protected.]==] return function(obj, ...) local callable = is_callable(obj, true) if callable then return true, obj(...) elseif callable == false then return false end -- If `callable` is nil, there's a protected metatable, so there's no way to -- check without doing a protected call. return catch_values(obj, pcall(obj, ...)) end b1dd95sq861pept04po2rb74sr1t9y1 मॉड्यूल:frame 828 306937 487722 2026-09-02T10:41:39Z SM7 6218 अंग्रेजी विक्षनरी से आयातित 487722 Scribunto text/plain local export = {} local frame local function get_frame() frame = mw.getCurrentFrame():newChild{} return frame end function export.callParserFunction(...) return (frame or get_frame()):callParserFunction(...) end function export.expandTemplate(...) return (frame or get_frame()):expandTemplate(...) end function export.extensionTag(...) return (frame or get_frame()):extensionTag(...) end function export.newParserValue(...) return (frame or get_frame()):newParserValue(...) end function export.newTemplateParserValue(...) return (frame or get_frame()):newTemplateParserValue(...) end function export.preprocess(...) return (frame or get_frame()):preprocess(...) end return export qus7nsaebnecffh2rohmte6zvmmyoag কিন্নৰ 0 306938 487723 2026-09-02T10:45:15Z अजीत कुमार तिवारी 4887 +1 487723 wikitext text/x-wiki ==असमिया== ===संज्ञा=== {{as-noun}} # [[किन्नर]] # देवलोक का एक उपदेवता जो एक प्रकार का गायक था और उसका मुँह घोड़े के समान होता था। # बाजा जो बीन जैसा होता है लेकिन इस की लकड़ी इस से कुछ ज़्यादा लंबी होती है और इस में तीन कद्दू और दो तार होते हैं। # वर्तमान समय में 'हिजड़ा' के लिए शिष्टोक्ति। === प्रकाशित कोशों से अर्थ === ==== हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश ==== # पुराणानुसार देवलोक या स्वर्ग के एक प्रकार के गायक-उपदेवता; (पुल्लिंग) # आजकल गाने-बजाने का पेशा करने वाली एक जाति। [[श्रेणी: हिन्दी-प्रकाशितकोशों से अर्थ-हिंदी-असमिया-अंग्रेज़ी त्रिभाषा कोश]] 3q40lqzc202mmcowqyrud8cg7cuy5rb