विक्षनरी
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 (' → '),
-- as they contain #, which causes the numeric character reference to be
-- misparsed (wa'a → wa'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 = "]" .. link.display .. "["
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, " " .. 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 <
-- and > 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),
["<"] = "<",
[">"] = ">",
}
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%;\"> / </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> → <code><nowiki>displayed text</nowiki></code>
* <code><nowiki>[[page and displayed text]]</nowiki></code> → <code><nowiki>page and displayed text</nowiki></code>
* <code><nowiki>[[Category:English lemmas|WORD]]</nowiki></code> → ''(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 .. " § " .. 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>&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", "[[")
:gsub("\2", "]]")
:gsub("%[", "[")
:gsub("]", "]")
-- 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;",
["λοπαδοτεμαχοσελαχογαλεοκρανιολειψανοδριμυποτριμματοσιλφιοκαραβομελιτοκατακεχυμενοκιχλεπικοσσυφοφαττοπεριστεραλεκτρυονοπτοκεφαλλιοκιγκλοπελειολαγῳοσιραιοβαφητραγανοπτερύγων"] = "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 .. " " .. 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
|-
| 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 = {
["\""] = """,
["&"] = "&",
["'"] = "'",
["<"] = "<",
[">"] = ">",
["\194\160"] = " ",
}, 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 { 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 = "‎ <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 == "—" 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, ":", chunks_len) -- :
)
return concat(chunks, ":"), 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, ":"), 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, ":"), 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("{{" .. concat(output, "|") .. "}}") -- {{ | }}
)
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("{{{" .. concat({name, default}, "|") .. "}}}") -- {{{ | }}}
)
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("<" .. tag .. ">")
)
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|}}}|_| }}}}}]]<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