Мазмунга өтүү

Модуль:languages/data/2

Wiktionary долбоорунан

Бул модулда two-letter language codes. Көбүрөөк маалымат алуу үчүн Wiktionary:Languages караңыз.

Бул модулду башка модулдарда же шаблондордо түздөн-түз колдонууга болбойт. Маалыматтарга Module:languages аркылуу кирүү керек. Тийиштүү кошумча маалыматтар үчүн, караңыз Модуль:languages/data/2/extra.

Каталар

[түзөтүү]

Module:data consistency check аркылуу төмөнкү каталар аныкталды:

  • Прото-Борбордук Того тили (alv-gtm-pro) Гана-Того тоо тилдеринин (alv-gtm) прото тили болгонуна карабастан, күтүлгөн "Прото-Гана-Того тоосу" аталышына ээ эмес.
  • Прото-арава тилинде (auf-pro) арауан тилдеринин (auf) прото-тили болгону менен күтүлгөн "прото-арауан" аталышы жок.
  • Прото-Амуеша-Чамикуро тилинде (awd-amc-pro) awd-amc жараксыз код менен байланышкан прото-тил коду бар.
  • Прото-Кампа тилинде (awd-kmp-pro) жараксыз awd-kmp коду менен байланышкан прото-тил коду бар.
  • Прото-Аравак тили (awd-pro) аравакан ​​тилдеринин (awd) прото-тили болгону менен күтүлгөн "Прото-Аравакан" аталышына ээ эмес.
  • Прото-Пареси-Ваура тилинде (awd-prw-pro) awd-prw жараксыз код менен байланышкан прото-тил коду бар.
  • Прото-Та-Аравак тили (awd-taa-pro) та-аравакан ​​тилдеринин (awd-taa) прото-тили болгону менен, күтүлгөн "Прото-Та-Аравакан" аталышына ээ эмес.
  • Прото-рукай тилинде (dru-pro) үй-бүлө эмес, Rukai (dru) менен байланышкан прото-тил коду бар.
  • Прото-баск тилинде (euq-pro) васкон тилдеринин (euq) прото-тили болгону менен күтүлгөн "Прото-Васкондук" аталышы жок.
  • Прото-Норсе тили (gmq-pro) Түндүк герман тилдеринин (gmq) прото-тили болсо да, күтүлгөн "Прото-Түндүк Герман" аталышына ээ эмес.
  • Прото-Камта тили (inc-krn-pro) КРНБ лекциясынын (inc-krn) прото-тили болсо да, күтүлгөн аталышка ээ эмес "Proto-KRNB lects".
  • Проточумаш тилинде (nai-chu-pro) чумашан тилдеринин (nai-chu) прото-тили болгону менен күтүлгөн “Прото-Чумашан” аталышы жок.
  • Протомайдун тилинде (nai-mdu-pro) майдуан тилдеринин (nai-mdu) прото-тили болгону менен күтүлгөн «Прото-майдуан» аталышы жок.
  • Прото-миксе-зок тили (nai-miz-pro) Mixe-Zoquean тилдеринин (nai-miz) прото-тили болсо да, күтүлгөн "Прото-микс-зокеан" аталышына ээ эмес.
  • Прото-помо тилинде (nai-пом-про) помоан тилдеринин (nai-pom) прото-тили болгонуна карабастан, күтүлгөн "Прото-Помоа" аталышы жок.
  • Прото-Мазатец тили (omq-maz-pro) Мазатекан тилдеринин (omq-maz) прото-тили болгонуна карабастан, күтүлгөн "Прото-Мазатекан" аталышына ээ эмес.
  • Прото-осетик тилинде (os-pro) үй-бүлө эмес, осетин (os) менен байланышкан прото-тил коду бар.
  • Прото-Түндүк Саравак тили (poz-sva-pro) Түндүк Саравакан ​​тилдеринин (поз-sva) прото-тили болгонуна карабастан, күтүлгөн "Түндүк-Түндүк Саравакан" аталышына ээ эмес.
  • Прото-салиш тили (sal-pro) салишан тилдеринин (sal) прото-тили болгону менен күтүлгөн "Прото-Салишан" аталышына ээ эмес.
  • Прото-сами тилинде (smi-pro) сами тилдеринин (smi) прото-тили болгону менен күтүлгөн "Прото-сами" аталышы жок.
  • Прото-куки-чин тили (tbq-kuk-pro) кук тилдеринин (tbq-kuk) прото-тили болгону менен күтүлгөн "Прото-Кукиш" аталышына ээ эмес.
  • Протосак тили (xsc-sak-pro) сак тилдеринин (xsc-sak) прото-тили болгону менен күтүлгөн "Прото-Сакан" аталышына ээ эмес.
  • Адабий кытай тили (lzh-lit) уникалдуу эмес канондук аталышка ээ; lzh код менен да колдонулат.
  • Маалымат ачкычы preprocess_links үчүн ??? (th-new) жараксыз.
  • Адабий кытай, lzh-lit кодунун канондук аталышы туура эмес; ал адабий кытай болушу керек.
  • Адабий кытай, lzh-lit кодунун канондук аталышы туура эмес; ал адабий кытай болушу керек.
  • ira-mid кодун жана канондук орто ирандык аталышты алып салуу керек; алар Module:families/data да табылган эмес.
  • ira-old коду жана эски ирандык канондук аталышы алынып салынышы керек; алар Module:families/data да табылган эмес.
  • ira-mid кодун жана канондук орто ирандык аталышты алып салуу керек; алар Module:families/data да табылган эмес.
  • ira-old коду жана эски ирандык канондук аталышы алынып салынышы керек; алар Module:families/data да табылган эмес.

Керектүү баалуулуктар

[түзөтүү]

Таблицадагы ар бир жазуу төмөнкү индекстелген талааларды камтышы керек:

1
Тилдин "канондук" аталышы. Бул Уикисөздүк жазууларында жана категория аттарында колдонулган ат.
2
Тил үчүн Wikidata пунктунун id (Q номери). Сан (оң бүтүн сан) же Q менен башталып, ондук цифралар менен аяктаган сап катары көрсөтүлүшү мүмкүн. Белгисиз/бар болсо nil коюу. Бул эски wikipedia_article касиетин алмаштырат, аны дагы эле белгилүү бир бөлүмдөргө же тилдеги басылмаларга шилтемелөө үчүн колдонсо болот.

Кошумча баалуулуктар

[түзөтүү]
3
Тил таандык болгон үй-бүлөнүн коду. Кара Wiktionary:Families.
4
Скрипт коддорунун тизмеси. Wiktionary:Scripts караңыз. Булар бул тил реалдуу дүйнөдө колдонгон бардык скрипттерди (жазуу системаларын), ошондой эле Wiktionary колдонгондорду билдирет. Уикисөздүктө эң көп колдонулган скрипттер тизмеде биринчи болушу керек, анткени бул скриптти аныктоону тездетет.
Көптөгөн калыптар жана модулдар Module:languages ичиндеги lua ыкмасын колдонуу менен белгилүү бир тилдеги тексттин скриптин аныкташат. Бул функция скрипттердин тизмесине түшүп, ар бир скриптке тексттеги канча символ таандык экенин эсептейт. Эгерде бардык символдор бир сценарийге таандык болсо, ал скрипт кайтарылат; антпесе, эң көп символду камтыган сценарий кайтарылат. Ошентип, эң көп колдонулган скрипттер тизмеде биринчи болсо, скрипт аныктоо тезирээк болот. Эгерде символдордун бири да тизмеленген скрипттердин бирине дал келбесе, анда Эч ким скрипти кайтарылат (символдор тизмеде жок скриптке дал келсе да). Транслингвалдык (mul) жана аныкталбаган (und) өзгөчө мааниге ээ lua, демек, алар ар бир скриптке ээ катары каралат. Бул маани башка тил коддору үчүн коюлбашы керек.
Луа эстутум чектөөлөрүнүн уланып жаткан көйгөйлөрүнөн улам, бул сапта үтүр менен бөлүнгөн тизме катары берилиши керек (жана таблица эмес). Бул кайра келгенде таблицага айландырылат. Мисалы: lua.
type
Тилдин түрү (бул Wiktionary'де колдонулушуна таасир этет). Мүмкүн болгон баалуулуктар:
  • regular - Бул маани демейки, андыктан аны көрсөтүүнүн кереги жок. Бул WT:CFI ылайык аттестацияланганын жана ошондуктан негизги аталыш мейкиндигинде уруксат берилгенин көрсөтөт. Ошондой эле тил үчүн реконструкцияланган терминдер болушу мүмкүн, алар Реконструкциянын аталыш мейкиндигинде жайгаштырылат жана реконструкцияны көрсөтүү үчүн * префикси болушу керек.
  • reconstructed - Бул тил CFI боюнча аттестациядан өткөн эмес, андыктан Кайра куруунун аталыш мейкиндигинде гана уруксат берилет. Бул тилдеги бардык терминдер реконструкцияланган жана * менен префикс болушу керек.
  • appendix-constructed - Бул тил тастыкталган, бирок түзүлгөн тилдер үчүн белгиленген кошумча талаптарга жооп бербейт (WT:CFI#Constructed languages). Демек, анын жазуулары Тиркеменин аттар мейкиндигинде болушу керек, бирок алар реконструкцияланбайт жана ошондуктан шилтемелерде * префикси болбошу керек.
ancestors
Бул тилдин түз ата-бабаларынын тил коддорунун тизмеси. Мисалы, англис тилинин түпкү атасы enm (Орто англис тили); ang (Эски англис, орто англис тилинин түпкү атасы), gem-pro (прото-герман, эски англис тилинин түпкү атасы), жана ine -pro (прото-индо-европа, прото-герман тилинин түпкү атасы) тизмеде жок.
Көпчүлүк тилдер үчүн бир гана ата-баба коду берилиши керек, бирок пиджиндер, креолдор жана аралаш тилдер үчүн бир нече ата-бабаларды тизмектесе болот.
Эгерде тилдин түздөн-түз түпкү теги тил таандык болгон үй-бүлөнүн прото-тили болсо, ата-баба тилинин тизмеси кирбеши керек. Мындай учурда, эгерде үй-бүлөлүк код берилген болсо, Module:languages тилдин түпкү атасы катары прото-тилди автоматтык түрдө кошот. Мисалы, прото-германдык (gem-pro) индоевропалык (ine) үй-бүлөсүнө кирет жана анын тике атасы прото-индоевропалык () ine-pro). Прото-индо-европа тили индо-европа тилдеринин прото-тили болгондуктан, прото-герман тилине ата-бабалар таблицасы керек эмес; lua функциясы аркылуу прото-индо-европа тили автоматтык түрдө анын түпкү атасы катары кайтарылат.
Lua эстутум чектөөлөрүнүн уланып жаткан көйгөйлөрүнөн улам, бул сапта үтүр менен бөлүнгөн тизме катары берилиши керек (жана таблица эмес). Бул кайра келгенде таблицага айландырылат. Мисалы: lua.
wikimedia_codes
Бул тил картада турган Wikimedia тил коддорунун тизмеси. Бул Уикисөздүк коддорун Википедия коддоруна которуу үчүн колдонулат, алар адатта бирдей, бирок ал башка тилдерде бир нече тилдер бар. Тил коддору жарактуу Википедия коддору болушу керек (вики программалык камсыздоосу тарабынан аныкталат), ал эми алар тил маалымат модулдарынын биринде аныкталбаса, алар Модуль:wikimedia languages/dataда аныкталышы керек.
Луа эстутум чектөөлөрүнүн уланып жаткан көйгөйлөрүнөн улам, бул сапта үтүр менен бөлүнгөн тизме катары берилиши керек (жана таблица эмес). Бул кайра келгенде таблицага айландырылат. Мисалы: lua.
Wikimedia <-> Уикисөздүк тил коддору учурда төрт жерде аныкталганын эске алыңыз: тил модулдары (бул жерде документтештирилген); Модуль:wikimedia languages/data; Модуль:translations/data; жана MediaWiki:Gadget-TranslationAdder-Data.jsдеги `метадайындар` өзгөрмөсүнүн талаасы. FIXME: Бул маалыматтарды унификациялоо.
wikipedia_article
Тили үчүн Википедия макаласынын аты. Адатта Викидата id колдонулбай калса гана берилиши керек.
translit
Синтаксис боюнча көрсөтмөлөрдү Алмашуулар бөлүмүнөн караңыз.
Тилди кантип транслитерациялоо керектигин аныктайт, ал Module:scripts/data isTransliterated мааниси lua деп коюлбаган скрипттердеги бардык терминдерге автоматтык түрдө колдонулат. маалыматтар. Бул Module:languages ичинде transliterate тарабынан колдонулат.
link_tr
Тилдин транслитерациясын байланыштыруу үчүн муну true деп коюңуз. Мисалы, готикада готика скриптиндеги жазуулар жана транслитерациялар үчүн жазуулар бар: э.. Болбосо, бул скрипт коддорунун үтүр менен бөлүнгөн тизмеси болушу мүмкүн, бул шилтемелер ошол скрипттерди колдонгон терминдерге гана колдонулат дегенди билдирет.
override_translit
Автоматтык транслитерация кандайдыр бир кол менен транслитерацияны жокко чыгаруу үчүн муну true деп коюңуз. Болбосо, бул скрипт коддорунун үтүр менен бөлүнгөн тизмеси болушу мүмкүн, бул жокко чыгаруу ошол скрипттерди колдонгон терминдерге гана колдонулат дегенди билдирет.
display_text
Синтаксис боюнча көрсөтмөлөрдү Алмашуулар бөлүмүнөн караңыз.
Тексттин дисплей формасын түзүү үчүн алмаштырууларды аныктайт, ал бетте иш жүзүндө көрсөтүлгөн форма. Редакторлор туура эмес символду кошуп койгон кайталануучу маселе болсо, бул кээде эки же андан көп белгилерди чаташтыруу оңой болгон учурда маселе болуп калса керек. Мисалы, көптөгөн кавказ тилдеринде кириллицада колдонулган палочка ӏ көбүнчө I, жада калса латын l же катары киргизилет. мен. Бул үзгүлтүксүз маселе болгондуктан (жада калса эне тилинде сүйлөгөндөр арасында), көйгөйдү чечүүнүн эң оңой жолу бул тилдер үчүн дисплей формасын автоматтык түрдө оңдоо. Бул makeDisplayText тарабынан Module:languages тарабынан колдонулат.
entry_name
Синтаксис боюнча көрсөтмөлөрдү Алмашуулар бөлүмүнөн караңыз.
Терминдин көрсөтүлгөн формасынан жазуу атын түзүү үчүн алмаштырууларды аныктайт. Бул тилдин каада-салттарына же стандарттык практикасына ылайык айрым диакритикалык белгилерди алып салуу үчүн колдонулушу мүмкүн. Мисалы, орусча сөздөрдүн (ру́сскийрусский) акцент белгилерин же латын же эски англис сөздөрүндөгү макрондорду алып салуу үчүн колдонулат. (ōsos), анткени алар бул тилдердин кадимки жазуу түрүндө колдонулбайт. Бул makeEntryName тарабынан Module:languages тарабынан колдонулат.
sort_key
Синтаксис боюнча көрсөтмөлөрдү Алмашуулар бөлүмүнөн караңыз.
Барактын аталышынан категория сорттоо ачкычын түзүү үчүн алмаштырууларды аныктайт. максаты болуп саналат:
  1. Сорттоодо этибарга алынбай турган белгилерди алып салыңыз.
  2. Эгерде ал тилдин сорттоо эрежелери аларды айырмалабаса, символдорду башка символдор менен алмаштырыңыз. Мисалы, немис тилинде "ä" жана "a" белгилери сорттоо үчүн эквиваленттүү болуп эсептелет жана экөө тең "a" катары каралат.
  3. Ар кайсы жерлерде иреттелиши керек болгон белгилерди ошол жүрүм-турумду окшоштурган атайын символдор менен алмаштырыңыз (бул MediaWiki программалык камсыздоосунан улам, иреттөө тартибин аныктоо үчүн Юникод коддук пунктун колдонуу менен зарыл, бул көбүнчө ыктыярдуу). Мисалы, монгол тилинде "ү" ​​тамгасы "у" дан кийин иреттелиши керек, бирок коддук пунктуна байланыштуу ал демейки боюнча акыркы "я" тамгасынан кийин иргелет. Ошентип, биз "ү" нү "у" плюс өтө жогорку код чекитине ээ белгиге алмаштыра алабыз, бул анын ар дайым түз кийин иргелип турушун камсыз кылат. Берилиш модулдары ыңгайлуулук үчүн муну жасоонун ички ыкмасын камтыйт: жогорудагы мисал менен бул lua колдонуу менен аткарылат. Башка символду lua (жана башка).
Эскертүү: кандайдыр бир алмаштырууну колдонуудан мурун термин кичине тамгага которулат, андыктан баш тамгаларды иштетүүгө аракет кылбаңыз (анткени ал иштебейт). Бул makeSortKey тарабынан Module:languages тарабынан колдонулат.
dotted_dotless_i
чекиттүү жана чекитсиз I (айрым түрк тилдери сыяктуу) айырмалай турган тилдер үчүн муну true деп коюңуз.

Алмашуулар

[түзөтүү]
lua, lua, lua жана lua баары бирдей синтаксисти колдонушат, ал мүмкүн болушунча ийкемдүү болгула:
  • Эгерде алар сап болсо, анда бул чыгарылышты генерациялоо үчүн колдонула турган атайын модулдун аты катары каралат. Мисалы, lua Модуль:sa-translit дегенди билдирет.
  • Эгерде алар үстөл болсо, анда ал эки түрдөгү баскычтарды камтышы мүмкүн:
    1. lua, lua, lua жана lua баскычтары текстти алмаштырууга тиешелүү (караңыз). төмөндө).
    2. Скрипт коду ачкычтары скриптке мүнөздүү жүрүм-турумду көрсөтүү үчүн колдонулат. Булар өз кезегинде саптар (бөлүнгөн модулдар үчүн) же таблицалар (текстти алмаштыруу үчүн) болушу мүмкүн. Кошумчалай кетсек, lua ачкычы бар маани кайра кайтаруу катары колдонулушу мүмкүн, эгерде ал скрипт үчүн конкреттүү жүрүм-турум аныкталбаса, колдонулат.
Эскертүү: эгерде скрипт ачкычтары жана текстти алмаштыруу ачкычтары бир эле таблицада берилсе, анда текстти алмаштыруу скрипттин өзгөчө аракети аяктагандан кийин колдонулат. Эгер мындан качкыңыз келсе, lua ачкычы менен кошумча таблица катары бардык кайра текст алмаштыруулар берилгенин текшериңиз. Скрипт-спецификалык модулдун чыгышын башка модул менен иштетүү мүмкүн эмес, бирок: муну (мисалы) биринчи модулда куйрук чакыруу менен жасоо керек.
Арналган модулдар lua аргументтерин алышы керек, мында lua киргизүү тексти (көбүнчө беттин аты же колдонуучу киргизген), lua тил коду (тил объектиси эмес), жана lua скрипт коду (скрипт объекти эмес). Аткаруу себептеринен улам, алар текстти алмаштыруу аркылуу каалаган натыйжага жетишүү мүмкүн болбогондо гана колдонулушу керек.
Текстти алмаштыруу белгилүү бир контексттер үчүн белгилүү символдорду (же белгилердин топтомун) алмаштырат же жок кылат. Муну жасоонун үч жолу бар:
  1. lua жана lua баскычтарын колдонуу.
  2. lua (жана ыктыярдуу түрдө lua).
  3. Жогорудагылардын экөө тең (ошол тартипте).
lua lua менен жупташкан жана экөө тең эки-экиден уюштурулган таблицалар болушу керек: lua ичиндеги ар бир элемент үлгү болуп саналат. lua ичиндеги тиешелүү элемент аларды эмне менен алмаштырууну аныктайт (аргументтер катары) терминдеги кайсы символдорду алмаштырууну аныктоо lua).
Эгерде алмаштыруу жок болсо (же ал lua же lua болсо), анда дал келген белгилердин баары толугу менен алынып салынат. Бул lua тизмеси lua тизмеден узунураак болушу мүмкүн экенин билдирет жана lua ичиндеги бардык элементтер үчүн бош алмаштыруу болжолдонот. lua да теңдеши жок.
Таблицалар стандарттык Scribunto lua символдорду же үлгүлөрдү (жөнөкөйлөтүлгөн форма кадимки туюнтма камтышы мүмкүн) функциясы. Көбүрөөк маалымат алуу үчүн Scribunto маалымдама колдонмосун караңыз. Үлгүлөр эки жолу алмаштырууну татаалыраак натыйжаларга жетүү үчүн ыңгайлуу жолго айландырарын эске алыңыз. Буга мисал катары Мандарин (cmn) үчүн латынча сорттоо баскычын караңыз.
lua - бул текст ажырагандан кийин өчүрүлө турган символдорду камтыган сап. Мисалы, lua бириктирилген акцент акценти болсо, бардык курч акценттер алдын ала түзүлгөн символдордун (мисалы, á же ά) бөлүгү болсо дагы, өчүрүлөт. ά). Атына карабастан, ажыратыла турган символдор диакритика болбошу керек: мисалы, апостроф менен кошо бардык апострофтар алынып салынат (бирок дефистерден этият болуңуз, алар качылган болушу керек. lua).
Мындан тышкары, lua берилсе, анда ал lua таблицасын көрсөтсө болот, ал белгилүү бир символдордун диакритикасын алып салуусуна жол бербейт. Мисалы, lua айкалыштыруу диаэреси болсо, бирок lua lua камтыса, анда ё өзгөрүүсүз калат. Башка жагынан алганда, ӱ инстанциясы дагы эле у болуп калат (эгер lua lua).

Мурда колдоого алынган баалуулуктар

[түзөтүү]
aliases, varieties, otherNames
Бул маалыматтар азыр кошумча маалымат модулдарында жайгашкан; көрүү Module:languages жана Template:тилден тышкары документтер.
family
Now 3.
scripts
Now 4.

local m_lang = require("Module:languages")
local m_langdata = require("Module:languages/data")

local u = require("Module:string utilities").char

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["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

local m = {}

m["aa"] = {
	"Афарче",
	27811,
	"cus-eas",
	"Latn, Ethi",
	entry_name = {Latn = {remove_diacritics = c.acute}},
}

m["ab"] = {
	"Абхазча",
	5111,
	"cau-abz",
	"Cyrl, Geor, Latn",
	translit = {
		Cyrl = "ab-translit",
		Geor = "Geor-translit",
	},
	override_translit = true,
	display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
	entry_name = {
		Cyrl = {
			remove_diacritics = c.acute,
			from =  {"^а%-"},
			to = {"а"},
		},
		Latn = s["cau-Latn-entryname"],
	},
	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"] = {
	"Авестанче",
	29572,
	"ira-cen",
	"Avst, Gujr",
	translit = {Avst = "Avst-translit"},
	wikipedia_article = "Avestan",
}

m["af"] = {
	"Африкаансча",
	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"] = {
	"Аканче",
	28026,
	"alv-ctn",
	"Latn",
}

m["am"] = {
	"Амхарча",
	28244,
	"sem-eth",
	"Ethi",
	translit = "Ethi-translit",
}

m["an"] = {
	"Арагончо",
	8765,
	"roa-ibe",
	"Latn",
	ancestors = "roa-oan",
}

m["ar"] = {
	"Арабча",
	13955,
	"sem-arb",
	"Arab, Hebr, Syrc, Brai",
	translit = {Arab = "ar-translit"},
	entry_name = {Arab = "ar-entryname"},
	-- put Judeo-Arabic (Hebrew-script Arabic) under the category header
	-- U+FB21 HEBREW LETTER WIDE ALEF so that it sorts after Arabic script titles
	sort_key = {
		Hebr = {
			from = {"^%f[" .. u(0x5D0) .. "-" .. u(0x5EA) .. "]"},
			to = {u(0xFB21)},
		},
	},
}

m["as"] = {
	"Ассамча",
	29401,
	"inc-bas",
	"as-Beng",
	ancestors = "inc-mas",
	translit = "as-translit",
}

m["av"] = {
	"Аварикче",
	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"]},
	entry_name = {
		Cyrl = s["cau-Cyrl-entryname"],
		Latn = s["cau-Latn-entryname"],
	},
	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"] = {
	"Аймарача",
	4627,
	"sai-aym",
	"Latn",
}

m["az"] = {
	"Азербайжанча",
	9292,
	"trk-ogz",
	"Latn, Cyrl, fa-Arab",
	ancestors = "trk-oat",
	dotted_dotless_i = true,
	entry_name = {
		Latn = {
			from = {"ʼ"},
			to = {"'"},
		},
		["fa-Arab"] = {
			module = "ar-entryname",
			["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"] = {
	"Башкырча",
	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"] = {
	"Беларусча",
	9091,
	"zle",
	"Cyrl, Latn",
	ancestors = "zle-obe",
	translit = {Cyrl = "be-translit"},
	entry_name = {
		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]}
		},
	},
	standardChars = {
		Cyrl = "АаБбВвГгДдЕеЁёЖжЗзІіЙйКкЛлМмНнОоПпРрСсТтУуЎўФфХхЦцЧчШшЫыЬьЭэЮюЯя",
		Latn = "AaBbCcĆćČčDdEeFfGgHhIiJjKkLlŁłMmNnŃńOoPpRrSsŚśŠšTtUuŬŭVvYyZzŹźŽž",
		(c.punc:gsub("'", "")) -- Exclude apostrophe.
	},
}

m["bg"] = {
	"Болгарча",
	7918,
	"zls",
	"Cyrl",
	ancestors = "cu-bgm",
	translit = "bg-translit",
	entry_name = {
		remove_diacritics = c.grave .. c.acute,
		remove_exceptions = {"%f[^%z%s]ѝ%f[%z%s]"},
	},
	standardChars = "АаБбВвГгДдЕеЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЬьЮюЯя" .. c.punc,
}

m["bh"] = {
	"Бихариче",
	135305,
	"inc-eas",
	"Deva",
}

m["bi"] = {
	"Бисламача",
	35452,
	"crp",
	"Latn",
	ancestors = "en",
}

m["bm"] = {
	"Бамбарача",
	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"] = {
	"Тибетче",
	34271,
	"sit-tib",
	"Tibt", -- sometimes Deva?
	ancestors = "xct",
	translit = "Tibt-translit",
	override_translit = true,
	display_text = s["Tibt-displaytext"],
	entry_name = s["Tibt-entryname"],
	sort_key = "Tibt-sortkey",
}

m["br"] = {
	"Бретончо",
	12107,
	"cel-brs",
	"Latn",
	ancestors = "xbm",
	sort_key = {
		from = {"ch", "c['ʼ’]h"},
		to = {"c" .. p[1], "c" .. p[2]}
	},
}

m["ca"] = {
	"Каталанча",
	7026,
	"roa-ocr",
	"Latn",
	ancestors = "roa-oca",
	sort_key = {
		remove_diacritics = c.grave .. c.acute .. c.diaer .. c.cedilla,
		from = {"l·l"},
		to = {"ll"}
	},
	standardChars = "AaÀàBbCcÇçDdEeÉéÈèFfGgHhIiÍíÏïJjLlMmNnOoÓóÒòPpQqRrSsTtUuÚúÜüVvXxYyZz·" .. c.punc,
}

m["ce"] = {
	"Чеченча",
	33350,
	"cau-vay",
	"Cyrl, Latn, Arab",
	translit = {
		Cyrl = "cau-nec-translit",
		Arab = "ar-translit",
	},
	override_translit = true,
	display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
	entry_name = {
		Cyrl = s["cau-Cyrl-entryname"],
		Latn = s["cau-Latn-entryname"],
	},
	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"] = {
	"Чаморрочо",
	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"] = {
	"Корсиканча",
	33111,
	"roa-itd",
	"Latn",
	sort_key = {
		from = {"chj", "ghj", "sc", "sg"},
		to = {"c" .. p[1], "g" .. p[1], "s" .. p[1], "s" .. p[2]}
	},
	standardChars = "AaÀàBbCcDdEeÈèFfGgHhIiÌìÏïJjLlMmNnOoÒòPpQqRrSsTtUuÙùÜüVvZz" .. c.punc,
}

m["cr"] = {
	"Криче",
	33390,
	"alg",
	"Latn, Cans",
	translit = {Cans = "cr-translit"},
}

m["cs"] = {
	"Чехче",
	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]}
	},
	standardChars = "AaÁáBbCcČčDdĎďEeÉéĚěFfGgHhIiÍíJjKkLlMmNnŇňOoÓóPpRrŘřSsŠšTtŤťUuÚúŮůVvYyÝýZzŽž" .. c.punc,
}

m["cu"] = {
	"Чиркөө Славянча",
	35499,
	"zls",
	"Cyrs, Glag",
	translit = {Cyrs = "Cyrs-translit", Glag = "Glag-translit"},
	entry_name = {Cyrs = s["Cyrs-entryname"]},
	sort_key = {Cyrs = s["Cyrs-sortkey"]},
}

m["cv"] = {
	"Чувашча",
	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"] = {
	"Уелшче",
	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]}
	},
	standardChars = "ÂâAaBbCcDdEeÊêFfGgHhIiÎîLlMmNnOoÔôPpRrSsTtUuÛûWwŴŵYyŶŷ" .. c.punc,
}

m["da"] = {
	"Датча",
	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]}
	},
	standardChars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÆæØøÅå" .. c.punc,
}

m["de"] = {
	"Немисче",
	188,
	"gmw-hgm",
	"Latn, Latf",
	ancestors = "gmh",
	sort_key = {
		remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove,
		from = {"æ", "œ", "ß"},
		to = {"ae", "oe", "ss"}
	},
	standardChars = "AaÄäBbCcDdEeFfGgHhIiJjKkLlMmNnOoÖöPpQqRrSsẞßTtUuÜüVvWwXxYyZz" .. c.punc,
}

m["dv"] = {
	"Дивехиче",
	32656,
	"inc-ins",
	"Thaa, Diak",
	translit = {
		Thaa = "dv-translit",
		Diak = "Diak-translit",
	},
	override_translit = true,
}

m["dz"] = {
	"Жонгуча",
	33081,
	"sit-tib",
	"Tibt",
	ancestors = "xct",
	translit = "Tibt-translit",
	override_translit = true,
	display_text = s["Tibt-displaytext"],
	entry_name = s["Tibt-entryname"],
	sort_key = "Tibt-sortkey",
}

m["ee"] = {
	"Эбече",
	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"] = {
	"Грекче",
	9129,
	"grk",
	"Grek, Polyt, Brai",
	ancestors = "el-kth",
	translit = {
		Grek = "el-translit",
		Polyt = "grc-translit",
	},
	override_translit = true,
	entry_name = {
		Grek = {remove_diacritics = c.caron .. c.diaerbelow .. c.brevebelow},
		Polyt = s["Polyt-entryname"],
	},
	sort_key = {
		Grek = s["Grek-sortkey"],
		Polyt = s["Grek-sortkey"],
	},
	standardChars = {
		Grek = "΅·ͺ΄ΑαΆάΒβΓγΔδΕεέΈΖζΗηΉήΘθΙιΊίΪϊΐΚκΛλΜμΝνΞξΟοΌόΠπΡρΣσςΤτΥυΎύΫϋΰΦφΧχΨψΩωΏώ",
		Brai = c.braille,
		c.punc
	},
}

m["en"] = {
	"Англисче",
	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 entry names.
			from = {"æ", "🅱", "[¢©ᴄ]", "[ðđ]", "[əǝ]", "[ħʜ]", "ɨ", "ł", "[ŋɲ]", "[øɔ]", "œ", "ꝓ", "ß", "ʋ"},
			to = {"ae", "b", "c", "d", "e", "h", "i", "l", "n", "o", "oe", "p", "ss", "v"}
		},
	},
	standardChars = {
		Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",
		Brai = c.braille,
		c.punc
	},
}

m["eo"] = {
	"Эсперанточа",
	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]}
	},
	standardChars = "AaBbCcĈĉDdEeFfGgĜĝHhĤĥIiJjĴĵKkLlMmNnOoPpRrSsŜŝTtUuŬŭVvZz" .. c.punc,
}

m["es"] = {
	"Испанча",
	1321,
	"roa-ibe",
	"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"}
		},
	},
	standardChars = {
		Latn = "AaÁáBbCcDdEeÉéFfGgHhIiÍíJjLlMmNnÑñOoÓóPpQqRrSsTtUuÚúÜüVvXxYyZz",
		Brai = c.braille,
		c.punc
	},
}

m["et"] = {
	"Эстончо",
	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]
		}
	},
	standardChars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvÕõÄäÖöÜü" .. c.punc,
}

m["eu"] = {
	"Баскча",
	8752,
	"euq",
	"Latn",
	sort_key = {
		from = {"ç", "ñ"},
		to = {"c" .. p[1], "n" .. p[1]}
	},
	standardChars = "AaBbDdEeFfGgHhIiJjKkLlMmNnÑñOoPpRrSsTtUuXxZz" .. c.punc,
}

m["fa"] = {
	"Фарсча",
	9168,
	"ira-swi",
	"fa-Arab, Hebr",
	ancestors = "fa-cls",
	entry_name = {
		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,
	},
	-- put Judeo-Persian (Hebrew-script Persian) under the category header
	-- U+FB21 HEBREW LETTER WIDE ALEF so that it sorts after Arabic script titles
	sort_key = {
		Hebr = {
			from = {"^%f[" .. u(0x5D0) .. "-" .. u(0x5EA) .. "]"},
			to = {u(0xFB21)},
		},
	},
}

m["ff"] = {
	"Фулача",
	33454,
	"alv-fwo",
	"Latn, Adlm",
}

m["fi"] = {
	"Финче",
	1412,
	"urj-fin",
	"Latn",
	display_text = {
		from = {"'"},
		to = {"’"}
	},
	entry_name = { -- 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"}
	},
	standardChars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÄäÖö" .. c.punc,
}

m["fj"] = {
	"Фижиче",
	33295,
	"poz-pcc",
	"Latn",
}

m["fo"] = {
	"Фаросча",
	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]}
	},
	standardChars = "AaÁáBbDdÐðEeFfGgHhIiÍíJjKkLlMmNnOoÓóPpRrSsTtUuÚúVvYyÝýÆæØø" .. c.punc,
}

m["fr"] = {
	"Французча",
	150,
	"roa-oil",
	"Latn, Brai",
	display_text = {
		from = {"'"},
		to = {"’"}
	},
	entry_name = {
		from = {"’"},
		to = {"'"},
	},
	ancestors = "frm",
	sort_key = {Latn = s["roa-oil-sortkey"]},
	standardChars = {
		Latn = "AaÀàÂâBbCcÇçDdEeÉéÈèÊêËëFfGgHhIiÎîÏïJjLlMmNnOoÔôŒœPpQqRrSsTtUuÙùÛûÜüVvXxYyZz",
		Brai = c.braille,
		c.punc
	},
}

m["fy"] = {
	"Батыш Фризче",
	27175,
	"gmw-fri",
	"Latn",
	sort_key = {
		remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer,
		from = {"y"},
		to = {"i"}
	},
	standardChars = "AaâäàÆæBbCcDdEeéêëèFfGgHhIiïìYyỳJjKkLlMmNnOoôöòPpRrSsTtUuúûüùVvWwZz" .. c.punc,
}

m["ga"] = {
	"Ирландча",
	9142,
	"cel-gae",
	"Latn, Latg",
	ancestors = "mga",
	sort_key = {
		remove_diacritics = c.acute,
		from = {"ḃ", "ċ", "ḋ", "ḟ", "ġ", "ṁ", "ṗ", "ṡ", "ṫ"},
		to = {"bh", "ch", "dh", "fh", "gh", "mh", "ph", "sh", "th"}
	},
	standardChars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíLlMmNnOoÓóPpRrSsTtUuÚúVv" .. c.punc,
}

m["gd"] = {
	"Шотладиялык Гелча",
	9314,
	"cel-gae",
	"Latn, Latg",
	ancestors = "mga",
	sort_key = {remove_diacritics = c.grave .. c.acute},
	standardChars = "AaÀàBbCcDdEeÈèFfGgHhIiÌìLlMmNnOoÒòPpRrSsTtUuÙù" .. c.punc,
}

m["gl"] = {
	"Галисича",
	9307,
	"roa-ibe",
	"Latn",
	ancestors = "roa-opt",
	sort_key = {
		remove_diacritics = c.acute,
		from = {"ñ"},
		to = {"n" .. p[1]}
	},
	standardChars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíÏïLlMmNnÑñOoÓóPpQqRrSsTtUuÚúÜüVvXxZz" .. c.punc,
}

m["gn"] = {
	"Гуараш",
	35876,
	"tup-gua",
	"Latn",
}

m["gu"] = {
	"Гужаратча",
	5137,
	"inc-wes",
	"Arab, Gujr",
	ancestors = "inc-mgu",
	translit = {
		Gujr = "gu-translit",
	},
	entry_name = {
		remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.kasra .. c.shadda .. c.sukun .. "઼"
	},
}

m["gv"] = {
	"Мэнксыча",
	12175,
	"cel-gae",
	"Latn",
	ancestors = "mga",
	sort_key = {remove_diacritics = c.cedilla .. "-"},
	standardChars = "AaBbCcÇçDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwYy" .. c.punc,
}

m["ha"] = {
	"Хаусача",
	56475,
	"cdc-wst",
	"Latn, Arab",
	entry_name = {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"] = {
	"Ивритче",
	9288,
	"sem-can",
	"Hebr, Phnx, Brai",
	ancestors = "he-med",
	entry_name = {Hebr = {remove_diacritics = u(0x0591) .. "-" .. u(0x05BD) .. u(0x05BF) .. "-" .. u(0x05C5) .. u(0x05C7) .. c.CGJ}},
}

m["hi"] = {
	"Хиндиче",
	1568,
	"inc-hnd",
	"Deva, Kthi, Newa",
	translit = {Deva = "hi-translit"},
	standardChars = {
		Deva = "अआइईउऊएऐओऔकखगघङचछजझञटठडढणतथदधनपफबभमयरलवशषसहत्रज्ञक्षक़ख़ग़ज़झ़ड़ढ़फ़काखागाघाङाचाछाजाझाञाटाठाडाढाणाताथादाधानापाफाबाभामायारालावाशाषासाहात्राज्ञाक्षाक़ाख़ाग़ाज़ाझ़ाड़ाढ़ाफ़ाकिखिगिघिङिचिछिजिझिञिटिठिडिढिणितिथिदिधिनिपिफिबिभिमियिरिलिविशिषिसिहित्रिज्ञिक्षिक़िख़िग़िज़िझ़िड़िढ़िफ़िकीखीगीघीङीचीछीजीझीञीटीठीडीढीणीतीथीदीधीनीपीफीबीभीमीयीरीलीवीशीषीसीहीत्रीज्ञीक्षीक़ीख़ीग़ीज़ीझ़ीड़ीढ़ीफ़ीकुखुगुघुङुचुछुजुझुञुटुठुडुढुणुतुथुदुधुनुपुफुबुभुमुयुरुलुवुशुषुसुहुत्रुज्ञुक्षुक़ुख़ुग़ुज़ुझ़ुड़ुढ़ुफ़ुकूखूगूघूङूचूछूजूझूञूटूठूडूढूणूतूथूदूधूनूपूफूबूभूमूयूरूलूवूशूषूसूहूत्रूज्ञूक्षूक़ूख़ूग़ूज़ूझ़ूड़ूढ़ूफ़ूकेखेगेघेङेचेछेजेझेञेटेठेडेढेणेतेथेदेधेनेपेफेबेभेमेयेरेलेवेशेषेसेहेत्रेज्ञेक्षेक़ेख़ेग़ेज़ेझ़ेड़ेढ़ेफ़ेकैखैगैघैङैचैछैजैझैञैटैठैडैढैणैतैथैदैधैनैपैफैबैभैमैयैरैलैवैशैषैसैहैत्रैज्ञैक्षैक़ैख़ैग़ैज़ैझ़ैड़ैढ़ैफ़ैकोखोगोघोङोचोछोजोझोञोटोठोडोढोणोतोथोदोधोनोपोफोबोभोमोयोरोलोवोशोषोसोहोत्रोज्ञोक्षोक़ोख़ोग़ोज़ोझ़ोड़ोढ़ोफ़ोकौखौगौघौङौचौछौजौझौञौटौठौडौढौणौतौथौदौधौनौपौफौबौभौमौयौरौलौवौशौषौसौहौत्रौज्ञौक्षौक़ौख़ौग़ौज़ौझ़ौड़ौढ़ौफ़ौक्ख्ग्घ्ङ्च्छ्ज्झ्ञ्ट्ठ्ड्ढ्ण्त्थ्द्ध्न्प्फ्ब्भ्म्य्र्ल्व्श्ष्स्ह्त्र्ज्ञ्क्ष्क़्ख़्ग़्ज़्झ़्ड़्ढ़्फ़्।॥०१२३४५६७८९॰",
		c.punc
	},
}

m["ho"] = {
	"Хири Моту",
	33617,
	"crp",
	"Latn",
	ancestors = "meu",
}

m["ht"] = {
	"Гаитиче",
	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"] = {
	"Мажарча",
	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],
			}
		},
	},
	standardChars = {
		Latn = "AaÁáBbCcDdEeÉéFfGgHhIiÍíJjKkLlMmNnOoÓóÖöŐőPpQqRrSsTtUuÚúÜüŰűVvWwXxYyZz",
		c.punc
	},
}

m["hy"] = {
	"Армянча",
	8785,
	"hyx",
	"Armn, Brai",
	ancestors = "axm",
	translit = {Armn = "Armn-translit"},
	override_translit = true,
	entry_name = {
		Armn = {
			remove_diacritics = "՛՜՞՟",
			from = {"եւ", "<sup>յ</sup>", "<sup>ի</sup>", "<sup>է</sup>", "յ̵", "ՙ", "՚"},
			to = {"և", "յ", "ի", "է", "ֈ", "ʻ", "’"}
		},
	},
	sort_key = {
		Armn = {
			from = {
				"ու", "եւ", -- 2 chars
				"և" -- 1 char
			},
			to = {
				"ւ", "եվ",
				"եվ"
			}
		},
	},
}

m["hz"] = {
	"Герерочо",
	33315,
	"bnt-swb",
	"Latn",
}

m["ia"] = {
	"Интерлингва",
	35934,
	"art",
	"Latn",
}

m["id"] = {
	"Индонезияча",
	9240,
	"poz-mly",
	"Latn",
	ancestors = "ms",
	standardChars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" .. c.punc,
}

m["ie"] = {
	"Интерлингүде",
	35850,
	"art",
	"Latn",
	type = "appendix-constructed",
	entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ},
}

m["ig"] = {
	"Игбочо",
	33578,
	"alv-igb",
	"Latn",
	entry_name = {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"] = {
	"Нуосучо",
	34235,
	"tbq-nlo",
	"Yiii",
	translit = "ii-translit",
}

m["ik"] = {
	"Инупиакче",
	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"] = {
	"Идо",
	35224,
	"art",
	"Latn",
}

m["is"] = {
	"Исландча",
	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]}
	},
	standardChars = "AaÁáBbDdÐðEeÉéFfGgHhIiÍíJjKkLlMmNnOoÓóPpRrSsTtUuÚúVvXxYyÝýÞþÆæÖö" .. c.punc,
}

m["it"] = {
	"Италияча",
	652,
	"roa-itd",
	"Latn",
	ancestors = "roa-oit",
	sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove},
	standardChars = "AaÀàBbCcDdEeÈèÉéFfGgHhIiÌìLlMmNnOoÒòPpQqRrSsTtUuÙùVvZz" .. c.punc,
}

m["iu"] = {
	"Инуктитутча",
	29921,
	"esx-inu",
	"Cans, Latn",
	translit = {Cans = "cr-translit"},
	override_translit = true,
}

m["ja"] = {
	"Жапончо",
	5287,
	"jpx",
	"Jpan, Latn, Brai",
	ancestors = "ja-ear",
	translit = s["jpx-translit"],
	link_tr = true,
	display_text = s["jpx-displaytext"],
	entry_name = s["jpx-entryname"],
	sort_key = s["jpx-sortkey"],
}

m["jv"] = {
	"Жаванизче",
	33549,
	"poz",
	"Latn, Java",
	ancestors = "kaw",
	translit = {Java = "jv-translit"},
	link_tr = true,
	entry_name = {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"] = {
	"Грузинче",
	8108,
	"ccs-gzn",
	"Geor, Geok, Hebr", -- Hebr is used to write Judeo-Georgian
	ancestors = "ka-mid",
	translit = {
		Geor = "Geor-translit",
		Geok = "Geok-translit",
	},
	override_translit = true,
	entry_name = {remove_diacritics = c.circ},
}

m["kg"] = {
	"Конго",
	33702,
	"bnt-kng",
	"Latn",
}

m["ki"] = {
	"Кикуйиче",
	33587,
	"bnt-kka",
	"Latn",
}

m["kj"] = {
	"Кванямача",
	1405077,
	"bnt-ova",
	"Latn",
}

m["kk"] = {
	"Казакча",
	9252,
	"trk-kno",
	"Cyrl, Latn, kk-Arab",
	translit = {
		Cyrl = {
			from = {
				"Ё", "ё", "Й", "й", "Нг", "нг", "Ӯ", "ӯ", -- 2 chars; are "Ӯ" and "ӯ" actually used?
				"А", "а", "Ә", "ә", "Б", "б", "В", "в", "Г", "г", "Ғ", "ғ", "Д", "д", "Е", "е", "Ж", "ж", "З", "з", "И", "и", "К", "к", "Қ", "қ", "Л", "л", "М", "м", "Н", "н", "Ң", "ң", "О", "о", "Ө", "ө", "П", "п", "Р", "р", "С", "с", "Т", "т", "У", "у", "Ұ", "ұ", "Ү", "ү", "Ф", "ф", "Х", "х", "Һ", "һ", "Ц", "ц", "Ч", "ч", "Ш", "ш", "Щ", "щ", "Ъ", "ъ", "Ы", "ы", "І", "і", "Ь", "ь", "Э", "э", "Ю", "ю", "Я", "я", -- 1 char
			},
			to = {
				"E", "e", "İ", "i", "Ñ", "ñ", "U", "u",
				"A", "a", "Ä", "ä", "B", "b", "V", "v", "G", "g", "Ğ", "ğ", "D", "d", "E", "e", "J", "j", "Z", "z", "İ", "i", "K", "k", "Q", "q", "L", "l", "M", "m", "N", "n", "Ñ", "ñ", "O", "o", "Ö", "ö", "P", "p", "R", "r", "S", "s", "T", "t", "U", "u", "Ū", "ū", "Ü", "ü", "F", "f", "X", "x", "H", "h", "S", "s", "Ç", "ç", "Ş", "ş", "Ş", "ş", "", "", "Y", "y", "I", "ı", "", "", "É", "é", "Ü", "ü", "Ä", "ä",
			}
		}
	},
--	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]}
		},
	},
	standardChars = {
		Cyrl = "АаӘәБбВвГгҒғДдЕеЁёЖжЗзИиЙйКкҚқЛлМмНнҢңОоӨөПпРрСсТтУуҰұҮүФфХхҺһЦцЧчШшЩщЪъЫыІіЬьЭэЮюЯя",
		c.punc
	},
}

m["kl"] = {
	"Калаалисутча",
	25355,
	"esx-inu",
	"Latn",
	sort_key = {
		from = {"æ", "ø", "å"},
		to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
	}
}

m["km"] = {
	"Кмерче",
	9205,
	"mkh-kmr",
	"Khmr",
	ancestors = "xhm",
	translit = "km-translit",
}

m["kn"] = {
	"Каннадача",
	33673,
	"dra-kan",
	"Knda, Tutg",
	ancestors = "dra-mkn",
	translit = "kn-translit",
}

m["ko"] = {
	"Корейче",
	9176,
	"qfa-kor",
	"Kore, Brai",
	ancestors = "ko-ear",
	translit = {Kore = "ko-translit"},
	entry_name = {Kore = s["Kore-entryname"]},
}

m["kr"] = {
	"Канури",
	36094,
	"ssa-sah",
	"Latn, Arab",
	entry_name = {Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.breve}}, -- the sortkey and entry_name are only for standard Kanuri; when dialectal entries get added, someone will have to work out how the dialects should be represented orthographically
	sort_key = {
		Latn = {
			from = {"ǝ", "ny", "ɍ", "sh"},
			to = {"e" .. p[1], "n" .. p[1], "r" .. p[1], "s" .. p[1]}
		},
	},
}

m["ks"] = {
	"Кашмирче",
	33552,
	"inc-kas",
	"ks-Arab, Deva, Shrd, Latn",
	translit = {
		["ks-Arab"] = "ks-Arab-translit",
		Deva = "ks-Deva-translit",
		Shrd = "Shrd-translit",
	},
}

-- "kv" IS TREATED AS "koi", "kpv", SEE WT:LT

m["kw"] = {
	"Корнишче",
	25289,
	"cel-brs",
	"Latn",
	ancestors = "cnx",
	sort_key = {
		from = {"ch"},
		to = {"c" .. p[1]}
	},
}

m["ky"] = {
	"Кыргызча",
	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"] = {
	"Латынча",
	397,
	"itc",
	"Latn, Ital",
	ancestors = "itc-ola",
	entry_name = {Latn = {remove_diacritics = c.macron .. c.breve .. c.diaer .. c.dinvbreve}},
	sort_key = {
		remove_diacritics = c.circ .. c.tilde .. c.macron .. c.diaer .. c.zigzag .. c.dmacron .. c.dtilde .. c.small_a .. c.small_e .. c.small_i .. c.small_o .. c.small_u, -- Medieval abbreviations.
		Latn = {
			from = {"æ", "œ", "[ꝑꝓ]"},
			to = {"ae", "oe", "p"}
		},
	},
	standardChars = {
		Latn = "AaBbCcDdEeFfGgHhIiLlMmNnOoPpQqRrSsTtUuVvXxZz",
		c.punc
	},
}

m["lb"] = {
	"Люксембургча",
	9051,
	"gmw-hgm",
	"Latn",
	ancestors = "gmw-cfr",
	sort_key = {
		from = {"ä", "ë", "é"},
		to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
	},
}

m["lg"] = {
	"Лугандача",
	33368,
	"bnt-nyg",
	"Latn",
	entry_name = {remove_diacritics = c.acute .. c.circ},
	sort_key = {
		from = {"ŋ"},
		to = {"n" .. p[1]}
	},
}

m["li"] = {
	"Лимбургиче",
	102172,
	"gmw-frk",
	"Latn",
	ancestors = "dum",
}

m["ln"] = {
	"Лингалача",
	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"] = {
	"Лаосчо",
	9211,
	"tai-swe",
	"Laoo",
	translit = "lo-translit",
	sort_key = "Laoo-sortkey",
	standardChars = "0-9ກຂຄງຈຊຍດຕຖທນບປຜຝພຟມຢຣລວສຫອຮຯ-ໝ" .. c.punc,
}

m["lt"] = {
	"Литовчо",
	9083,
	"bat-eas",
	"Latn",
	ancestors = "olt",
	entry_name = {remove_diacritics = c.grave .. c.acute .. c.tilde},
	sort_key = {
		from = {"ą", "č", "ę", "ė", "į", "y", "š", "ų", "ū", "ž"},
		to = {"a" .. p[1], "c" .. p[1], "e" .. p[1], "e" .. p[2], "i" .. p[1], "i" .. p[2], "s" .. p[1], "u" .. p[1], "u" .. p[2], "z" .. p[1]}
	},
	standardChars = "AaĄąBbCcČčDdEeĘęĖėFfGgHhIiĮįYyJjKkLlMmNnOoPpRrSsŠšTtUuŲųŪūVvZzŽž" .. c.punc,
}

m["lu"] = {
	"Люба-Катанга",
	36157,
	"bnt-lub",
	"Latn",
}

m["lv"] = {
	"Латышча",
	9078,
	"bat-eas",
	"Latn",
	entry_name = {
		-- 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]}
	},
	standardChars = "AaĀāBbCcČčDdEeĒēFfGgĢģHhIiĪīJjKkĶķLlĻļMmNnŅņOoPpRrSsŠšTtUuŪūVvZzŽž" .. c.punc,
}

m["mg"] = {
	"Малагасча",
	7930,
	"poz-bre",
	"Latn",
}

m["mh"] = {
	"Маршаллче",
	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"] = {
	"Маориче",
	36451,
	"poz-pep",
	"Latn",
	sort_key = {
		remove_diacritics = c.macron,
		from = {"ng", "wh"},
		to = {"z" .. p[1], "z" .. p[2]}
	},
}

m["mk"] = {
	"Македонча",
	9296,
	"zls",
	"Cyrl, Grek",
	ancestors = "cu",
	translit = {Cyrl = "mk-translit"},
	entry_name = {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]}
	}},
	standardChars = {
		Cyrl = "АаБбВвГгДдЃѓЕеЖжЗзЅѕИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЌќУуФфХхЦцЧчЏџШш",
		c.punc
	},
}

m["ml"] = {
	"Малайаламча",
	36236,
	"dra-mal",
	"Mlym",
	translit = "ml-translit",
	override_translit = true,
}

m["mn"] = {
	"Моңголчо",
	9246,
	"xgn-cen",
	"Cyrl, Mong, Latn, Brai",
	ancestors = "cmg",
	translit = {
		Cyrl = "mn-translit",
		Mong = "Mong-translit",
	},
	override_translit = true,
	display_text = {Mong = s["Mong-displaytext"]},
	entry_name = {
		Cyrl = {remove_diacritics = c.grave .. c.acute},
		Mong = s["Mong-entryname"],
	},
	sort_key = {
		Cyrl = {
			remove_diacritics = c.grave,
			from = {"ё", "ө", "ү"},
			to = {"е" .. p[1], "о" .. p[1], "у" .. p[1]}
		},
	},
	standardChars = {
		Cyrl = "АаБбВвГгДдЕеЁёЖжЗзИиЙйЛлМмНнОоӨөРрСсТтУуҮүХхЦцЧчШшЫыЬьЭэЮюЯя—",
		Brai = c.braille,
		c.punc
	},
}

-- "mo" IS TREATED AS "ro", SEE WT:LT

m["mr"] = {
	"Маратиче",
	1571,
	"inc-sou",
	"Deva, Modi",
	ancestors = "omr",
	translit = {
		Deva = "mr-translit",
		Modi = "mr-Modi-translit",
	},
	entry_name = {
		Deva = {
			from = {"च़", "ज़", "झ़"},
			to = {"च", "ज", "झ"}
		},
	},
}

m["ms"] = {
	"Малайча",
	9237,
	"poz-mly",
	"Latn, ms-Arab",
	ancestors = "ms-cla",
	standardChars = {
		Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",
		c.punc
	},
}

m["mt"] = {
	"Малтизче",
	9166,
	"sem-arb",
	"Latn",
	display_text = {
		from = {"'"},
		to = {"’"}
	},
	entry_name = {
		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"] = {
	"Бурмача",
	9228,
	"tbq-brm",
	"Mymr",
	ancestors = "obr",
	translit = "my-translit",
	override_translit = true,
	sort_key = {
		from = {"ျ", "ြ", "ွ", "ှ", "ဿ"},
		to = {"္ယ", "္ရ", "္ဝ", "္ဟ", "သ္သ"}
	},
}

m["na"] = {
	"Науруче",
	13307,
	"poz-mic",
	"Latn",
}

m["nb"] = {
	"Норвежче (Бокмал)",
	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"],
	standardChars = s["no-standardchars"],
}

m["nd"] = {
	"Түндүк Ндебеле",
	35613,
	"bnt-ngu",
	"Latn",
	entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}

m["ne"] = {
	"Непалча",
	33823,
	"inc-pah",
	"Deva, Newa",
	translit = {Deva = "ne-translit"},
}

m["ng"] = {
	"Ндонга",
	33900,
	"bnt-ova",
	"Latn",
}

m["nl"] = {
	"Голландча",
	7411,
	"gmw-frk",
	"Latn, Brai",
	ancestors = "dum",
	sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.ringabove .. c.cedilla .. "'"},
	standardChars = {
		Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",
		Brai = c.braille,
		c.punc
	},
}

m["nn"] = {
	"Норвежче (Нүнорск)",
	25164,
	"gmq-wes",
	"Latn",
	ancestors = "gmq-mno",
	entry_name = {
		remove_diacritics = c.grave .. c.acute,
	},
	sort_key = s["no-sortkey"],
	standardChars = s["no-standardchars"],
}

m["no"] = {
	"Норвежче",
	9043,
	"gmq-wes",
	"Latn",
	ancestors = "gmq-mno",
	sort_key = s["no-sortkey"],
	standardChars = s["no-standardchars"],
}

m["nr"] = {
	"Түштүк Ндебеле",
	36785,
	"bnt-ngu",
	"Latn",
	entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}

m["nv"] = {
	"Наваджочо",
	13310,
	"apa",
	"Latn",
	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"] = {
	"Ньянджача",
	33273,
	"bnt-nys",
	"Latn",
	entry_name = {remove_diacritics = c.acute .. c.circ},
	sort_key = {
		from = {"ng'"},
		to = {"ng"}
	},
}

m["oc"] = {
	"Окситанче",
	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"}
		},
	},
}

m["oj"] = {
	"Оджибвече",
	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"] = {
	"Оромочо",
	33864,
	"cus-eas",
	"Latn, Ethi",
}

m["or"] = {
	"Орияча",
	33810,
	"inc-eas",
	"Orya",
	ancestors = "inc-mor",
	translit = "or-translit",
}

m["os"] = {
	"Осетинче",
	33968,
	"xsc",
	"Cyrl, Geor, Latn",
	ancestors = "oos",
	translit = {
		Cyrl = "os-translit",
		Geor = "Geor-translit",
	},
	override_translit = true,
	display_text = {
		Cyrl = {
			from = {"æ"},
			to = {"ӕ"}
		},
		Latn = {
			from = {"ӕ"},
			to = {"æ"}
		},
	},
	entry_name = {
		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"] = {
	"Панжабче",
	58635,
	"inc-pan",
	"Guru, pa-Arab",
	ancestors = "inc-opa",
	translit = {
		Guru = "Guru-translit",
		["pa-Arab"] = "pa-Arab-translit",
	},
	entry_name = {
		["pa-Arab"] = {
			remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna,
			from = {"ݨ", "ࣇ"},
			to = {"ن", "ل"}
		},
	},
}

m["pi"] = {
	"Паличе",
	36727,
	"inc-mid",
	"Latn, Brah, Deva, Beng, Sinh, Mymr, Thai, Lana, Laoo, Khmr, Cakm", --and also Khom
	ancestors = "sa",
	translit = {
		Brah = "Brah-translit",
		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",
	},
	entry_name = {
		Thai = {
			from = {"ึ", u(0xF700), u(0xF70F)}, -- FIXME: Not clear what's going on with the PUA characters here.
			to = {"ิํ", "ฐ", "ญ"}
		},
		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"] = {
	"Полякча",
	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]}
	},
	standardChars = "AaĄąBbCcĆćDdEeĘęFfGgHhIiJjKkLlŁłMmNnŃńOoÓóPpRrSsŚśTtUuWwYyZzŹźŻż" .. c.punc,
}

m["ps"] = {
	"Пуштунча",
	58680,
	"ira-pat",
	"ps-Arab",
	entry_name = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef},
}

m["pt"] = {
	"Португалияча",
	5146,
	"roa-ibe",
	"Latn, Brai",
	ancestors = "roa-opt",
	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"}
		},
	},
	standardChars = {
		Latn = "AaÁáÂâÃãBbCcÇçDdEeÉéÊêFfGgHhIiÍíJjLlMmNnOoÓóÔôÕõPpQqRrSsTtUuÚúVvXxZz",
		Brai = c.braille,
		c.punc
	},
}

m["qu"] = {
	"Кечуача",
	5218,
	"qwe",
	"Latn",
}

m["rm"] = {
	"Ретороманче",
	13199,
	"roa-rhe",
	"Latn",
	sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.small_e},
}

m["ro"] = {
	"Румынча",
	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]}
		},
	},
	standardChars = {
		Latn = "AaĂăÂâBbCcDdEeFfGgHhIiÎîJjLlMmNnOoPpRrSsȘșTtȚțUuVvXxZz",
		Cyrl = "АаБбВвГгДдЕеЖжӁӂЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЫыЬьЭэЮюЯя",
		c.punc
	},
}

m["ru"] = {
	"Орусча",
	7737,
	"zle",
	"Cyrl, Brai",
	ancestors = "zle-mru",
	translit = {Cyrl = "ru-translit"},
	display_text = {
		from = {"'"},
		to = {"’"}
	},
	entry_name = {
		remove_diacritics = c.grave .. c.acute .. c.diaer,
		remove_exceptions = {"Ё", "ё", "Ѣ̈", "ѣ̈", "Я̈", "я̈"},
		from = {"’"},
		to = {"'"},
	},
	sort_key = {
		remove_diacritics = c.grave .. c.acute .. c.diaer,
		remove_exceptions = {"ё", "ѣ̈", "я̈"},
		from = {
			"ё", "ѣ̈", "я̈", -- 2 chars
			"і", "ѣ", "ѳ", "ѵ" -- 1 char
		},
		to = {
			"е" .. p[1], "ь" .. p[2], "я" .. p[1],
			"и" .. p[1], "ь" .. p[1], "я" .. p[2], "я" .. p[3]
		}
	},
	standardChars = {
		Cyrl = "АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя—",
		Brai = c.braille,
		(c.punc:gsub("'", "")) -- Exclude apostrophe.
	},
}

m["rw"] = {
	"Руандача",
	3217514,
	"bnt-glb",
	"Latn",
	entry_name = {remove_diacritics = c.acute .. c.circ .. c.macron .. c.caron},
}

m["sa"] = {
	"Санскритче",
	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 = "Brah-translit",
		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 = "Mong-translit",
		["mnc-Mong"] = "mnc-translit",
		["xwo-Mong"] = "xal-translit",
		Mymr = "pi-translit",
		Orya = "sa-Orya-translit",
		Shrd = "Shrd-translit",
		Sidd = "Sidd-translit",
		Sinh = "si-translit",
		Taml = "sa-Taml-translit",
		Telu = "sa-Telu-translit",
		Thai = "pi-translit",
		Tibt = "Tibt-translit",
	},
	display_text = {
		Mong = s["Mong-displaytext"],
		Tibt = s["Tibt-displaytext"],
	},
	entry_name = {
		Mong = s["Mong-entryname"],
		Tibt = s["Tibt-entryname"],
		Thai = {
			from = {"ึ", u(0xF700), u(0xF70F)}, -- FIXME: Not clear what's going on with the PUA characters here.
			to = {"ิํ", "ฐ", "ญ"}
		},
		remove_diacritics = c.VS01 .. c.udatta .. c.anudatta
	},
	sort_key = {
		Tibt = "Tibt-sortkey",
		{ -- 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~", "l~~", "m~", "n~", "n~~", "n~~~", "r~", "r~~", "s~", "s~~", "t~", "%2%1", "%2%1", "ᩈ᩠ᩈ", "᩠ᩁ", "᩠ᩃ", "ᨦ᩠", "%1᩠ᨮ", "%1᩠ᨻ", "ᩣ"},
		},
	},
}

m["sc"] = {
	"Сардинче",
	33976,
	"roa",
	"Latn",
}

m["sd"] = {
	"Синдхиче",
	33997,
	"inc-snd",
	"sd-Arab, Deva, Sind, Khoj",
	translit = {Sind = "Sind-translit"},
	entry_name = {
		["sd-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"] = {
	"Түндүк Саамиче",
	33947,
	"smi",
	"Latn",
	display_text = {
		from = {"'"},
		to = {"ˈ"}
	},
	entry_name = {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]}
	},
	standardChars = "AaÁáBbCcČčDdĐđEeFfGgHhIiJjKkLlMmNnŊŋOoPpRrSsŠšTtŦŧUuVvZzŽž" .. c.punc,
}

m["sg"] = {
	"Сангочо",
	33954,
	"crp",
	"Latn",
	ancestors = "ngb",
}

m["sh"] = {
	"Серб-хорватче",
	9301,
	"zls",
	"Latn, Cyrl, Glag",
	ietf_subtag = "hbs", -- ISO 639-3 code, since "sh" is deprecated from ISO 639-1
	wikimedia_codes = "sh, bs, hr, sr",
	entry_name = {
		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]}
		},
	},
	standardChars = {
		Latn = "AaBbCcČčĆćDdĐđEeFfGgHhIiJjKkLlMmNnOoPpRrSsŠšTtUuVvZzŽž",
		Cyrl = "АаБбВвГгДдЂђЕеЖжЗзИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЋћУуФфХхЦцЧчЏџШш",
		c.punc
	},
}

m["si"] = {
	"Сингалача",
	13267,
	"inc-ins",
	"Sinh",
	translit = "si-translit",
	override_translit = true,
}

m["sk"] = {
	"Словакча",
	9058,
	"zlw",
	"Latn",
	ancestors = "zlw-osk",
	sort_key = {remove_diacritics = c.acute .. c.circ .. c.diaer .. c.caron},
	standardChars = "AaÁáÄäBbCcČčDdĎďEeFfGgHhIiÍíJjKkLlĹ弾MmNnŇňOoÔôPpRrŔŕSsŠšTtŤťUuÚúVvYyÝýZzŽž" .. c.punc,
}

m["sl"] = {
	"Словенче",
	9063,
	"zls",
	"Latn",
	entry_name = {
		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]},
	},
	standardChars = "AaBbCcČčDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsŠšTtUuVvZzŽž" .. c.punc,
}

m["sm"] = {
	"Самоача",
	34011,
	"poz-pnp",
	"Latn",
}

m["sn"] = {
	"Шонача",
	34004,
	"bnt-sho",
	"Latn",
	entry_name = {remove_diacritics = c.acute},
}

m["so"] = {
	"Сомаличе",
	13275,
	"cus-som",
	"Latn, Arab, Osma",
	entry_name = {Latn = {remove_diacritics = c.grave .. c.acute .. c.circ}},
}

m["sq"] = {
	"Албанча",
	8748,
	"sqj",
	"Latn, Grek, ota-Arab, Elba, Todr, Vith",
	translit = {Elba = "Elba-translit"},
	entry_name = {Latn = {
		remove_diacritics = c.acute,
		from = {'^[ie] (%w)', '^të (%w)'}, to = {'%1', '%1'},
	}},
	sort_key = {Latn = {
		remove_diacritics = c.acute .. c.circ .. c.tilde .. c.breve .. c.caron,
		from = {'ç', 'dh', 'ë', 'gj', 'll', 'nj', 'rr', 'sh', 'th', 'xh', 'zh'},
		to = {'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]},
	}},
	standardChars = {
		Latn = "AaBbCcÇçDdEeËëFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvXxYyZz",
		c.punc
	},
}

m["ss"] = {
	"Сватиче",
	34014,
	"bnt-ngu",
	"Latn",
	entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}

m["st"] = {
	"Соточо",
	34340,
	"bnt-sts",
	"Latn",
	entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}

m["su"] = {
	"Сунданча",
	34002,
	"poz-msa",
	"Latn, Sund",
	ancestors = "osn",
	translit = {Sund = "su-translit"},
}

m["sv"] = {
	"Шведче",
	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 = {"o", "ae", "oe", "ss", "z" .. p[1], "ä", "ö"}
	},
	standardChars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvXxYyÅåÄäÖö" .. c.punc,
}

m["sw"] = {
	"Суахиличе",
	7838,
	"bnt-swh",
	"Latn, Arab",
	sort_key = {
		Latn = {
			from = {"ng'"},
			to = {"ng" .. p[1]}
		},
	},
}

m["ta"] = {
	"Тамилче",
	5885,
	"dra-tam",
	"Taml",
	ancestors = "ta-mid",
	translit = "ta-translit",
	override_translit = true,
}

m["te"] = {
	"Телугуча",
	8097,
	"dra-tel",
	"Telu",
	translit = "te-translit",
	override_translit = true,
}

m["tg"] = {
	"Тажыкча",
	9260,
	"ira-swi",
	"Cyrl, fa-Arab, Latn",
	ancestors = "fa-cls",
	translit = {Cyrl = "tg-translit"},
	override_translit = true,
	entry_name = {remove_diacritics = c.grave .. c.acute},
	sort_key = {
		Cyrl = {
			from = {"ғ", "ё", "ӣ", "қ", "ӯ", "ҳ", "ҷ"},
			to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "к" .. p[1], "у" .. p[1], "х" .. p[1], "ч" .. p[1]}
		},
	},
}

m["th"] = {
	"Тайча",
	9217,
	"tai-swe",
	"Thai, Brai", --and also Khom
	translit = {Thai = "th-translit"},
	sort_key = {Thai = "Thai-sortkey"},
}

m["ti"] = {
	"Тигриниача",
	34124,
	"sem-eth",
	"Ethi",
	translit = "Ethi-translit",
}

m["tk"] = {
	"Түркмөнчө",
	9267,
	"trk-ogz",
	"Latn, Cyrl, Arab",
	entry_name = {remove_diacritics = c.macron},
	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]}
		},
	},
}

m["tl"] = {
	"Тагалогчо",
	34057,
	"phi",
	"Latn, Tglg",
	translit = {Tglg = "tl-translit"},
	override_translit = true,
	entry_name = {Latn = {remove_diacritics = c.grave .. c.acute .. c.circ}},
	standardChars = {
		Latn = "AaBbKkDdEeGgHhIiLlMmNnOoPpRrSsTtUuWwYy",
		c.punc
	},
	sort_key = {
		Latn = "tl-sortkey",
	},
}

m["tn"] = {
	"Чуанача",
	34137,
	"bnt-sts",
	"Latn",
}

m["to"] = {
	"Тонганча",
	34094,
	"poz-ton",
	"Latn",
	entry_name = {remove_diacritics = c.acute},
	sort_key = {remove_diacritics = c.macron},
}

m["tr"] = {
	"Түркчө",
	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]
		}
	},
	standardChars = "AaÂâBbCcÇçDdEeFfGgĞğHhIıİiÎîJjKkLlMmNnOoÖöPpRrSsŞşTtUuÛûÜüVvYyZz" .. c.punc,
}

m["ts"] = {
	"Тсонгача",
	34327,
	"bnt-tsr",
	"Latn",
}

m["tt"] = {
	"Татарча",
	25285,
	"trk-kbu",
	"Cyrl, Latn, tt-Arab",
	translit = {Cyrl = "tt-translit"},
	override_translit = true,
	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"] = {
	"Таитиче",
	34128,
	"poz-pep",
	"Latn",
}

m["ug"] = {
	"Уйгурча",
	13263,
	"trk-kar",
	"ug-Arab, Latn, Cyrl",
	ancestors = "chg",
	translit = {
		["ug-Arab"] = "ug-translit",
		Cyrl = "ug-translit",
	},
	override_translit = true,
}

m["uk"] = {
	"Украинче",
	8798,
	"zle",
	"Cyrl",
	ancestors = "zle-ouk",
	translit = "uk-translit",
	entry_name = {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]
		}
	},
	standardChars = "АаБбВвГгДдЕеЄєЖжЗзИиІіЇїЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЬьЮюЯя" .. c.punc:gsub("'", ""),  -- Exclude apostrophe.
}

m["ur"] = {
	"Урдуча",
	1617,
	"inc-hnd",
	"ur-Arab,Hebr",
	translit = {["ur-Arab"] = "ur-translit"},
	entry_name = {
		-- 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
	},
	-- put Judeo-Urdu (Hebrew-script Urdu) under the category header
	-- U+FB21 HEBREW LETTER WIDE ALEF so that it sorts after Arabic script titles
	sort_key = {
		from = {"^%f[" .. u(0x5D0) .. "-" .. u(0x5EA) .. "]"},
		to = {u(0xFB21)},
	},
	standardChars = "ایببپتثجچحخدذرزژسشصضطظعغفقکگلࣇڷمنݨوؤہھئٹڈڑآے" .. c.punc,
}

m["uz"] = {
	"Өзбекче",
	9264,
	"trk-kar",
	"Latn, Cyrl, fa-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]}
		},
	},
}

m["ve"] = {
	"Вендача",
	32704,
	"bnt-bso",
	"Latn",
}

m["vi"] = {
	"Виетнамче",
	9199,
	"mkh-vie",
	"Latn, Hani",
	ancestors = "mkh-mvi",
	sort_key = {
		Latn = "vi-sortkey",
		Hani = "Hani-sortkey",
	},
}

m["vo"] = {
	"Волапюкча",
	36986,
	"art",
	"Latn",
}

m["wa"] = {
	"Валлончо",
	34219,
	"roa-oil",
	"Latn",
	sort_key = s["roa-oil-sortkey"],
}

m["wo"] = {
	"Уолофчо",
	34257,
	"alv-fwo",
	"Latn, Arab, Gara",
}

m["xh"] = {
	"Хосача",
	13218,
	"bnt-ngu",
	"Latn",
	entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}

m["yi"] = {
	"Идишче",
	8641,
	"gmw-hgm",
	"Hebr",
	ancestors = "gmh",
	translit = "yi-translit",
	sort_key = {
		from = {"א[ַָ]", "בּ", "ו[ֹּ]", "יִ", "ײַ", "פֿ"},
		to = {"א", "ב", "ו", "י", "יי", "פ"}
	},
}

m["yo"] = {
	"Йорубача",
	34311,
	"alv-yor",
	"Latn, Arab",
	entry_name = {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"] = {
	"Чжуанче",
	13216,
	"tai",
	"Latn, Hani",
	sort_key = {
		Latn = "za-sortkey",
		Hani = "Hani-sortkey",
	},
}

m["zh"] = {
	"Кытайча",
	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"] = {
	"Зулуча",
	10179,
	"bnt-ngu",
	"Latn",
	entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}

return m_lang.finalizeLanguageData(m_lang.addDefaultTypes(m, true))