Modul:data consistency check

Rövidítése(i):
WT:DATACHECK
WT:FSCK

This module checks the validity and internal consistency of the language, language family, and script data used on Wiktionary: the modules in Category:Language data modules as well as Module:scripts/data.

Output szerkesztés

Discrepancies detected:

Module:families/data

Module:languages/canonical names

  • The canonical name ős-khasian (aav-khs-pro) is missing.
  • proto-khasian, the canonical name for the code aav-khs-pro, is wrong; it should be ős-khasian.
  • The canonical name ős-nicobarese (aav-nic-pro) is missing.
  • proto-nicobarese, the canonical name for the code aav-nic-pro, is wrong; it should be ős-nicobarese.
  • proto-pnar-khasi-lyngngam, the canonical name for the code aav-pkl-pro, is wrong; it should be ős-pnar-khasi-lyngngam.
  • The canonical name ős-pnar-khasi-lyngngam (aav-pkl-pro) is missing.
  • proto-austroasiatic, the canonical name for the code aav-pro, is wrong; it should be ős-austroasiatic.
  • The canonical name ős-austroasiatic (aav-pro) is missing.
  • The canonical name ős-afro-asiatic (afa-pro) is missing.
  • proto-afro-asiatic, the canonical name for the code afa-pro, is wrong; it should be ős-afro-asiatic.
  • proto-algonquian, the canonical name for the code alg-pro, is wrong; it should be ős-algonquian.
  • The canonical name ős-algonquian (alg-pro) is missing.
  • proto-bua, the canonical name for the code alv-bua-pro, is wrong; it should be ős-bua.
  • The canonical name ős-bua (alv-bua-pro) is missing.
  • proto-cangin, the canonical name for the code alv-cng-pro, is wrong; it should be ős-cangin.
  • The canonical name ős-cangin (alv-cng-pro) is missing.
  • The canonical name ős-edoid (alv-edo-pro) is missing.
  • proto-edoid, the canonical name for the code alv-edo-pro, is wrong; it should be ős-edoid.
  • proto-fali, the canonical name for the code alv-fli-pro, is wrong; it should be ős-fali.
  • The canonical name ős-fali (alv-fli-pro) is missing.
  • The canonical name ős-gbe (alv-gbe-pro) is missing.
  • proto-gbe, the canonical name for the code alv-gbe-pro, is wrong; it should be ős-gbe.
  • proto-guang, the canonical name for the code alv-gng-pro, is wrong; it should be ős-guang.
  • The canonical name ős-guang (alv-gng-pro) is missing.
  • proto-central togo, the canonical name for the code alv-gtm-pro, is wrong; it should be ős-central togo.
  • The canonical name ős-central togo (alv-gtm-pro) is missing.
  • The canonical name ős-heiban (alv-hei-pro) is missing.
  • proto-heiban, the canonical name for the code alv-hei-pro, is wrong; it should be ős-heiban.
  • The canonical name ős-igboid (alv-igb-pro) is missing.
  • proto-igboid, the canonical name for the code alv-igb-pro, is wrong; it should be ős-igboid.
  • The canonical name ős-kwa (alv-kwa-pro) is missing.
  • proto-kwa, the canonical name for the code alv-kwa-pro, is wrong; it should be ős-kwa.
  • The canonical name ős-mumuye (alv-mum-pro) is missing.
  • proto-mumuye, the canonical name for the code alv-mum-pro, is wrong; it should be ős-mumuye.
  • The canonical name ős-nupoid (alv-nup-pro) is missing.
  • proto-nupoid, the canonical name for the code alv-nup-pro, is wrong; it should be ős-nupoid.
  • proto-atlantic-congo, the canonical name for the code alv-pro, is wrong; it should be ős-atlantic-congo.
  • The canonical name ős-atlantic-congo (alv-pro) is missing.
  • The canonical name ős-yoruboid (alv-yor-pro) is missing.
  • proto-yoruboid, the canonical name for the code alv-yor-pro, is wrong; it should be ős-yoruboid.
  • proto-apachean, the canonical name for the code apa-pro, is wrong; it should be ős-apachean.
  • The canonical name ős-apachean (apa-pro) is missing.
  • proto-algic, the canonical name for the code aql-pro, is wrong; it should be ős-algic.
  • The canonical name ős-algic (aql-pro) is missing.
  • The canonical name ős-athabaskan (ath-pro) is missing.
  • proto-athabaskan, the canonical name for the code ath-pro, is wrong; it should be ős-athabaskan.
  • The canonical name ős-arawa (auf-pro) is missing.
  • proto-arawa, the canonical name for the code auf-pro, is wrong; it should be ős-arawa.
  • The canonical name ős-arnhem (aus-arn-pro) is missing.
  • proto-arnhem, the canonical name for the code aus-arn-pro, is wrong; it should be ős-arnhem.
  • The canonical name ős-central new south wales (aus-cww-pro) is missing.
  • proto-central new south wales, the canonical name for the code aus-cww-pro, is wrong; it should be ős-central new south wales.
  • The canonical name ős-daly (aus-dal-pro) is missing.
  • proto-daly, the canonical name for the code aus-dal-pro, is wrong; it should be ős-daly.
  • The canonical name ős-nyulnyulan (aus-nyu-pro) is missing.
  • proto-nyulnyulan, the canonical name for the code aus-nyu-pro, is wrong; it should be ős-nyulnyulan.
  • The canonical name ős-pama-nyungan (aus-pam-pro) is missing.
  • proto-pama-nyungan, the canonical name for the code aus-pam-pro, is wrong; it should be ős-pama-nyungan.
  • proto-iwaidjan, the canonical name for the code aus-wdj-pro, is wrong; it should be ős-iwaidjan.
  • The canonical name ős-iwaidjan (aus-wdj-pro) is missing.
  • The canonical name ős-amuesha-chamicuro (awd-amc-pro) is missing.
  • proto-amuesha-chamicuro, the canonical name for the code awd-amc-pro, is wrong; it should be ős-amuesha-chamicuro.
  • The canonical name ős-kampa (awd-kmp-pro) is missing.
  • proto-kampa, the canonical name for the code awd-kmp-pro, is wrong; it should be ős-kampa.
  • proto-nawiki, the canonical name for the code awd-nwk-pro, is wrong; it should be ős-nawiki.
  • The canonical name ős-nawiki (awd-nwk-pro) is missing.
  • The canonical name ős-arawak (awd-pro) is missing.
  • proto-arawak, the canonical name for the code awd-pro, is wrong; it should be ős-arawak.
  • proto-paresi-waura, the canonical name for the code awd-prw-pro, is wrong; it should be ős-paresi-waura.
  • The canonical name ős-paresi-waura (awd-prw-pro) is missing.
  • The canonical name ős-ta-arawak (awd-taa-pro) is missing.
  • proto-ta-arawak, the canonical name for the code awd-taa-pro, is wrong; it should be ős-ta-arawak.
  • proto-cupan, the canonical name for the code azc-cup-pro, is wrong; it should be ős-cupan.
  • The canonical name ős-cupan (azc-cup-pro) is missing.
  • The canonical name ős-nahuan (azc-nah-pro) is missing.
  • proto-nahuan, the canonical name for the code azc-nah-pro, is wrong; it should be ős-nahuan.
  • The canonical name ős-numic (azc-num-pro) is missing.
  • proto-numic, the canonical name for the code azc-num-pro, is wrong; it should be ős-numic.
  • proto-uto-aztecan, the canonical name for the code azc-pro, is wrong; it should be ős-uto-aztecan.
  • The canonical name ős-uto-aztecan (azc-pro) is missing.
  • proto-takic, the canonical name for the code azc-tak-pro, is wrong; it should be ős-takic.
  • The canonical name ős-takic (azc-tak-pro) is missing.
  • babalia creole arab, the canonical name for the code bbz, is wrong; it should be babalia kreol arab.
  • The canonical name babalia kreol arab (bbz) is missing.
  • The canonical name ős-berber (ber-pro) is missing.
  • proto-berber, the canonical name for the code ber-pro, is wrong; it should be ős-berber.
  • proto-nguni, the canonical name for the code bnt-ngu-pro, is wrong; it should be ős-nguni.
  • The canonical name ős-nguni (bnt-ngu-pro) is missing.
  • proto-bantu, the canonical name for the code bnt-pro, is wrong; it should be ős-bantu.
  • The canonical name ős-bantu (bnt-pro) is missing.
  • The canonical name ős-sotho-tswana (bnt-sts-pro) is missing.
  • proto-sotho-tswana, the canonical name for the code bnt-sts-pro, is wrong; it should be ős-sotho-tswana.
  • proto-batak, the canonical name for the code btk-pro, is wrong; it should be ős-batak.
  • The canonical name ős-batak (btk-pro) is missing.
  • proto-abkhaz-abaza, the canonical name for the code cau-abz-pro, is wrong; it should be ős-abkhaz-abaza.
  • The canonical name ős-abkhaz-abaza (cau-abz-pro) is missing.
  • The canonical name ős-avaro-andian (cau-ava-pro) is missing.
  • proto-avaro-andian, the canonical name for the code cau-ava-pro, is wrong; it should be ős-avaro-andian.
  • The canonical name ős-circassian (cau-cir-pro) is missing.
  • proto-circassian, the canonical name for the code cau-cir-pro, is wrong; it should be ős-circassian.
  • proto-dargva, the canonical name for the code cau-drg-pro, is wrong; it should be ős-dargva.
  • The canonical name ős-dargva (cau-drg-pro) is missing.
  • The canonical name ős-lezghian (cau-lzg-pro) is missing.
  • proto-lezghian, the canonical name for the code cau-lzg-pro, is wrong; it should be ős-lezghian.
  • The canonical name ős-northeast caucasian (cau-nec-pro) is missing.
  • proto-northeast caucasian, the canonical name for the code cau-nec-pro, is wrong; it should be ős-northeast caucasian.
  • The canonical name ős-nakh (cau-nkh-pro) is missing.
  • proto-nakh, the canonical name for the code cau-nkh-pro, is wrong; it should be ős-nakh.
  • proto-northwest caucasian, the canonical name for the code cau-nwc-pro, is wrong; it should be ős-northwest caucasian.
  • The canonical name ős-northwest caucasian (cau-nwc-pro) is missing.
  • The canonical name ős-tsezian (cau-tsz-pro) is missing.
  • proto-tsezian, the canonical name for the code cau-tsz-pro, is wrong; it should be ős-tsezian.
  • proto-chibchan, the canonical name for the code cba-pro, is wrong; it should be ős-chibchan.
  • The canonical name ős-chibchan (cba-pro) is missing.
  • proto-north caucasian, the canonical name for the code ccn-pro, is wrong; it should be ős-north caucasian.
  • The canonical name ős-north caucasian (ccn-pro) is missing.
  • proto-georgian-zan, the canonical name for the code ccs-gzn-pro, is wrong; it should be ős-georgian-zan.
  • The canonical name ős-georgian-zan (ccs-gzn-pro) is missing.
  • The canonical name ős-kartvelian (ccs-pro) is missing.
  • proto-kartvelian, the canonical name for the code ccs-pro, is wrong; it should be ős-kartvelian.
  • proto-central chadic, the canonical name for the code cdc-cbm-pro, is wrong; it should be ős-central chadic.
  • The canonical name ős-central chadic (cdc-cbm-pro) is missing.
  • proto-masa, the canonical name for the code cdc-mas-pro, is wrong; it should be ős-masa.
  • The canonical name ős-masa (cdc-mas-pro) is missing.
  • proto-chadic, the canonical name for the code cdc-pro, is wrong; it should be ős-chadic.
  • The canonical name ős-chadic (cdc-pro) is missing.
  • The canonical name ős-caddoan (cdd-pro) is missing.
  • proto-caddoan, the canonical name for the code cdd-pro, is wrong; it should be ős-caddoan.
  • proto-brythonic, the canonical name for the code cel-bry-pro, is wrong; it should be ős-brythonic.
  • The canonical name ős-brythonic (cel-bry-pro) is missing.
  • proto-celtic, the canonical name for the code cel-pro, is wrong; it should be ős-celtic.
  • The canonical name ős-celtic (cel-pro) is missing.
  • The canonical name ős-chimakuan (chi-pro) is missing.
  • proto-chimakuan, the canonical name for the code chi-pro, is wrong; it should be ős-chimakuan.
  • The canonical name ős-chamic (cmc-pro) is missing.
  • proto-chamic, the canonical name for the code cmc-pro, is wrong; it should be ős-chamic.
  • The canonical name ős-bongo-bagirmi (csu-bba-pro) is missing.
  • proto-bongo-bagirmi, the canonical name for the code csu-bba-pro, is wrong; it should be ős-bongo-bagirmi.
  • proto-mangbetu, the canonical name for the code csu-maa-pro, is wrong; it should be ős-mangbetu.
  • The canonical name ős-mangbetu (csu-maa-pro) is missing.
  • The canonical name ős-central sudanic (csu-pro) is missing.
  • proto-central sudanic, the canonical name for the code csu-pro, is wrong; it should be ős-central sudanic.
  • proto-sara, the canonical name for the code csu-sar-pro, is wrong; it should be ős-sara.
  • The canonical name ős-sara (csu-sar-pro) is missing.
  • proto-cushitic, the canonical name for the code cus-pro, is wrong; it should be ős-cushitic.
  • The canonical name ős-cushitic (cus-pro) is missing.
  • proto-western mande, the canonical name for the code dmn-mdw-pro, is wrong; it should be ős-western mande.
  • The canonical name ős-western mande (dmn-mdw-pro) is missing.
  • proto-mande, the canonical name for the code dmn-pro, is wrong; it should be ős-mande.
  • The canonical name ős-mande (dmn-pro) is missing.
  • proto-dravidian, the canonical name for the code dra-pro, is wrong; it should be ős-dravidian.
  • The canonical name ős-dravidian (dra-pro) is missing.
  • proto-rukai, the canonical name for the code dru-pro, is wrong; it should be ős-rukai.
  • The canonical name ős-rukai (dru-pro) is missing.
  • The canonical name ős-eskimo (esx-esk-pro) is missing.
  • proto-eskimo, the canonical name for the code esx-esk-pro, is wrong; it should be ős-eskimo.
  • proto-inuit, the canonical name for the code esx-inu-pro, is wrong; it should be ős-inuit.
  • The canonical name ős-inuit (esx-inu-pro) is missing.
  • proto-eskimo-aleut, the canonical name for the code esx-pro, is wrong; it should be ős-eskimo-aleut.
  • The canonical name ős-eskimo-aleut (esx-pro) is missing.
  • proto-basque, the canonical name for the code euq-pro, is wrong; it should be ős-basque.
  • The canonical name ős-basque (euq-pro) is missing.
  • proto-finnic, the canonical name for the code fiu-fin-pro, is wrong; it should be ős-finnic.
  • The canonical name ős-finnic (fiu-fin-pro) is missing.
  • proto-germanic, the canonical name for the code gem-pro, is wrong; it should be ős-germanic.
  • The canonical name ős-germanic (gem-pro) is missing.
  • proto-norse, the canonical name for the code gmq-pro, is wrong; it should be ős-norse.
  • The canonical name ős-norse (gmq-pro) is missing.
  • proto-west germanic, the canonical name for the code gmw-pro, is wrong; it should be ős-west germanic.
  • The canonical name ős-west germanic (gmw-pro) is missing.
  • The canonical name ős-hellenic (grk-pro) is missing.
  • proto-hellenic, the canonical name for the code grk-pro, is wrong; it should be ős-hellenic.
  • The canonical name ős-hmong (hmn-pro) is missing.
  • proto-hmong, the canonical name for the code hmn-pro, is wrong; it should be ős-hmong.
  • The canonical name ős-mien (hmx-mie-pro) is missing.
  • proto-mien, the canonical name for the code hmx-mie-pro, is wrong; it should be ős-mien.
  • proto-hmong-mien, the canonical name for the code hmx-pro, is wrong; it should be ős-hmong-mien.
  • The canonical name ős-hmong-mien (hmx-pro) is missing.
  • proto-armenian, the canonical name for the code hyx-pro, is wrong; it should be ős-armenian.
  • The canonical name ős-armenian (hyx-pro) is missing.
  • The canonical name ős-nuristani (iir-nur-pro) is missing.
  • proto-nuristani, the canonical name for the code iir-nur-pro, is wrong; it should be ős-nuristani.
  • The canonical name ős-indo-iranian (iir-pro) is missing.
  • proto-indo-iranian, the canonical name for the code iir-pro, is wrong; it should be ős-indo-iranian.
  • proto-ijoid, the canonical name for the code ijo-pro, is wrong; it should be ős-ijoid.
  • The canonical name ős-ijoid (ijo-pro) is missing.
  • proto-dardic, the canonical name for the code inc-dar-pro, is wrong; it should be ős-dardic.
  • The canonical name ős-dardic (inc-dar-pro) is missing.
  • The canonical name ős-indo-aryan (inc-pro) is missing.
  • proto-indo-aryan, the canonical name for the code inc-pro, is wrong; it should be ős-indo-aryan.
  • The canonical name ős-anatolian (ine-ana-pro) is missing.
  • proto-anatolian, the canonical name for the code ine-ana-pro, is wrong; it should be ős-anatolian.
  • The canonical name ős-balti-szláv (ine-bsl-pro) is missing.
  • proto-balto-slavic, the canonical name for the code ine-bsl-pro, is wrong; it should be ős-balti-szláv.
  • The canonical name ősindoeurópai (ine-pro) is missing.
  • proto-indo-european, the canonical name for the code ine-pro, is wrong; it should be ősindoeurópai.
  • The canonical name ős-tocharian (ine-toc-pro) is missing.
  • proto-tocharian, the canonical name for the code ine-toc-pro, is wrong; it should be ős-tocharian.
  • The canonical name ingus (inh) is missing.
  • ingush, the canonical name for the code inh, is wrong; it should be ingus.
  • The canonical name ős-komisenian (ira-kms-pro) is missing.
  • proto-komisenian, the canonical name for the code ira-kms-pro, is wrong; it should be ős-komisenian.
  • The canonical name ős-munji-yidgha (ira-mny-pro) is missing.
  • proto-munji-yidgha, the canonical name for the code ira-mny-pro, is wrong; it should be ős-munji-yidgha.
  • The canonical name ős-medo-parthian (ira-mpr-pro) is missing.
  • proto-medo-parthian, the canonical name for the code ira-mpr-pro, is wrong; it should be ős-medo-parthian.
  • proto-pathan, the canonical name for the code ira-pat-pro, is wrong; it should be ős-pathan.
  • The canonical name ős-pathan (ira-pat-pro) is missing.
  • proto-iranian, the canonical name for the code ira-pro, is wrong; it should be ős-iranian.
  • The canonical name ős-iranian (ira-pro) is missing.
  • proto-sogdic, the canonical name for the code ira-sgc-pro, is wrong; it should be ős-sogdic.
  • The canonical name ős-sogdic (ira-sgc-pro) is missing.
  • proto-sanglechi-ishkashimi, the canonical name for the code ira-sgi-pro, is wrong; it should be ős-sanglechi-ishkashimi.
  • The canonical name ős-sanglechi-ishkashimi (ira-sgi-pro) is missing.
  • The canonical name ős-shughni-roshani (ira-shr-pro) is missing.
  • proto-shughni-roshani, the canonical name for the code ira-shr-pro, is wrong; it should be ős-shughni-roshani.
  • The canonical name ős-shughni-yazghulami (ira-shy-pro) is missing.
  • proto-shughni-yazghulami, the canonical name for the code ira-shy-pro, is wrong; it should be ős-shughni-yazghulami.
  • The canonical name ős-shughni-yazghulami-munji (ira-sym-pro) is missing.
  • proto-shughni-yazghulami-munji, the canonical name for the code ira-sym-pro, is wrong; it should be ős-shughni-yazghulami-munji.
  • The canonical name ős-zaza-gorani (ira-zgr-pro) is missing.
  • proto-zaza-gorani, the canonical name for the code ira-zgr-pro, is wrong; it should be ős-zaza-gorani.
  • proto-iroquoian, the canonical name for the code iro-pro, is wrong; it should be ős-iroquoian.
  • The canonical name ős-iroquoian (iro-pro) is missing.
  • proto-italic, the canonical name for the code itc-pro, is wrong; it should be ős-italic.
  • The canonical name ős-italic (itc-pro) is missing.
  • The canonical name judeo-olasz (itk) is missing.
  • judeo-italian, the canonical name for the code itk, is wrong; it should be judeo-olasz.
  • ingrian, the canonical name for the code izh, is wrong; it should be izsór.
  • The canonical name izsór (izh) is missing.
  • proto-japonic, the canonical name for the code jpx-pro, is wrong; it should be ős-japonic.
  • The canonical name ős-japonic (jpx-pro) is missing.
  • proto-ryukyuan, the canonical name for the code jpx-ryu-pro, is wrong; it should be ős-ryukyuan.
  • The canonical name ős-ryukyuan (jpx-ryu-pro) is missing.
  • The canonical name ős-karen (kar-pro) is missing.
  • proto-karen, the canonical name for the code kar-pro, is wrong; it should be ős-karen.
  • proto-khoe, the canonical name for the code khi-kho-pro, is wrong; it should be ős-khoe.
  • The canonical name ős-khoe (khi-kho-pro) is missing.
  • northern kurdish, the canonical name for the code kmr, is wrong; it should be északi kurd.
  • The canonical name északi kurd (kmr) is missing.
  • The canonical name ős-kru (kro-pro) is missing.
  • proto-kru, the canonical name for the code kro-pro, is wrong; it should be ős-kru.
  • The canonical name lív (liv) is missing.
  • livonian, the canonical name for the code liv, is wrong; it should be lív.
  • proto-atayalic, the canonical name for the code map-ata-pro, is wrong; it should be ős-atayalic.
  • The canonical name ős-atayalic (map-ata-pro) is missing.
  • proto-austronesian, the canonical name for the code map-pro, is wrong; it should be ős-austronesian.
  • The canonical name ős-austronesian (map-pro) is missing.
  • proto-aslian, the canonical name for the code mkh-asl-pro, is wrong; it should be ős-aslian.
  • The canonical name ős-aslian (mkh-asl-pro) is missing.
  • proto-bahnaric, the canonical name for the code mkh-ban-pro, is wrong; it should be ős-bahnaric.
  • The canonical name ős-bahnaric (mkh-ban-pro) is missing.
  • proto-katuic, the canonical name for the code mkh-kat-pro, is wrong; it should be ős-katuic.
  • The canonical name ős-katuic (mkh-kat-pro) is missing.
  • proto-khmuic, the canonical name for the code mkh-khm-pro, is wrong; it should be ős-khmuic.
  • The canonical name ős-khmuic (mkh-khm-pro) is missing.
  • proto-khmeric, the canonical name for the code mkh-kmr-pro, is wrong; it should be ős-khmeric.
  • The canonical name ős-khmeric (mkh-kmr-pro) is missing.
  • proto-monic, the canonical name for the code mkh-mnc-pro, is wrong; it should be ős-monic.
  • The canonical name ős-monic (mkh-mnc-pro) is missing.
  • proto-palaungic, the canonical name for the code mkh-pal-pro, is wrong; it should be ős-palaungic.
  • The canonical name ős-palaungic (mkh-pal-pro) is missing.
  • proto-pearic, the canonical name for the code mkh-pea-pro, is wrong; it should be ős-pearic.
  • The canonical name ős-pearic (mkh-pea-pro) is missing.
  • The canonical name ős-pakanic (mkh-pkn-pro) is missing.
  • proto-pakanic, the canonical name for the code mkh-pkn-pro, is wrong; it should be ős-pakanic.
  • proto-mon-khmer, the canonical name for the code mkh-pro, is wrong; it should be ős-mon-khmer.
  • The canonical name ős-mon-khmer (mkh-pro) is missing.
  • proto-vietic, the canonical name for the code mkh-vie-pro, is wrong; it should be ős-vietic.
  • The canonical name ős-vietic (mkh-vie-pro) is missing.
  • proto-munda, the canonical name for the code mun-pro, is wrong; it should be ős-munda.
  • The canonical name ős-munda (mun-pro) is missing.
  • proto-mayan, the canonical name for the code myn-pro, is wrong; it should be ős-mayan.
  • The canonical name ős-mayan (myn-pro) is missing.
  • The canonical name ős-chumash (nai-chu-pro) is missing.
  • proto-chumash, the canonical name for the code nai-chu-pro, is wrong; it should be ős-chumash.
  • The canonical name ős-chinookan (nai-ckn-pro) is missing.
  • proto-chinookan, the canonical name for the code nai-ckn-pro, is wrong; it should be ős-chinookan.
  • proto-kalapuyan, the canonical name for the code nai-klp-pro, is wrong; it should be ős-kalapuyan.
  • The canonical name ős-kalapuyan (nai-klp-pro) is missing.
  • The canonical name ős-maidun (nai-mdu-pro) is missing.
  • proto-maidun, the canonical name for the code nai-mdu-pro, is wrong; it should be ős-maidun.
  • The canonical name ős-mixe-zoque (nai-miz-pro) is missing.
  • proto-mixe-zoque, the canonical name for the code nai-miz-pro, is wrong; it should be ős-mixe-zoque.
  • proto-plateau penutian, the canonical name for the code nai-plp-pro, is wrong; it should be ős-plateau penutian.
  • The canonical name ős-plateau penutian (nai-plp-pro) is missing.
  • The canonical name ős-pomo (nai-pom-pro) is missing.
  • proto-pomo, the canonical name for the code nai-pom-pro, is wrong; it should be ős-pomo.
  • The canonical name ős-siouan-catawban (nai-sca-pro) is missing.
  • proto-siouan-catawban, the canonical name for the code nai-sca-pro, is wrong; it should be ős-siouan-catawban.
  • proto-totozoquean, the canonical name for the code nai-tot-pro, is wrong; it should be ős-totozoquean.
  • The canonical name ős-totozoquean (nai-tot-pro) is missing.
  • proto-tsimshianic, the canonical name for the code nai-tsi-pro, is wrong; it should be ős-tsimshianic.
  • The canonical name ős-tsimshianic (nai-tsi-pro) is missing.
  • The canonical name ős-utian (nai-utn-pro) is missing.
  • proto-utian, the canonical name for the code nai-utn-pro, is wrong; it should be ős-utian.
  • The canonical name ős-trans-new guinea (ngf-pro) is missing.
  • proto-trans-new guinea, the canonical name for the code ngf-pro, is wrong; it should be ős-trans-new guinea.
  • The canonical name ős-benue-congo (nic-bco-pro) is missing.
  • proto-benue-congo, the canonical name for the code nic-bco-pro, is wrong; it should be ős-benue-congo.
  • The canonical name ős-bantoid (nic-bod-pro) is missing.
  • proto-bantoid, the canonical name for the code nic-bod-pro, is wrong; it should be ős-bantoid.
  • proto-eastern oti-volta, the canonical name for the code nic-eov-pro, is wrong; it should be ős-eastern oti-volta.
  • The canonical name ős-eastern oti-volta (nic-eov-pro) is missing.
  • proto-gurunsi, the canonical name for the code nic-gns-pro, is wrong; it should be ős-gurunsi.
  • The canonical name ős-gurunsi (nic-gns-pro) is missing.
  • proto-grassfields, the canonical name for the code nic-grf-pro, is wrong; it should be ős-grassfields.
  • The canonical name ős-grassfields (nic-grf-pro) is missing.
  • proto-gur, the canonical name for the code nic-gur-pro, is wrong; it should be ős-gur.
  • The canonical name ős-gur (nic-gur-pro) is missing.
  • The canonical name ős-jukunoid (nic-jkn-pro) is missing.
  • proto-jukunoid, the canonical name for the code nic-jkn-pro, is wrong; it should be ős-jukunoid.
  • proto-lower cross river, the canonical name for the code nic-lcr-pro, is wrong; it should be ős-lower cross river.
  • The canonical name ős-lower cross river (nic-lcr-pro) is missing.
  • proto-ogoni, the canonical name for the code nic-ogo-pro, is wrong; it should be ős-ogoni.
  • The canonical name ős-ogoni (nic-ogo-pro) is missing.
  • The canonical name ős-oti-volta (nic-ovo-pro) is missing.
  • proto-oti-volta, the canonical name for the code nic-ovo-pro, is wrong; it should be ős-oti-volta.
  • proto-plateau, the canonical name for the code nic-plt-pro, is wrong; it should be ős-plateau.
  • The canonical name ős-plateau (nic-plt-pro) is missing.
  • proto-niger-congo, the canonical name for the code nic-pro, is wrong; it should be ős-niger-congo.
  • The canonical name ős-niger-congo (nic-pro) is missing.
  • proto-ubangian, the canonical name for the code nic-ubg-pro, is wrong; it should be ős-ubangian.
  • The canonical name ős-ubangian (nic-ubg-pro) is missing.
  • The canonical name ős-upper cross river (nic-ucr-pro) is missing.
  • proto-upper cross river, the canonical name for the code nic-ucr-pro, is wrong; it should be ős-upper cross river.
  • proto-volta-congo, the canonical name for the code nic-vco-pro, is wrong; it should be ős-volta-congo.
  • The canonical name ős-volta-congo (nic-vco-pro) is missing.
  • The canonical name ős-nubian (nub-pro) is missing.
  • proto-nubian, the canonical name for the code nub-pro, is wrong; it should be ős-nubian.
  • The canonical name ős-chatino (omq-cha-pro) is missing.
  • proto-chatino, the canonical name for the code omq-cha-pro, is wrong; it should be ős-chatino.
  • proto-mazatec, the canonical name for the code omq-maz-pro, is wrong; it should be ős-mazatec.
  • The canonical name ős-mazatec (omq-maz-pro) is missing.
  • proto-mixtecan, the canonical name for the code omq-mix-pro, is wrong; it should be ős-mixtecan.
  • The canonical name ős-mixtecan (omq-mix-pro) is missing.
  • The canonical name ős-mixtec (omq-mxt-pro) is missing.
  • proto-mixtec, the canonical name for the code omq-mxt-pro, is wrong; it should be ős-mixtec.
  • The canonical name ős-oto-pamean (omq-otp-pro) is missing.
  • proto-oto-pamean, the canonical name for the code omq-otp-pro, is wrong; it should be ős-oto-pamean.
  • proto-oto-manguean, the canonical name for the code omq-pro, is wrong; it should be ős-oto-manguean.
  • The canonical name ős-oto-manguean (omq-pro) is missing.
  • proto-trique, the canonical name for the code omq-tri-pro, is wrong; it should be ős-trique.
  • The canonical name ős-trique (omq-tri-pro) is missing.
  • The canonical name ős-zapotecan (omq-zap-pro) is missing.
  • proto-zapotecan, the canonical name for the code omq-zap-pro, is wrong; it should be ős-zapotecan.
  • The canonical name ős-zapotec (omq-zpc-pro) is missing.
  • proto-zapotec, the canonical name for the code omq-zpc-pro, is wrong; it should be ős-zapotec.
  • proto-aroid, the canonical name for the code omv-aro-pro, is wrong; it should be ős-aroid.
  • The canonical name ős-aroid (omv-aro-pro) is missing.
  • proto-dizoid, the canonical name for the code omv-diz-pro, is wrong; it should be ős-dizoid.
  • The canonical name ős-dizoid (omv-diz-pro) is missing.
  • proto-omotic, the canonical name for the code omv-pro, is wrong; it should be ős-omotic.
  • The canonical name ős-omotic (omv-pro) is missing.
  • The canonical name óorosz (orv) is missing.
  • ó-keleti-szláv, the canonical name for the code orv, is wrong; it should be óorosz.
  • proto-ossetic, the canonical name for the code os-pro, is wrong; it should be ős-ossetic.
  • The canonical name ős-ossetic (os-pro) is missing.
  • proto-otomi, the canonical name for the code oto-otm-pro, is wrong; it should be ős-otomi.
  • The canonical name ős-otomi (oto-otm-pro) is missing.
  • The canonical name ős-otomian (oto-pro) is missing.
  • proto-otomian, the canonical name for the code oto-pro, is wrong; it should be ős-otomian.
  • pennsylvania german, the canonical name for the code pdc, is wrong; it should be pennsylvaniai német.
  • The canonical name pennsylvaniai német (pdc) is missing.
  • The canonical name ős-kalamian (phi-kal-pro) is missing.
  • proto-kalamian, the canonical name for the code phi-kal-pro, is wrong; it should be ős-kalamian.
  • proto-philippine, the canonical name for the code phi-pro, is wrong; it should be ős-philippine.
  • The canonical name ős-philippine (phi-pro) is missing.
  • piedmontese, the canonical name for the code pms, is wrong; it should be piemonti.
  • The canonical name piemonti (pms) is missing.
  • proto-bungku-tolaki, the canonical name for the code poz-btk-pro, is wrong; it should be ős-bungku-tolaki.
  • The canonical name ős-bungku-tolaki (poz-btk-pro) is missing.
  • proto-central-eastern malayo-polynesian, the canonical name for the code poz-cet-pro, is wrong; it should be ős-central-eastern malayo-polynesian.
  • The canonical name ős-central-eastern malayo-polynesian (poz-cet-pro) is missing.
  • The canonical name ős-halmahera-cenderawasih (poz-hce-pro) is missing.
  • proto-halmahera-cenderawasih, the canonical name for the code poz-hce-pro, is wrong; it should be ős-halmahera-cenderawasih.
  • proto-lampungic, the canonical name for the code poz-lgx-pro, is wrong; it should be ős-lampungic.
  • The canonical name ős-lampungic (poz-lgx-pro) is missing.
  • The canonical name ős-malayo-chamic (poz-mcm-pro) is missing.
  • proto-malayo-chamic, the canonical name for the code poz-mcm-pro, is wrong; it should be ős-malayo-chamic.
  • proto-malayic, the canonical name for the code poz-mly-pro, is wrong; it should be ős-malayic.
  • The canonical name ős-malayic (poz-mly-pro) is missing.
  • The canonical name ős-malayo-sumbawan (poz-msa-pro) is missing.
  • proto-malayo-sumbawan, the canonical name for the code poz-msa-pro, is wrong; it should be ős-malayo-sumbawan.
  • The canonical name ős-oceanic (poz-oce-pro) is missing.
  • proto-oceanic, the canonical name for the code poz-oce-pro, is wrong; it should be ős-oceanic.
  • The canonical name ős-eastern polynesian (poz-pep-pro) is missing.
  • proto-eastern polynesian, the canonical name for the code poz-pep-pro, is wrong; it should be ős-eastern polynesian.
  • proto-nuclear polynesian, the canonical name for the code poz-pnp-pro, is wrong; it should be ős-nuclear polynesian.
  • The canonical name ős-nuclear polynesian (poz-pnp-pro) is missing.
  • proto-polynesian, the canonical name for the code poz-pol-pro, is wrong; it should be ős-polynesian.
  • The canonical name ős-polynesian (poz-pol-pro) is missing.
  • The canonical name ős-malayo-polynesian (poz-pro) is missing.
  • proto-malayo-polynesian, the canonical name for the code poz-pro, is wrong; it should be ős-malayo-polynesian.
  • The canonical name ős-south sulawesi (poz-ssw-pro) is missing.
  • proto-south sulawesi, the canonical name for the code poz-ssw-pro, is wrong; it should be ős-south sulawesi.
  • The canonical name ős-sunda-sulawesi (poz-sus-pro) is missing.
  • proto-sunda-sulawesi, the canonical name for the code poz-sus-pro, is wrong; it should be ős-sunda-sulawesi.
  • The canonical name ős-north sarawak (poz-swa-pro) is missing.
  • proto-north sarawak, the canonical name for the code poz-swa-pro, is wrong; it should be ős-north sarawak.
  • The canonical name ős-eastern malayo-polynesian (pqe-pro) is missing.
  • proto-eastern malayo-polynesian, the canonical name for the code pqe-pro, is wrong; it should be ős-eastern malayo-polynesian.
  • proto-great andamanese, the canonical name for the code qfa-adm-pro, is wrong; it should be ős-great andamanese.
  • The canonical name ős-great andamanese (qfa-adm-pro) is missing.
  • proto-chukotko-kamchatkan, the canonical name for the code qfa-cka-pro, is wrong; it should be ős-chukotko-kamchatkan.
  • The canonical name ős-chukotko-kamchatkan (qfa-cka-pro) is missing.
  • proto-hurro-urartian, the canonical name for the code qfa-hur-pro, is wrong; it should be ős-hurro-urartian.
  • The canonical name ős-hurro-urartian (qfa-hur-pro) is missing.
  • proto-kadu, the canonical name for the code qfa-kad-pro, is wrong; it should be ős-kadu.
  • The canonical name ős-kadu (qfa-kad-pro) is missing.
  • The canonical name ős-kam-sui (qfa-kms-pro) is missing.
  • proto-kam-sui, the canonical name for the code qfa-kms-pro, is wrong; it should be ős-kam-sui.
  • proto-korean, the canonical name for the code qfa-kor-pro, is wrong; it should be ős-korean.
  • The canonical name ős-korean (qfa-kor-pro) is missing.
  • proto-kra, the canonical name for the code qfa-kra-pro, is wrong; it should be ős-kra.
  • The canonical name ős-kra (qfa-kra-pro) is missing.
  • The canonical name ős-hlai (qfa-lic-pro) is missing.
  • proto-hlai, the canonical name for the code qfa-lic-pro, is wrong; it should be ős-hlai.
  • proto-ong-be, the canonical name for the code qfa-onb-pro, is wrong; it should be ős-ong-be.
  • The canonical name ős-ong-be (qfa-onb-pro) is missing.
  • proto-ongan, the canonical name for the code qfa-ong-pro, is wrong; it should be ős-ongan.
  • The canonical name ős-ongan (qfa-ong-pro) is missing.
  • proto-kra-dai, the canonical name for the code qfa-tak-pro, is wrong; it should be ős-kra-dai.
  • The canonical name ős-kra-dai (qfa-tak-pro) is missing.
  • The canonical name ős-yeniseian (qfa-yen-pro) is missing.
  • proto-yeniseian, the canonical name for the code qfa-yen-pro, is wrong; it should be ős-yeniseian.
  • proto-yukaghir, the canonical name for the code qfa-yuk-pro, is wrong; it should be ős-yukaghir.
  • The canonical name ős-yukaghir (qfa-yuk-pro) is missing.
  • The canonical name ős-jê (sai-jee-pro) is missing.
  • proto-jê, the canonical name for the code sai-jee-pro, is wrong; it should be ős-jê.
  • The canonical name ős-salish (sal-pro) is missing.
  • proto-salish, the canonical name for the code sal-pro, is wrong; it should be ős-salish.
  • proto-daju, the canonical name for the code sdv-daj-pro, is wrong; it should be ős-daju.
  • The canonical name ős-daju (sdv-daj-pro) is missing.
  • The canonical name ős-eastern jebel (sdv-eje-pro) is missing.
  • proto-eastern jebel, the canonical name for the code sdv-eje-pro, is wrong; it should be ős-eastern jebel.
  • proto-nilotic, the canonical name for the code sdv-nil-pro, is wrong; it should be ős-nilotic.
  • The canonical name ős-nilotic (sdv-nil-pro) is missing.
  • proto-nyima, the canonical name for the code sdv-nyi-pro, is wrong; it should be ős-nyima.
  • The canonical name ős-nyima (sdv-nyi-pro) is missing.
  • The canonical name ős-taman (sdv-tmn-pro) is missing.
  • proto-taman, the canonical name for the code sdv-tmn-pro, is wrong; it should be ős-taman.
  • proto-semitic, the canonical name for the code sem-pro, is wrong; it should be ős-semitic.
  • The canonical name ős-semitic (sem-pro) is missing.
  • The canonical name ős-siouan (sio-pro) is missing.
  • proto-siouan, the canonical name for the code sio-pro, is wrong; it should be ős-siouan.
  • The canonical name ős-hrusish (sit-hrs-pro) is missing.
  • proto-hrusish, the canonical name for the code sit-hrs-pro, is wrong; it should be ős-hrusish.
  • The canonical name ős-kham (sit-kha-pro) is missing.
  • proto-kham, the canonical name for the code sit-kha-pro, is wrong; it should be ős-kham.
  • The canonical name ős-luish (sit-luu-pro) is missing.
  • proto-luish, the canonical name for the code sit-luu-pro, is wrong; it should be ős-luish.
  • The canonical name ős-sino-tibetan (sit-pro) is missing.
  • proto-sino-tibetan, the canonical name for the code sit-pro, is wrong; it should be ős-sino-tibetan.
  • The canonical name ős-tani (sit-tan-pro) is missing.
  • proto-tani, the canonical name for the code sit-tan-pro, is wrong; it should be ős-tani.
  • proto-slavic, the canonical name for the code sla-pro, is wrong; it should be ősszláv.
  • The canonical name ősszláv (sla-pro) is missing.
  • proto-samic, the canonical name for the code smi-pro, is wrong; it should be ős-samic.
  • The canonical name ős-samic (smi-pro) is missing.
  • proto-songhay, the canonical name for the code son-pro, is wrong; it should be ős-songhay.
  • The canonical name ős-songhay (son-pro) is missing.
  • The canonical name ős-albanian (sqj-pro) is missing.
  • proto-albanian, the canonical name for the code sqj-pro, is wrong; it should be ős-albanian.
  • proto-kuliak, the canonical name for the code ssa-klk-pro, is wrong; it should be ős-kuliak.
  • The canonical name ős-kuliak (ssa-klk-pro) is missing.
  • The canonical name ős-koman (ssa-kom-pro) is missing.
  • proto-koman, the canonical name for the code ssa-kom-pro, is wrong; it should be ős-koman.
  • proto-nilo-saharan, the canonical name for the code ssa-pro, is wrong; it should be ős-nilo-saharan.
  • The canonical name ős-nilo-saharan (ssa-pro) is missing.
  • proto-samoyedic, the canonical name for the code syd-pro, is wrong; it should be ős-samoyedic.
  • The canonical name ős-samoyedic (syd-pro) is missing.
  • proto-tai, the canonical name for the code tai-pro, is wrong; it should be ős-tai.
  • The canonical name ős-tai (tai-pro) is missing.
  • proto-southwestern tai, the canonical name for the code tai-swe-pro, is wrong; it should be ős-southwestern tai.
  • The canonical name ős-southwestern tai (tai-swe-pro) is missing.
  • The canonical name ős-bodo-garo (tbq-bdg-pro) is missing.
  • proto-bodo-garo, the canonical name for the code tbq-bdg-pro, is wrong; it should be ős-bodo-garo.
  • proto-kuki-chin, the canonical name for the code tbq-kuk-pro, is wrong; it should be ős-kuki-chin.
  • The canonical name ős-kuki-chin (tbq-kuk-pro) is missing.
  • proto-lalo, the canonical name for the code tbq-lal-pro, is wrong; it should be ős-lalo.
  • The canonical name ős-lalo (tbq-lal-pro) is missing.
  • The canonical name ős-lolo-burmese (tbq-lob-pro) is missing.
  • proto-lolo-burmese, the canonical name for the code tbq-lob-pro, is wrong; it should be ős-lolo-burmese.
  • The canonical name ős-loloish (tbq-lol-pro) is missing.
  • proto-loloish, the canonical name for the code tbq-lol-pro, is wrong; it should be ős-loloish.
  • proto-turkic, the canonical name for the code trk-pro, is wrong; it should be ős-turkic.
  • The canonical name ős-turkic (trk-pro) is missing.
  • proto-tupi-guarani, the canonical name for the code tup-gua-pro, is wrong; it should be ős-tupi-guarani.
  • The canonical name ős-tupi-guarani (tup-gua-pro) is missing.
  • The canonical name ős-tupian (tup-pro) is missing.
  • proto-tupian, the canonical name for the code tup-pro, is wrong; it should be ős-tupian.
  • The canonical name ős-tungusic (tuw-pro) is missing.
  • proto-tungusic, the canonical name for the code tuw-pro, is wrong; it should be ős-tungusic.
  • The canonical name ős-mordvinic (urj-mdv-pro) is missing.
  • proto-mordvinic, the canonical name for the code urj-mdv-pro, is wrong; it should be ős-mordvinic.
  • proto-permic, the canonical name for the code urj-prm-pro, is wrong; it should be ős-permic.
  • The canonical name ős-permic (urj-prm-pro) is missing.
  • The canonical name ős-uralic (urj-pro) is missing.
  • proto-uralic, the canonical name for the code urj-pro, is wrong; it should be ős-uralic.
  • The canonical name ős-ugric (urj-ugr-pro) is missing.
  • proto-ugric, the canonical name for the code urj-ugr-pro, is wrong; it should be ős-ugric.
  • The canonical name ős-mongolic (xgn-pro) is missing.
  • proto-mongolic, the canonical name for the code xgn-pro, is wrong; it should be ős-mongolic.
  • proto-tatic, the canonical name for the code xme-ttc-pro, is wrong; it should be ős-tatic.
  • The canonical name ős-tatic (xme-ttc-pro) is missing.
  • The canonical name ős-na-dene (xnd-pro) is missing.
  • proto-na-dene, the canonical name for the code xnd-pro, is wrong; it should be ős-na-dene.
  • The canonical name ős-scythian (xsc-pro) is missing.
  • proto-scythian, the canonical name for the code xsc-pro, is wrong; it should be ős-scythian.
  • The canonical name ős-saka (xsc-sak-pro) is missing.
  • proto-saka, the canonical name for the code xsc-sak-pro, is wrong; it should be ős-saka.
  • The canonical name ős-saka-wakhi (xsc-skw-pro) is missing.
  • proto-saka-wakhi, the canonical name for the code xsc-skw-pro, is wrong; it should be ős-saka-wakhi.
  • The canonical name ős-yupik (ypk-pro) is missing.
  • proto-yupik, the canonical name for the code ypk-pro, is wrong; it should be ős-yupik.
  • The canonical name ős-min (zhx-min-pro) is missing.
  • proto-min, the canonical name for the code zhx-min-pro, is wrong; it should be ős-min.

Module:languages/code to canonical name

  • proto-khasian, the canonical name for the code aav-khs-pro, is wrong; it should be ős-khasian.
  • proto-nicobarese, the canonical name for the code aav-nic-pro, is wrong; it should be ős-nicobarese.
  • proto-pnar-khasi-lyngngam, the canonical name for the code aav-pkl-pro, is wrong; it should be ős-pnar-khasi-lyngngam.
  • proto-austroasiatic, the canonical name for the code aav-pro, is wrong; it should be ős-austroasiatic.
  • proto-afro-asiatic, the canonical name for the code afa-pro, is wrong; it should be ős-afro-asiatic.
  • proto-algonquian, the canonical name for the code alg-pro, is wrong; it should be ős-algonquian.
  • proto-bua, the canonical name for the code alv-bua-pro, is wrong; it should be ős-bua.
  • proto-cangin, the canonical name for the code alv-cng-pro, is wrong; it should be ős-cangin.
  • proto-edoid, the canonical name for the code alv-edo-pro, is wrong; it should be ős-edoid.
  • proto-fali, the canonical name for the code alv-fli-pro, is wrong; it should be ős-fali.
  • proto-gbe, the canonical name for the code alv-gbe-pro, is wrong; it should be ős-gbe.
  • proto-guang, the canonical name for the code alv-gng-pro, is wrong; it should be ős-guang.
  • proto-central togo, the canonical name for the code alv-gtm-pro, is wrong; it should be ős-central togo.
  • proto-heiban, the canonical name for the code alv-hei-pro, is wrong; it should be ős-heiban.
  • proto-igboid, the canonical name for the code alv-igb-pro, is wrong; it should be ős-igboid.
  • proto-kwa, the canonical name for the code alv-kwa-pro, is wrong; it should be ős-kwa.
  • proto-mumuye, the canonical name for the code alv-mum-pro, is wrong; it should be ős-mumuye.
  • proto-nupoid, the canonical name for the code alv-nup-pro, is wrong; it should be ős-nupoid.
  • proto-atlantic-congo, the canonical name for the code alv-pro, is wrong; it should be ős-atlantic-congo.
  • proto-yoruboid, the canonical name for the code alv-yor-pro, is wrong; it should be ős-yoruboid.
  • proto-apachean, the canonical name for the code apa-pro, is wrong; it should be ős-apachean.
  • proto-algic, the canonical name for the code aql-pro, is wrong; it should be ős-algic.
  • proto-athabaskan, the canonical name for the code ath-pro, is wrong; it should be ős-athabaskan.
  • proto-arawa, the canonical name for the code auf-pro, is wrong; it should be ős-arawa.
  • proto-arnhem, the canonical name for the code aus-arn-pro, is wrong; it should be ős-arnhem.
  • proto-central new south wales, the canonical name for the code aus-cww-pro, is wrong; it should be ős-central new south wales.
  • proto-daly, the canonical name for the code aus-dal-pro, is wrong; it should be ős-daly.
  • proto-nyulnyulan, the canonical name for the code aus-nyu-pro, is wrong; it should be ős-nyulnyulan.
  • proto-pama-nyungan, the canonical name for the code aus-pam-pro, is wrong; it should be ős-pama-nyungan.
  • proto-iwaidjan, the canonical name for the code aus-wdj-pro, is wrong; it should be ős-iwaidjan.
  • proto-amuesha-chamicuro, the canonical name for the code awd-amc-pro, is wrong; it should be ős-amuesha-chamicuro.
  • proto-kampa, the canonical name for the code awd-kmp-pro, is wrong; it should be ős-kampa.
  • proto-nawiki, the canonical name for the code awd-nwk-pro, is wrong; it should be ős-nawiki.
  • proto-arawak, the canonical name for the code awd-pro, is wrong; it should be ős-arawak.
  • proto-paresi-waura, the canonical name for the code awd-prw-pro, is wrong; it should be ős-paresi-waura.
  • proto-ta-arawak, the canonical name for the code awd-taa-pro, is wrong; it should be ős-ta-arawak.
  • proto-cupan, the canonical name for the code azc-cup-pro, is wrong; it should be ős-cupan.
  • proto-nahuan, the canonical name for the code azc-nah-pro, is wrong; it should be ős-nahuan.
  • proto-numic, the canonical name for the code azc-num-pro, is wrong; it should be ős-numic.
  • proto-uto-aztecan, the canonical name for the code azc-pro, is wrong; it should be ős-uto-aztecan.
  • proto-takic, the canonical name for the code azc-tak-pro, is wrong; it should be ős-takic.
  • babalia creole arab, the canonical name for the code bbz, is wrong; it should be babalia kreol arab.
  • proto-berber, the canonical name for the code ber-pro, is wrong; it should be ős-berber.
  • proto-nguni, the canonical name for the code bnt-ngu-pro, is wrong; it should be ős-nguni.
  • proto-bantu, the canonical name for the code bnt-pro, is wrong; it should be ős-bantu.
  • proto-sotho-tswana, the canonical name for the code bnt-sts-pro, is wrong; it should be ős-sotho-tswana.
  • proto-batak, the canonical name for the code btk-pro, is wrong; it should be ős-batak.
  • proto-abkhaz-abaza, the canonical name for the code cau-abz-pro, is wrong; it should be ős-abkhaz-abaza.
  • proto-avaro-andian, the canonical name for the code cau-ava-pro, is wrong; it should be ős-avaro-andian.
  • proto-circassian, the canonical name for the code cau-cir-pro, is wrong; it should be ős-circassian.
  • proto-dargva, the canonical name for the code cau-drg-pro, is wrong; it should be ős-dargva.
  • proto-lezghian, the canonical name for the code cau-lzg-pro, is wrong; it should be ős-lezghian.
  • proto-northeast caucasian, the canonical name for the code cau-nec-pro, is wrong; it should be ős-northeast caucasian.
  • proto-nakh, the canonical name for the code cau-nkh-pro, is wrong; it should be ős-nakh.
  • proto-northwest caucasian, the canonical name for the code cau-nwc-pro, is wrong; it should be ős-northwest caucasian.
  • proto-tsezian, the canonical name for the code cau-tsz-pro, is wrong; it should be ős-tsezian.
  • proto-chibchan, the canonical name for the code cba-pro, is wrong; it should be ős-chibchan.
  • proto-north caucasian, the canonical name for the code ccn-pro, is wrong; it should be ős-north caucasian.
  • proto-georgian-zan, the canonical name for the code ccs-gzn-pro, is wrong; it should be ős-georgian-zan.
  • proto-kartvelian, the canonical name for the code ccs-pro, is wrong; it should be ős-kartvelian.
  • proto-central chadic, the canonical name for the code cdc-cbm-pro, is wrong; it should be ős-central chadic.
  • proto-masa, the canonical name for the code cdc-mas-pro, is wrong; it should be ős-masa.
  • proto-chadic, the canonical name for the code cdc-pro, is wrong; it should be ős-chadic.
  • proto-caddoan, the canonical name for the code cdd-pro, is wrong; it should be ős-caddoan.
  • proto-brythonic, the canonical name for the code cel-bry-pro, is wrong; it should be ős-brythonic.
  • proto-celtic, the canonical name for the code cel-pro, is wrong; it should be ős-celtic.
  • proto-chimakuan, the canonical name for the code chi-pro, is wrong; it should be ős-chimakuan.
  • proto-chamic, the canonical name for the code cmc-pro, is wrong; it should be ős-chamic.
  • proto-bongo-bagirmi, the canonical name for the code csu-bba-pro, is wrong; it should be ős-bongo-bagirmi.
  • proto-mangbetu, the canonical name for the code csu-maa-pro, is wrong; it should be ős-mangbetu.
  • proto-central sudanic, the canonical name for the code csu-pro, is wrong; it should be ős-central sudanic.
  • proto-sara, the canonical name for the code csu-sar-pro, is wrong; it should be ős-sara.
  • proto-cushitic, the canonical name for the code cus-pro, is wrong; it should be ős-cushitic.
  • proto-western mande, the canonical name for the code dmn-mdw-pro, is wrong; it should be ős-western mande.
  • proto-mande, the canonical name for the code dmn-pro, is wrong; it should be ős-mande.
  • proto-dravidian, the canonical name for the code dra-pro, is wrong; it should be ős-dravidian.
  • proto-rukai, the canonical name for the code dru-pro, is wrong; it should be ős-rukai.
  • proto-eskimo, the canonical name for the code esx-esk-pro, is wrong; it should be ős-eskimo.
  • proto-inuit, the canonical name for the code esx-inu-pro, is wrong; it should be ős-inuit.
  • proto-eskimo-aleut, the canonical name for the code esx-pro, is wrong; it should be ős-eskimo-aleut.
  • proto-basque, the canonical name for the code euq-pro, is wrong; it should be ős-basque.
  • proto-finnic, the canonical name for the code fiu-fin-pro, is wrong; it should be ős-finnic.
  • proto-germanic, the canonical name for the code gem-pro, is wrong; it should be ős-germanic.
  • proto-norse, the canonical name for the code gmq-pro, is wrong; it should be ős-norse.
  • proto-west germanic, the canonical name for the code gmw-pro, is wrong; it should be ős-west germanic.
  • proto-hellenic, the canonical name for the code grk-pro, is wrong; it should be ős-hellenic.
  • proto-hmong, the canonical name for the code hmn-pro, is wrong; it should be ős-hmong.
  • proto-mien, the canonical name for the code hmx-mie-pro, is wrong; it should be ős-mien.
  • proto-hmong-mien, the canonical name for the code hmx-pro, is wrong; it should be ős-hmong-mien.
  • proto-armenian, the canonical name for the code hyx-pro, is wrong; it should be ős-armenian.
  • proto-nuristani, the canonical name for the code iir-nur-pro, is wrong; it should be ős-nuristani.
  • proto-indo-iranian, the canonical name for the code iir-pro, is wrong; it should be ős-indo-iranian.
  • proto-ijoid, the canonical name for the code ijo-pro, is wrong; it should be ős-ijoid.
  • proto-dardic, the canonical name for the code inc-dar-pro, is wrong; it should be ős-dardic.
  • proto-indo-aryan, the canonical name for the code inc-pro, is wrong; it should be ős-indo-aryan.
  • proto-anatolian, the canonical name for the code ine-ana-pro, is wrong; it should be ős-anatolian.
  • proto-balto-slavic, the canonical name for the code ine-bsl-pro, is wrong; it should be ős-balti-szláv.
  • proto-indo-european, the canonical name for the code ine-pro, is wrong; it should be ősindoeurópai.
  • proto-tocharian, the canonical name for the code ine-toc-pro, is wrong; it should be ős-tocharian.
  • ingush, the canonical name for the code inh, is wrong; it should be ingus.
  • proto-komisenian, the canonical name for the code ira-kms-pro, is wrong; it should be ős-komisenian.
  • proto-munji-yidgha, the canonical name for the code ira-mny-pro, is wrong; it should be ős-munji-yidgha.
  • proto-medo-parthian, the canonical name for the code ira-mpr-pro, is wrong; it should be ős-medo-parthian.
  • proto-pathan, the canonical name for the code ira-pat-pro, is wrong; it should be ős-pathan.
  • proto-iranian, the canonical name for the code ira-pro, is wrong; it should be ős-iranian.
  • proto-sogdic, the canonical name for the code ira-sgc-pro, is wrong; it should be ős-sogdic.
  • proto-sanglechi-ishkashimi, the canonical name for the code ira-sgi-pro, is wrong; it should be ős-sanglechi-ishkashimi.
  • proto-shughni-roshani, the canonical name for the code ira-shr-pro, is wrong; it should be ős-shughni-roshani.
  • proto-shughni-yazghulami, the canonical name for the code ira-shy-pro, is wrong; it should be ős-shughni-yazghulami.
  • proto-shughni-yazghulami-munji, the canonical name for the code ira-sym-pro, is wrong; it should be ős-shughni-yazghulami-munji.
  • proto-zaza-gorani, the canonical name for the code ira-zgr-pro, is wrong; it should be ős-zaza-gorani.
  • proto-iroquoian, the canonical name for the code iro-pro, is wrong; it should be ős-iroquoian.
  • proto-italic, the canonical name for the code itc-pro, is wrong; it should be ős-italic.
  • judeo-italian, the canonical name for the code itk, is wrong; it should be judeo-olasz.
  • ingrian, the canonical name for the code izh, is wrong; it should be izsór.
  • proto-japonic, the canonical name for the code jpx-pro, is wrong; it should be ős-japonic.
  • proto-ryukyuan, the canonical name for the code jpx-ryu-pro, is wrong; it should be ős-ryukyuan.
  • proto-karen, the canonical name for the code kar-pro, is wrong; it should be ős-karen.
  • proto-khoe, the canonical name for the code khi-kho-pro, is wrong; it should be ős-khoe.
  • northern kurdish, the canonical name for the code kmr, is wrong; it should be északi kurd.
  • proto-kru, the canonical name for the code kro-pro, is wrong; it should be ős-kru.
  • livonian, the canonical name for the code liv, is wrong; it should be lív.
  • proto-atayalic, the canonical name for the code map-ata-pro, is wrong; it should be ős-atayalic.
  • proto-austronesian, the canonical name for the code map-pro, is wrong; it should be ős-austronesian.
  • proto-aslian, the canonical name for the code mkh-asl-pro, is wrong; it should be ős-aslian.
  • proto-bahnaric, the canonical name for the code mkh-ban-pro, is wrong; it should be ős-bahnaric.
  • proto-katuic, the canonical name for the code mkh-kat-pro, is wrong; it should be ős-katuic.
  • proto-khmuic, the canonical name for the code mkh-khm-pro, is wrong; it should be ős-khmuic.
  • proto-khmeric, the canonical name for the code mkh-kmr-pro, is wrong; it should be ős-khmeric.
  • proto-monic, the canonical name for the code mkh-mnc-pro, is wrong; it should be ős-monic.
  • proto-palaungic, the canonical name for the code mkh-pal-pro, is wrong; it should be ős-palaungic.
  • proto-pearic, the canonical name for the code mkh-pea-pro, is wrong; it should be ős-pearic.
  • proto-pakanic, the canonical name for the code mkh-pkn-pro, is wrong; it should be ős-pakanic.
  • proto-mon-khmer, the canonical name for the code mkh-pro, is wrong; it should be ős-mon-khmer.
  • proto-vietic, the canonical name for the code mkh-vie-pro, is wrong; it should be ős-vietic.
  • proto-munda, the canonical name for the code mun-pro, is wrong; it should be ős-munda.
  • proto-mayan, the canonical name for the code myn-pro, is wrong; it should be ős-mayan.
  • proto-chumash, the canonical name for the code nai-chu-pro, is wrong; it should be ős-chumash.
  • proto-chinookan, the canonical name for the code nai-ckn-pro, is wrong; it should be ős-chinookan.
  • proto-kalapuyan, the canonical name for the code nai-klp-pro, is wrong; it should be ős-kalapuyan.
  • proto-maidun, the canonical name for the code nai-mdu-pro, is wrong; it should be ős-maidun.
  • proto-mixe-zoque, the canonical name for the code nai-miz-pro, is wrong; it should be ős-mixe-zoque.
  • proto-plateau penutian, the canonical name for the code nai-plp-pro, is wrong; it should be ős-plateau penutian.
  • proto-pomo, the canonical name for the code nai-pom-pro, is wrong; it should be ős-pomo.
  • proto-siouan-catawban, the canonical name for the code nai-sca-pro, is wrong; it should be ős-siouan-catawban.
  • proto-totozoquean, the canonical name for the code nai-tot-pro, is wrong; it should be ős-totozoquean.
  • proto-tsimshianic, the canonical name for the code nai-tsi-pro, is wrong; it should be ős-tsimshianic.
  • proto-utian, the canonical name for the code nai-utn-pro, is wrong; it should be ős-utian.
  • proto-trans-new guinea, the canonical name for the code ngf-pro, is wrong; it should be ős-trans-new guinea.
  • proto-benue-congo, the canonical name for the code nic-bco-pro, is wrong; it should be ős-benue-congo.
  • proto-bantoid, the canonical name for the code nic-bod-pro, is wrong; it should be ős-bantoid.
  • proto-eastern oti-volta, the canonical name for the code nic-eov-pro, is wrong; it should be ős-eastern oti-volta.
  • proto-gurunsi, the canonical name for the code nic-gns-pro, is wrong; it should be ős-gurunsi.
  • proto-grassfields, the canonical name for the code nic-grf-pro, is wrong; it should be ős-grassfields.
  • proto-gur, the canonical name for the code nic-gur-pro, is wrong; it should be ős-gur.
  • proto-jukunoid, the canonical name for the code nic-jkn-pro, is wrong; it should be ős-jukunoid.
  • proto-lower cross river, the canonical name for the code nic-lcr-pro, is wrong; it should be ős-lower cross river.
  • proto-ogoni, the canonical name for the code nic-ogo-pro, is wrong; it should be ős-ogoni.
  • proto-oti-volta, the canonical name for the code nic-ovo-pro, is wrong; it should be ős-oti-volta.
  • proto-plateau, the canonical name for the code nic-plt-pro, is wrong; it should be ős-plateau.
  • proto-niger-congo, the canonical name for the code nic-pro, is wrong; it should be ős-niger-congo.
  • proto-ubangian, the canonical name for the code nic-ubg-pro, is wrong; it should be ős-ubangian.
  • proto-upper cross river, the canonical name for the code nic-ucr-pro, is wrong; it should be ős-upper cross river.
  • proto-volta-congo, the canonical name for the code nic-vco-pro, is wrong; it should be ős-volta-congo.
  • proto-nubian, the canonical name for the code nub-pro, is wrong; it should be ős-nubian.
  • proto-chatino, the canonical name for the code omq-cha-pro, is wrong; it should be ős-chatino.
  • proto-mazatec, the canonical name for the code omq-maz-pro, is wrong; it should be ős-mazatec.
  • proto-mixtecan, the canonical name for the code omq-mix-pro, is wrong; it should be ős-mixtecan.
  • proto-mixtec, the canonical name for the code omq-mxt-pro, is wrong; it should be ős-mixtec.
  • proto-oto-pamean, the canonical name for the code omq-otp-pro, is wrong; it should be ős-oto-pamean.
  • proto-oto-manguean, the canonical name for the code omq-pro, is wrong; it should be ős-oto-manguean.
  • proto-trique, the canonical name for the code omq-tri-pro, is wrong; it should be ős-trique.
  • proto-zapotecan, the canonical name for the code omq-zap-pro, is wrong; it should be ős-zapotecan.
  • proto-zapotec, the canonical name for the code omq-zpc-pro, is wrong; it should be ős-zapotec.
  • proto-aroid, the canonical name for the code omv-aro-pro, is wrong; it should be ős-aroid.
  • proto-dizoid, the canonical name for the code omv-diz-pro, is wrong; it should be ős-dizoid.
  • proto-omotic, the canonical name for the code omv-pro, is wrong; it should be ős-omotic.
  • ó-keleti-szláv, the canonical name for the code orv, is wrong; it should be óorosz.
  • proto-ossetic, the canonical name for the code os-pro, is wrong; it should be ős-ossetic.
  • proto-otomi, the canonical name for the code oto-otm-pro, is wrong; it should be ős-otomi.
  • proto-otomian, the canonical name for the code oto-pro, is wrong; it should be ős-otomian.
  • pennsylvania german, the canonical name for the code pdc, is wrong; it should be pennsylvaniai német.
  • proto-kalamian, the canonical name for the code phi-kal-pro, is wrong; it should be ős-kalamian.
  • proto-philippine, the canonical name for the code phi-pro, is wrong; it should be ős-philippine.
  • piedmontese, the canonical name for the code pms, is wrong; it should be piemonti.
  • proto-bungku-tolaki, the canonical name for the code poz-btk-pro, is wrong; it should be ős-bungku-tolaki.
  • proto-central-eastern malayo-polynesian, the canonical name for the code poz-cet-pro, is wrong; it should be ős-central-eastern malayo-polynesian.
  • proto-halmahera-cenderawasih, the canonical name for the code poz-hce-pro, is wrong; it should be ős-halmahera-cenderawasih.
  • proto-lampungic, the canonical name for the code poz-lgx-pro, is wrong; it should be ős-lampungic.
  • proto-malayo-chamic, the canonical name for the code poz-mcm-pro, is wrong; it should be ős-malayo-chamic.
  • proto-malayic, the canonical name for the code poz-mly-pro, is wrong; it should be ős-malayic.
  • proto-malayo-sumbawan, the canonical name for the code poz-msa-pro, is wrong; it should be ős-malayo-sumbawan.
  • proto-oceanic, the canonical name for the code poz-oce-pro, is wrong; it should be ős-oceanic.
  • proto-eastern polynesian, the canonical name for the code poz-pep-pro, is wrong; it should be ős-eastern polynesian.
  • proto-nuclear polynesian, the canonical name for the code poz-pnp-pro, is wrong; it should be ős-nuclear polynesian.
  • proto-polynesian, the canonical name for the code poz-pol-pro, is wrong; it should be ős-polynesian.
  • proto-malayo-polynesian, the canonical name for the code poz-pro, is wrong; it should be ős-malayo-polynesian.
  • proto-south sulawesi, the canonical name for the code poz-ssw-pro, is wrong; it should be ős-south sulawesi.
  • proto-sunda-sulawesi, the canonical name for the code poz-sus-pro, is wrong; it should be ős-sunda-sulawesi.
  • proto-north sarawak, the canonical name for the code poz-swa-pro, is wrong; it should be ős-north sarawak.
  • proto-eastern malayo-polynesian, the canonical name for the code pqe-pro, is wrong; it should be ős-eastern malayo-polynesian.
  • proto-great andamanese, the canonical name for the code qfa-adm-pro, is wrong; it should be ős-great andamanese.
  • proto-chukotko-kamchatkan, the canonical name for the code qfa-cka-pro, is wrong; it should be ős-chukotko-kamchatkan.
  • proto-hurro-urartian, the canonical name for the code qfa-hur-pro, is wrong; it should be ős-hurro-urartian.
  • proto-kadu, the canonical name for the code qfa-kad-pro, is wrong; it should be ős-kadu.
  • proto-kam-sui, the canonical name for the code qfa-kms-pro, is wrong; it should be ős-kam-sui.
  • proto-korean, the canonical name for the code qfa-kor-pro, is wrong; it should be ős-korean.
  • proto-kra, the canonical name for the code qfa-kra-pro, is wrong; it should be ős-kra.
  • proto-hlai, the canonical name for the code qfa-lic-pro, is wrong; it should be ős-hlai.
  • proto-ong-be, the canonical name for the code qfa-onb-pro, is wrong; it should be ős-ong-be.
  • proto-ongan, the canonical name for the code qfa-ong-pro, is wrong; it should be ős-ongan.
  • proto-kra-dai, the canonical name for the code qfa-tak-pro, is wrong; it should be ős-kra-dai.
  • proto-yeniseian, the canonical name for the code qfa-yen-pro, is wrong; it should be ős-yeniseian.
  • proto-yukaghir, the canonical name for the code qfa-yuk-pro, is wrong; it should be ős-yukaghir.
  • proto-jê, the canonical name for the code sai-jee-pro, is wrong; it should be ős-jê.
  • proto-salish, the canonical name for the code sal-pro, is wrong; it should be ős-salish.
  • proto-daju, the canonical name for the code sdv-daj-pro, is wrong; it should be ős-daju.
  • proto-eastern jebel, the canonical name for the code sdv-eje-pro, is wrong; it should be ős-eastern jebel.
  • proto-nilotic, the canonical name for the code sdv-nil-pro, is wrong; it should be ős-nilotic.
  • proto-nyima, the canonical name for the code sdv-nyi-pro, is wrong; it should be ős-nyima.
  • proto-taman, the canonical name for the code sdv-tmn-pro, is wrong; it should be ős-taman.
  • proto-semitic, the canonical name for the code sem-pro, is wrong; it should be ős-semitic.
  • proto-siouan, the canonical name for the code sio-pro, is wrong; it should be ős-siouan.
  • proto-hrusish, the canonical name for the code sit-hrs-pro, is wrong; it should be ős-hrusish.
  • proto-kham, the canonical name for the code sit-kha-pro, is wrong; it should be ős-kham.
  • proto-luish, the canonical name for the code sit-luu-pro, is wrong; it should be ős-luish.
  • proto-sino-tibetan, the canonical name for the code sit-pro, is wrong; it should be ős-sino-tibetan.
  • proto-tani, the canonical name for the code sit-tan-pro, is wrong; it should be ős-tani.
  • proto-slavic, the canonical name for the code sla-pro, is wrong; it should be ősszláv.
  • proto-samic, the canonical name for the code smi-pro, is wrong; it should be ős-samic.
  • proto-songhay, the canonical name for the code son-pro, is wrong; it should be ős-songhay.
  • proto-albanian, the canonical name for the code sqj-pro, is wrong; it should be ős-albanian.
  • proto-kuliak, the canonical name for the code ssa-klk-pro, is wrong; it should be ős-kuliak.
  • proto-koman, the canonical name for the code ssa-kom-pro, is wrong; it should be ős-koman.
  • proto-nilo-saharan, the canonical name for the code ssa-pro, is wrong; it should be ős-nilo-saharan.
  • proto-samoyedic, the canonical name for the code syd-pro, is wrong; it should be ős-samoyedic.
  • proto-tai, the canonical name for the code tai-pro, is wrong; it should be ős-tai.
  • proto-southwestern tai, the canonical name for the code tai-swe-pro, is wrong; it should be ős-southwestern tai.
  • proto-bodo-garo, the canonical name for the code tbq-bdg-pro, is wrong; it should be ős-bodo-garo.
  • proto-kuki-chin, the canonical name for the code tbq-kuk-pro, is wrong; it should be ős-kuki-chin.
  • proto-lalo, the canonical name for the code tbq-lal-pro, is wrong; it should be ős-lalo.
  • proto-lolo-burmese, the canonical name for the code tbq-lob-pro, is wrong; it should be ős-lolo-burmese.
  • proto-loloish, the canonical name for the code tbq-lol-pro, is wrong; it should be ős-loloish.
  • The code tok (toki pona) is missing.
  • proto-turkic, the canonical name for the code trk-pro, is wrong; it should be ős-turkic.
  • proto-tupi-guarani, the canonical name for the code tup-gua-pro, is wrong; it should be ős-tupi-guarani.
  • proto-tupian, the canonical name for the code tup-pro, is wrong; it should be ős-tupian.
  • proto-tungusic, the canonical name for the code tuw-pro, is wrong; it should be ős-tungusic.
  • proto-mordvinic, the canonical name for the code urj-mdv-pro, is wrong; it should be ős-mordvinic.
  • proto-permic, the canonical name for the code urj-prm-pro, is wrong; it should be ős-permic.
  • proto-uralic, the canonical name for the code urj-pro, is wrong; it should be ős-uralic.
  • proto-ugric, the canonical name for the code urj-ugr-pro, is wrong; it should be ős-ugric.
  • proto-mongolic, the canonical name for the code xgn-pro, is wrong; it should be ős-mongolic.
  • proto-tatic, the canonical name for the code xme-ttc-pro, is wrong; it should be ős-tatic.
  • proto-na-dene, the canonical name for the code xnd-pro, is wrong; it should be ős-na-dene.
  • proto-scythian, the canonical name for the code xsc-pro, is wrong; it should be ős-scythian.
  • proto-saka, the canonical name for the code xsc-sak-pro, is wrong; it should be ős-saka.
  • proto-saka-wakhi, the canonical name for the code xsc-skw-pro, is wrong; it should be ős-saka-wakhi.
  • proto-yupik, the canonical name for the code ypk-pro, is wrong; it should be ős-yupik.
  • proto-min, the canonical name for the code zhx-min-pro, is wrong; it should be ős-min.

Module:languages/data2

  • occidental, the canonical name for ie, is repeated in the table of aliases.

Module:languages/data3/g

  • kiribati, the canonical name for gil, is repeated in the table of aliases.

Module:languages/data3/o

  • orkhon, the canonical name for otk, is repeated in the table of otherNames.

Module:languages/datax

  • toki pona language (art-top) has a canonical name that is not unique; it is also used by the code tok.

Module:scripts/by name

  • bhaiksuki (Bhks) is missing
  • zhuyin (Bopo) is missing
  • brahmi (Brah) is missing
  • braille (Brai) is missing
  • buginese (Bugi) is missing
  • buhid (Buhd) is missing
  • chakma (Cakm) is missing
  • carian (Cari) is missing
  • cham (Cham) is missing
  • cherokee (Cher) is missing
  • chorasmian (Chrs) is missing
  • dogra (Dogr) is missing
  • deseret (Dsrt) is missing
  • duployan (Dupl) is missing
  • elbasan (Elba) is missing
  • khutsuri (Geok) is missing
  • gunjala gondi (Gong) is missing
  • masaram gondi (Gonm) is missing
  • gothic (Goth) is missing
  • grantha (Gran) is missing
  • gurmukhi (Guru) is missing
  • hangul (Hang) is missing
  • kínai (Hani) is missing
  • hanunoo (Hano) is missing
  • egyszerűsített kínai (Hans) is missing
  • hagyományos kínai (Hant) is missing
  • hatran (Hatr) is missing
  • iberian (Ibrn) is missing
  • image-rendered (Imag) is missing
  • indus (Inds) is missing
  • old italic (Ital) is missing
  • jurchen (Jurc) is missing
  • kayah li (Kali) is missing
  • katakana (Kana) is missing
  • kharoshthi (Khar) is missing
  • khmer (Khmr) is missing
  • khojki (Khoj) is missing
  • khitan large (Kitl) is missing
  • khitan small (Kits) is missing
  • kannada (Knda) is missing
  • kaithi (Kthi) is missing
  • tai tham (Lana) is missing
  • lao (Laoo) is missing
  • fraktur (Latf) is missing
  • leke (Leke) is missing
  • lepcha (Lepc) is missing
  • limbu (Limb) is missing
  • lisu (Lisu) is missing
  • lycian (Lyci) is missing
  • mahajani (Mahj) is missing
  • makasar (Maka) is missing
  • mandaic (Mand) is missing
  • manichaean (Mani) is missing
  • marchen (Marc) is missing
  • medefaidrin (Medf) is missing
  • mende (Mend) is missing
  • meroitic cursive (Merc) is missing
  • meroitic hieroglyphic (Mero) is missing
  • modi (Modi) is missing
  • mongolian (Mong) is missing
  • mro (Mroo) is missing
  • meitei mayek (Mtei) is missing
  • multani (Mult) is missing
  • burmai (Mymr) is missing
  • nabataean (Nbat) is missing
  • newa (Newa) is missing
  • n'Ko (Nkoo) is missing
  • unspecified (None) is missing
  • nushu (Nshu) is missing
  • ogham (Ogam) is missing
  • ol chiki (Olck) is missing
  • orkhon runes (Orkh) is missing
  • oriya (Orya) is missing
  • osage (Osge) is missing
  • osmanya (Osma) is missing
  • palmyrene (Palm) is missing
  • pau cin hau (Pauc) is missing
  • phags-pa (Phag) is missing
  • inscriptional pahlavi (Phli) is missing
  • psalter pahlavi (Phlp) is missing
  • book pahlavi (Phlv) is missing
  • pollard (Plrd) is missing
  • inscriptional parthian (Prti) is missing
  • rejang (Rjng) is missing
  • hanifi rohingya (Rohg) is missing
  • rúna (Runr) is missing
  • samaritan (Samr) is missing
  • saurashtra (Saur) is missing
  • signWriting (Sgnw) is missing
  • shavian (Shaw) is missing
  • sharada (Shrd) is missing
  • siddham (Sidd) is missing
  • khudawadi (Sind) is missing
  • sogdian (Sogd) is missing
  • old sogdian (Sogo) is missing
  • sorang sompeng (Sora) is missing
  • soyombo (Soyo) is missing
  • syloti nagri (Sylo) is missing
  • tagbanwa (Tagb) is missing
  • takri (Takr) is missing
  • tai nüa (Tale) is missing
  • new tai lue (Talu) is missing
  • tangut (Tang) is missing
  • tai viet (Tavt) is missing
  • tengwar (Teng) is missing
  • tifinagh (Tfng) is missing
  • baybayin (Tglg) is missing
  • thaana (Thaa) is missing
  • tibetan (Tibt) is missing
  • tirhuta (Tirh) is missing
  • ugaritic (Ugar) is missing
  • vai (Vaii) is missing
  • varang kshiti (Wara) is missing
  • yi (Yiii) is missing
  • zanabazar square (Zanb) is missing
  • matematikai jelölés (Zmth) is missing
  • meghatározatlan (Zyyy) is missing

Module:scripts/data

  • hiragana script (Hira) is not used by any language.
  • image-rendered script (Imag) is not used by any language and has no characters listed for auto-detection.
  • jurchen script (Jurc) is not used by any language and has no characters listed for auto-detection.
  • medefaidrin script (Medf) is not used by any language.
  • morse code (Morse) is not used by any language and has no characters listed for auto-detection.
  • flag semaphore (Semap) is not used by any language and has no characters listed for auto-detection.
  • uncoded script (Zzzz) is not used by any language and has no characters listed for auto-detection.

Checks performed szerkesztés

For multiple data modules:

  • Codes for languages, families and etymology-only languages must be unique and cannot clash with one another.
  • Canonical names for languages, families, and etymology-only languages must not be found in the list of other names.
  • Each name in the list of other names must appear only once.
  • otherNames, if present, must be an array.

The following must be true of the data used by Module:languages:

  • Each code must be defined in the correct submodule according to whether it is two-letter, three-letter or exceptional.
  • The canonical name (field 1) must be present and must not be the same as the canonical name of another language.
  • If scripts is given, it must be an array, and each string in the array must be a valid script code.
  • If ancestors is given, it must be an array, and each string in the array must be a valid language or etymology language code.
  • If family is given, it must be a valid family code.
  • If type is given, it must be one of the recognised values (regular, reconstructed, appendix-constructed).
  • If entry_name is given, it must be a table that contains either two arrays (from and to) or a string (remove_diacritics) or both.
  • If sort_key is given, it may either be a string, or at table that in turn contains either two arrays (from and to) or a string (remove_diacritics).
  • If entry_name or sort_key is given, the from array must be longer or equal in length to the to array.
  • If standardChars is given, it must form a valid Lua string pattern when placed between square brackets with ^ before it ("[^...]). (It should match all characters regularly used in the language, but that cannot be tested.)
  • Have no data keys besides these: "canonicalName", "entry_name", "sort_key", "otherNames", "type", "scripts", "family", "ancestors", "wikimedia_codes", "wikipedia_article", "standardChars", "translit_module", "override_translit", "link_tr", "wikidata_item".

Checks not performed:

  • If translit_module is present, it should be the name of a module, and this module should contain a tr function that takes a pagename (and optionally a language code and script code) as arguments.
  • If sort_key is a string, it should be the name of a module, and this module should contain a makeSortKey function that takes a pagename (and optionally a language code and script code) as arguments.
  • If entry_name or sort_key is a table and contains a field remove_diacritics, the value of the field should be a string that forms a valid Lua pattern when it is placed inside negated set notation ([^...]).

These are not checked here, because module errors will quickly crop up in entries if these conditions are not met, assuming that Module:utilities attempts to generate a sortkey for a category pertaining to the language in question, or full_link attempts to use the transliteration module.

Module:languages/code to canonical name and Module:languages/canonical names must contain all the codes and canonical names found in the data submodules of Module:languages, and no more.

The following must be true of the data used by Module:etymology languages:

  • canonicalName must be given.
  • parent must be given must be a valid language, family or etymology-only language code.
  • If ancestors is given, it must be an array, and each string in the array must be a valid language or etymology language code. The etymology language should also be listed as the ancestor of a regular language.
  • Have no data keys besides these: "canonicalName", "otherNames", "parent", "ancestors", "wikipedia_article", "wikidata_item".

Codes in Module:families data must:

  • Have canonicalName, which must not be the same as the canonical name of another family.
  • If family is given, it must be a valid family code.
  • Have at least one language or subfamily belonging to it.
  • Have no data keys besides these: "canonicalName", "otherNames", "family", "protoLanguage", "wikidata_item".

Codes in Module:scripts data must:

  • Have canonicalName.
  • Have at least one language that lists it as one of its scripts.
  • Have a characters pattern for script autodetection, and this must form a valid Lua string pattern when placed between square brackets ("[...]"). (It should match all characters in the script, but that cannot be tested.)
  • Have no data keys besides these: "canonicalName", "otherNames", "parent", "systems", "wikipedia_article", "characters", "direction".

local export = {}

local m_language_data = require("Module:languages/alldata")
local m_language_codes = require('Module:languages/code to canonical name')
local m_language_canonical_names = require('Module:languages/canonical names')
local m_etym_language_data = require("Module:etymology languages/data")
local m_family_data = require('Module:families/data')
local m_script_data = require('Module:scripts/data')

local m_table = require("Module:table")
local Array = require("Module:array")

local messages

local function discrepancy(modname, ...)
	messages[modname]:insert(string.format(...))
end

local all_codes = {}

local language_names = {}
local family_names = {}
local script_names = {}

local nonempty_families = {}
local allowed_empty_families = {tbq = true}
local nonempty_scripts = {}
	
local function link(name)
	if not name then
		return "???"
	elseif name:find("[Ll]anguage$") then
		return "[[:Category:" .. name .. "|" .. name .. "]]"
	else
		return "[[:Category:" .. name .. " language|" .. name .. " language]]"
	end
end
	
local function link_script(name)
	if not name then
		return "???"
	elseif name:find("[Cc]ode$") or name:find("[Ss]emaphore$") then
		return "[[:Category:" .. name:gsub("^%l", string.upper) .. "|" .. name .. "]]"
	else
		return "[[:Category:" .. name .. " script|" .. name .. " script]]"
	end
end

local function invalid_keys_message(modname, code, data, invalid_keys, is_script)
	local plural = #invalid_keys ~= 1
	discrepancy(modname, "The data key%s %s for %s (<code>%s</code>) %s invalid.",
		plural and "s" or "",
		invalid_keys
			:map(
				function(key)
					return '<code>' .. key .. '</code>'
				end)
			:concat(", "),
		(is_script and link_script or link)(data.canonicalName or data[1]),
		code,
		plural and "are" or "is")
end

local function check_data_keys(valid_keys, is_script)
	valid_keys = Array(valid_keys):to_set()
	
	return function (modname, code, data)
		local invalid_keys
		for k in pairs(data) do
			if not valid_keys[k] then
				invalid_keys = invalid_keys or Array()
				invalid_keys:insert(k)
			end
		end
		if invalid_keys then
			invalid_keys_message(modname, code, data, invalid_keys, is_script)
		end
	end
end

-- Modification of isArray in [[Module:table]].
local function find_gap(t)
	local i = 0
	for _ in pairs(t) do
		i = i + 1
		if t[i] == nil then
			return i
		end
	end
end

local function check_array(modname, code, data, array_name)
	local gap = find_gap(data[array_name])
	if gap then
		discrepancy(modname, "The %s array in the data table for %s (<code>%s</code>) has a gap at index %d.",
			array_name, data.canonicalName or data[1], code, gap)
	end
end

local function check_other_names_or_aliases(modname, code, canonical_name, data, data_key, allow_nested)
	local array = data[data_key]
	if not array then
		return
	end
	check_array(modname, code, data, data_key)

	local names = {}
	local function check_other_name(other_name)
		if other_name == canonical_name then
			discrepancy(modname,
				"%s, the canonical name for <code>%s</code>, is repeated in the table of <code>%s</code>.",
				canonical_name, code, data_key)
		end
		if names[other_name] then
			discrepancy(modname,
				"The name %s is found twice or more in the list of <code>%s</code> for %s (<code>%s</code>).",
				other_name, data_key, canonical_name, code)
		end
		names[other_name] = true
	end

	for _, other_name in ipairs(array) do
		if type(other_name) == "table" then
			if not allow_nested then
				discrepancy(modname,
					"A nested table is found in the list of <code>%s</code> for %s (<code>%s</code>), but isn't allowed.",
					data_key, canonical_name, code)
			else
				for _, on in ipairs(other_name) do
					check_other_name(on)
				end
			end
		else
			check_other_name(other_name)
		end
	end
end

local function check_other_names_aliases_varieties(modname, code, canonical_name, data)
	if data.otherNames then
		check_other_names_or_aliases(modname, code, canonical_name, data, "otherNames")
	end
	if data.aliases then
		check_other_names_or_aliases(modname, code, canonical_name, data, "aliases")
	end
	if data.varieties then
		check_other_names_or_aliases(modname, code, canonical_name, data, "varieties", true)
	end
end

local get_codepoint = mw.ustring.codepoint
local function validate_pattern(pattern, modname, code, data, standardChars)
	if type(pattern) ~= "string" then
		discrepancy(modname, '"%s", the %spattern for %s (<code>%s</code>), is not a string.',
			pattern, standardChars and 'standard character ' or '', code, data.canonicalName)
	end
	local ranges
	for lower, higher in mw.ustring.gmatch(pattern, "(.)%-(.)") do
		if get_codepoint(lower) >= get_codepoint(higher) then
			ranges = ranges or Array()
			table.insert(ranges, { lower, higher })
		end
	end
	if ranges and ranges[1] then
		local plural = #ranges ~= 1 and "s" or ""
		discrepancy(modname, '%s (<code>%s</code>) specifies an invalid pattern ' ..
			'for %scharacter detection: <code>"%s"</code>. The first codepoint%s ' ..
			'in the range%s %s %s must be less than the second.',
			link(data.canonicalName), code, standardChars and 'standard ' or '', pattern, plural, plural,
			ranges
				:map(
					function(range)
						return range[1] .. "-" .. range[2] .. (" (U+%X, U+%X)")
							:format(get_codepoint(range[1]), get_codepoint(range[2]))
					end)
				:concat(", "),
			#ranges ~= 1 and "are" or "is")
	end
	if not pcall(mw.ustring.find, "", "[" .. pattern .. "]") then
		discrepancy(modname, '%s (<code>%s</code>) specifies an invalid pattern for ' ..
			(standardChars and 'standard' or '') .. ' character detection: <code>"%s"</code>',
			link(data.canonical_name), code, pattern)
	end
end

local function check_entry_name_or_sortkey(modname, code, data, replacements_name)
	local replacements = data[replacements_name]
	if type(replacements) == "string" then
		if replacements_name ~= "sort_key" then
			discrepancy(modname, "The %s field in the data table for %s (<code>%s</code>) must be a table.",
				replacements_name, data.canonicalName, code)
		end
		return
	end
	
	if (replacements.from ~= nil) ~= (replacements.to ~= nil) then
		discrepancy(modname,
			"The <code>from</code> and <code>to</code> arrays in the <code>%s</code> table for %s (<code>%s</code>) are not both defined or both undefined.",
			replacements_name, data.canonicalName, code)
	elseif replacements.from then
		for _, key in ipairs { "from", "to" } do
			local gap = find_gap(replacements[key])
			if gap then
				discrepancy(modname,
					"The %s array in the %s table for %s (<code>%s</code>) has a gap at index %d.",
					key, replacements_name, data.canonicalName, code, gap)
			end
		end
	end
	
	if replacements.remove_diacritics and type(replacements.remove_diacritics) ~= "string" then
		discrepancy(modname,
			"The <code>remove_diacritics</code> field in the <code>%s</code> table for %s (<code>%s</code>) table must be a string.",
			replacements_name, data.canonicalName, code)
	end
	
	if replacements.from and replacements.to
			and m_table.length(replacements.to) > m_table.length(replacements.from) then
		discrepancy(modname,
			"The <code>from</code> array in the <code>%s</code> table for %s (<code>%s</code>) must be shorter or the same length as the <code>to</code> array.",
			replacements_name, data.canonicalName, code)
	end
end

local function has_regular_language_child(parent_code)
	for code, data in pairs(m_language_data) do
		local ancestors = data.ancestors
		if ancestors then
			for _, ancestor in pairs(ancestors) do
				if ancestor == parent_code then
					return true
				end
			end
		end
	end
	return false
end

local function check_ancestors(modname, code, data, ancestors, is_etymology_language)
	check_array(modname, code, data, "ancestors")
	
	local canonical_name = data[1] or data.canonicalName
	if is_etymology_language then
		if not has_regular_language_child(code) then
			discrepancy(modname,
				"The etymology language %s (<code>%s</code>) has an <code>ancestors</code> field, "
				.. "but no regular languages list it as an ancestor.",
				link(canonical_name), code)
		end
	end
	
	for _, ancestor_code in ipairs(ancestors) do
		if not (m_language_data[ancestor_code] or m_etym_language_data[ancestor_code]) then
			discrepancy(modname,
				"%s (<code>%s</code>) lists an invalid language code <code>%s</code> as ancestor.",
				link(canonical_name), code, ancestor_code)
		end
	end
end

local function check_languages()
	local check_language_data_keys = check_data_keys{
		1, 2, 3, -- canonical name, wikidata item, family
		"entry_name", "sort_key", "otherNames", "aliases", "varieties",
		"type", "scripts", "ancestors",
		"wikimedia_codes", "wikipedia_article", "standardChars",
		"translit_module", "override_translit", "link_tr",
	}
	
	local function check_language(modname, code, data)
		local canonical_name, wikidata_item, lang_type = data[1], data[2], data.type
		
		check_language_data_keys(modname, code, data)
		
		if all_codes[code] then
			discrepancy(modname, "Code <code>%s</code> is not unique; it is also defined in [[Module:%s]].", code, all_codes[code])
		else
			if not m_language_codes[code] then
				discrepancy("languages/code to canonical name", "The code <code>%s</code> (%s) is missing.", code, canonical_name)
			end
			all_codes[code] = modname
		end
		
		if not canonical_name then
			discrepancy(modname, "Code <code>%s</code> has no canonical name specified.", code)
		elseif language_names[canonical_name] then
			discrepancy(modname,
				"%s (<code>%s</code>) has a canonical name that is not unique; it is also used by the code <code>%s</code>.",
				link(canonical_name), code, language_names[canonical_name])
		else
			if not m_language_canonical_names[canonical_name] then
				discrepancy("languages/canonical names", "The canonical name %s (<code>%s</code>) is missing.", canonical_name, code)
			end
			language_names[canonical_name] = code
		end
		
		if wikidata_item then
			if not wikidata_item:match '^Q%d+$' then
				discrepancy(modname,
					"%s (<code>%s</code>) has a Wikidata item with an invalid form: <code>%s</code>.",
					canonical_name, code, wikidata_item)
			end
		end

		check_other_names_aliases_varieties(modname, code, canonical_name, data)
		
		if lang_type and not (lang_type == "regular" or lang_type == "reconstructed" or lang_type == "appendix-constructed") then
			discrepancy(modname, "%s (<code>%s</code>) is of an invalid type <code>%s</code>.", link(canonical_name), code, data.type)
		end
		
		if data.scripts then
			check_array(modname, code, data, "scripts")
			if not data.scripts[1] then
				discrepancy(modname, "%s (<code>%s</code>) has no scripts listed.", link(canonical_name), code)
			else
				for _, sccode in ipairs(data.scripts) do
					if not m_script_data[sccode] then
						discrepancy(modname,
							"%s (<code>%s</code>) lists an invalid script code <code>%s</code>.",
							link(canonical_name), code, sccode)
					end
		
					nonempty_scripts[sccode] = true
				end
			end
		end
		
		if data.ancestors then
			check_ancestors(modname, code, data, data.ancestors, false)
		end
		
		if data[3] then
			local family = data[3]
			if not m_family_data[family] then
				discrepancy(modname,
					"%s (<code>%s</code>) has an invalid family code <code>%s</code>.",
					link(canonical_name), code, family)
			end
			
			nonempty_families[family] = true
		end
		
		if data.sort_key then
			check_entry_name_or_sortkey(modname, code, data, "sort_key")
		end
		
		if data.entry_name then
			check_entry_name_or_sortkey(modname, code, data, "entry_name")
		end

		if data.standardChars then
			validate_pattern(data.standardChars, modname, code, data, true)
		end
	end
	
	-- Check two-letter codes
	local modname = "languages/data2"
	local data2 = require("Module:" .. modname)
	
	for code, data in pairs(data2) do
		if not code:find("^[a-z][a-z]$") then
			discrepancy(modname, '%s (<code>%s</code>) does not have a two-letter code.', link(data.canonicalName), code)
		end
		
		check_language(modname, code, data)
	end
	
	-- Check three-letter codes
	for i = string.byte('a'), string.byte('z') do
		local letter = string.char(i)
		local modname = "languages/data3/" .. letter
		local data3 = require("Module:" .. modname)
		local code_pattern = "^" .. letter .. "[a-z][a-z]$"
		
		for code, data in pairs(data3) do
			if not code:find(code_pattern) then
				discrepancy(modname,
					'%s (<code>%s</code>) does not have a three-letter code starting with "<code>%s</code>".',
					link(data.canonicalName), code, letter)
			end
			
			check_language(modname, code, data)
		end
	end
	
	-- Check exceptional codes
	modname = "languages/datax"
	local datax = require("Module:" .. modname)
	
	for code, data in pairs(datax) do
		if code:find("^[a-z][a-z][a-z]?$") then
			discrepancy(modname, '%s (<code>%s</code>) has a two- or three-letter code.', link(data.canonicalName), code)
		end
		
		check_language(modname, code, data)
	end
	
	-- These checks must be done while all_codes only contains language codes:
	-- that is, after language data modules have been processed, but before
	-- etymology languages, families, and scripts have.
	local function check_code_and_name(modname, code, canonical_name)
		if not all_codes[code] then
			if not language_names[canonical_name] then
				discrepancy(modname,
					"The code <code>%s</code> and the canonical name %s should be removed; they are not found in a submodule of [[Module:languages]].",
					code, canonical_name)
			else
				discrepancy(modname,
					"<code>%s</code>, the code for the canonical name %s, is wrong; it should be <code>%s</code>.",
					code, canonical_name, language_names[canonical_name])
			end
		elseif not language_names[canonical_name] then
			local data_table = require("Module:" .. all_codes[code])[code]
			discrepancy(modname,
				"%s, the canonical name for the code <code>%s</code>, is wrong; it should be %s.",
				canonical_name, code, data_table[1] or data_table.canonicalName)
		end
	end
	
	for code, canonical_name in pairs(m_language_codes) do
		check_code_and_name("languages/code to canonical name", code, canonical_name)
	end
	
	for canonical_name, code in pairs(m_language_canonical_names) do
		check_code_and_name("languages/canonical names", code, canonical_name)
	end		
end

local function check_etym_languages()
	local modname = "etymology languages/data"
	
	local check_etymology_language_data_keys = check_data_keys{
		"canonicalName", "otherNames", "aliases", "varieties", "parent",
		"wikipedia_article", "wikidata_item", "ancestors"
	}
	
	local function link(name)
		if not name then
			return "???"
		elseif name:find("[Ll]anguage$") then
			return name
		else
			return name .. " language"
		end
	end
	
	for code, data in pairs(m_etym_language_data) do
		local canonical_name, parent, ancestors =
			data.canonicalName, data.parent, data.ancestors
		check_etymology_language_data_keys(modname, code, data)
		
		if all_codes[code] then
			discrepancy(modname, "Code <code>%s</code> is not unique; it is also defined in [[Module:%s]].", code, all_codes[code])
		else
			all_codes[code] = modname
		end
		
		if not canonical_name then
			discrepancy(modname, "Code <code>%s</code> has no canonical name specified.", code)
		elseif language_names[canonical_name] then
			--[=[
			discrepancy(modname,
				"%s (<code>%s</code>) has a canonical name that is not unique; it is also used by the code <code>%s</code>.",
				link(data.names[1]), code, language_names[data.names[1]])
			--]=]
		else
			language_names[canonical_name] = code
		end
		
		check_other_names_aliases_varieties(modname, code, canonical_name, data)
		
		if parent then
			if type(parent) ~= "string" then
				discrepancy(modname,
					"Etymology-only %s (<code>%s</code>) has a parent language or family code that is %s rather than a string.",
					link(canonical_name), code, parent == nil and "nil" or "a " .. type(parent))
			elseif not (m_language_data[parent] or m_family_data[parent] or m_etym_language_data[parent]) then
				discrepancy(modname,
					"Etymology-only %s (<code>%s</code>) has invalid parent language or family code <code>%s</code>.",
					link(canonical_name), code, parent)
			end
			
			nonempty_families[parent] = true
		else
			discrepancy(modname,
				"Etymology-only %s (<code>%s</code>) has no parent language or family code.",
				link(canonical_name), code)
		end
		
		if ancestors then
			check_ancestors(modname, code, data, ancestors, true)
		end
	end

	local checked = {}
	for code, data in pairs(m_etym_language_data) do
		local stack = {}

		while data do
			if checked[data] then
				break	
			end
			if stack[data] then
				discrepancy(modname, "%s (<code>%s</code>) has a cyclic parental relationship to %s (<code>%s</code>)",
					link(data[1] or data.canonicalName), code,
					link(m_etym_language_data[data.parent].canonicalName), data.parent
				)
				break
			end
			stack[data] = true
			code, data = data.parent, data.parent and m_etym_language_data[data.parent]
		end
		
		for data in pairs(stack) do
			checked[data] = true	
		end
	end
end

local function check_families()
	local modname = "families/data"
	
	local check_family_data_keys = check_data_keys{
		"canonicalName", "otherNames", "aliases", "varieties", "family",
		"protoLanguage", "wikidata_item"
	}

	local function link(name)
		if not name then
			return "???"
		elseif name:find("[Ll]anguages$") then
			return "[[:Category:" .. name .. "|" .. name .. " family]]"
		else
			return "[[:Category:" .. name .. " languages|" .. name .. " family]]"
		end
	end
	
	for code, data in pairs(m_family_data) do
		check_family_data_keys(modname, code, data)
		
		if all_codes[code] then
			discrepancy(modname, "Code <code>%s</code> is not unique; it is also defined in [[Module:%s]].", code, all_codes[code])
		else
			all_codes[code] = modname
		end
		
		if not data.canonicalName then
			discrepancy(modname, "<code>%s</code> has no canonical name specified.", code)
		elseif family_names[data.canonicalName] then
			discrepancy(modname,
				"%s (<code>%s</code>) has a canonical name that is not unique; it is also used by the code <code>%s</code>.",
				link(data.canonicalName), code, family_names[data.canonicalName])
		else
			family_names[data.canonicalName] = code
		end
		
		check_other_names_aliases_varieties(modname, code, data.canonicalName, data)
		
		if data.family then
			if data.family == code and code ~= "qfa-not" then
				discrepancy(modname,
					"%s (<code>%s</code>) has itself as its family.",
					link(data.canonicalName), code)
			elseif not m_family_data[data.family] then
				discrepancy(modname,
					"%s (<code>%s</code>) has an invalid parent family code <code>%s</code>.",
					link(data.canonicalName), code, data.family)
			end
			
			nonempty_families[data.family] = true
		end
	end
	
	for code, data in pairs(m_family_data) do
		if not (nonempty_families[code] or allowed_empty_families[code]) then
			discrepancy(modname, "%s (<code>%s</code>) has no child families or languages.", link(data.canonicalName), code)
		end
	end

	local checked = { ['qfa-not'] = true }
	for code, data in pairs(m_family_data) do
		local stack = {}

		while data do
			if checked[code] then
				break	
			end
			if stack[code] then
				discrepancy(modname, "%s (<code>%s</code>) has a cyclic parental relationship to %s (<code>%s</code>)",
					link(data[1] or data.canonicalName), code,
					link(m_family_data[data[3]].canonicalName), data[3]
				)
				break
			end
			stack[code] = true
			code, data = data.family, m_family_data[data[3]]
		end
		
		for code in pairs(stack) do
			checked[code] = true	
		end
	end
end

local function check_scripts()
	local modname = "scripts/data"
	
	local check_script_data_keys = check_data_keys({
		"canonicalName", "otherNames", "aliases", "varieties", "parent",
		"systems", "wikipedia_article", "characters", "direction",
		"character_category",
	}, true)
	
	local m_script_codes = require('Module:scripts/code to canonical name')
	local m_script_canonical_names = require('Module:scripts/by name')
	
	for code, data in pairs(m_script_data) do
		local canonical_name = data.canonicalName
		if not m_script_codes[code] and #code == 4 then
			discrepancy('scripts/code to canonical name', '<code>%s</code> (%s) is missing', code, canonical_name)
		end
		
		check_script_data_keys(modname, code, data)
		
		if not canonical_name then
			discrepancy(modname, "Code <code>%s</code> has no canonical name specified.", code)
		elseif script_names[canonical_name] then
			--[=[
			discrepancy(modname,
				"%s (<code>%s</code>) has a canonical name that is not unique; it is also used by the code <code>%s</code>.",
				link_script(data.names[1]), code, script_names[data.names[1]])
			--]=]
		else
			if not m_script_canonical_names[canonical_name] and #code == 4 then
				discrepancy('scripts/by name', '%s (<code>%s</code>) is missing', canonical_name, code)
			end
			script_names[canonical_name] = code
		end
		
		check_other_names_aliases_varieties(modname, code, canonical_name, data)
		
		if not nonempty_scripts[code] then
			discrepancy(modname,
				"%s (<code>%s</code>) is not used by any language%s.",
				link_script(canonical_name), code, data.characters and ""
					or " and has no characters listed for auto-detection")
		--[[
		elseif not data.characters then
			discrepancy(modname, "%s (<code>%s</code>) has no characters listed for auto-detection.", link_script(canonical_name), code)
		--]]
		end

		if data.characters then
			validate_pattern(data.characters, modname, code, data, false)
		end
	end
end

-- Warning: cannot be called twice in the same module invocation because
-- some module-global variables are not reset between calls.
function export.do_checks()
	messages = setmetatable({}, {
		__index = function (self, k)
			local val = Array()
			self[k] = val
			return val
		end
	})
	
	check_languages()
	check_etym_languages()

	-- families and scripts must be checked AFTER languages; languages checks fill out
	-- the nonempty_families and nonempty_scripts tables, used for testing if a family/script
	-- is ever used in the data
	check_families()
	check_scripts()
	
	setmetatable(messages, nil)
	
	local function find_code(message)
		return string.match(message, "<code>([^<]+)</code>")
	end
	
	find_code = require("Module:fun").memoize(find_code)
	
	local function comp(message1, message2)
		local code1, code2 = find_code(message1), find_code(message2)
		if code1 and code2 then
			return code1 < code2
		else
			return message1 < message2
		end
	end
	
	for modname, msglist in pairs(messages) do
		msglist:sort(comp)
	end
	
	local ret = messages
	messages = nil
	return ret
end

function export.format_message(modname, msglist)
	return '===[[Module:' .. modname .. ']]==='
		.. msglist
			:map(
				function(msg)
					return "\n* " .. msg
				end)
			:concat()
end

function export.check_modules(...)
	local ret = Array()
	local messages = export.do_checks()
	for _, module in ipairs {...} do
		local msglist = messages[module]
		if msglist then
			ret:insert(export.format_message(module, msglist))
		end
	end
	return ret:concat("\n")
end

function export.check_modules_t(frame)
	local args = m_table.shallowcopy(frame.args)
	return export.check_modules(unpack(args))
end

function export.perform(frame)
	local messages = export.do_checks()
	
	-- Format the messages
	local ret = Array()
	for modname, msglist in m_table.sortedPairs(messages) do
		ret:insert(export.format_message(modname, msglist))
	end
	
	-- Are there any messages?
	if i == 1 then
		return '<b class="success">Glory to Arstotzka.</b>'
	else
		ret:insert(1, '<b class="warning">Discrepancies detected:</b>')
		
		return ret:concat('\n')
	end
end

return export