Blob Blame History Raw
/*
 * iso639-2 language codes
 */
#include <string.h>
#include "iso639_2.h"

typedef struct {
	char *code1;
	char *code2;
	unsigned char main;
	char *language;
} iso639_2_t;

static iso639_2_t iso639_2[] = {
	{ "abk", "",    1, "Abkhazian" },
	{ "ace", "",    1, "Achenese" },
	{ "ace", "",    1, "Achinese" },
	{ "ach", "",    1, "Acoli" },
	{ "ada", "",    1, "Adangme" },
	{ "ady", "",    1, "Adygei" },
	{ "ady", "",    1, "Adyghe" },
	{ "aar", "",    1, "Afar" },
	{ "afh", "",    1, "Afrihili" },
	{ "afr", "",    1, "Afrikaans" },
	{ "afa", "",    1, "Afroasiatic languages" },
	{ "ain", "",    1, "Ainu" },
	{ "aka", "",    1, "Akan" },
	{ "akk", "",    1, "Akkadian" },
	{ "alb", "sqi", 1, "Albanian" },
	{ "gsw", "",    1, "Alemannic" },
	{ "ale", "",    1, "Aleut" },
	{ "alg", "",    1, "Algonquian languages" },
	{ "gsw", "",    1, "Alsatian" },
	{ "alt", "",    1, "Altai, Southern" },
	{ "tut", "",    1, "Altaic languages" },
	{ "amh", "",    1, "Amharic" },
	{ "egy", "",    1, "Ancient Egyptian" },
	{ "grc", "",    1, "Ancient Greek" },
	{ "anp", "",    1, "Angika" },
	{ "apa", "",    1, "Apache languages" },
	{ "arc", "",    1, "Aramaic, Imperial" },
	{ "arc", "",    1, "Aramaic, Official" },
	{ "arp", "",    1, "Arapaho" },
	{ "arw", "",    1, "Arawak" },
	{ "arg", "",    1, "Argonese" },
	{ "arm", "hye", 1, "Armenian" },
	{ "rup", "",    1, "Aromanian" },
	{ "art", "",    1, "Artificial languages" },
	{ "rup", "",    1, "Arumanian" },
	{ "asm", "",    1, "Assamese" },
	{ "ast", "",    1, "Asturian" },
	{ "ast", "",    1, "Asturleonese" },
	{ "ath", "",    1, "Athabaskan languages" },
	{ "aus", "",    1, "Australian languages" },
	{ "map", "",    1, "Austronesian languages" },
	{ "ava", "",    1, "Avaric" },
	{ "ave", "",    1, "Avestan" },
	{ "awa", "",    1, "Awadhi" },
	{ "aze", "",    1, "Azerbaijani" },
	{ "ast", "",    1, "Bable" },
	{ "ban", "",    1, "Balinese" },
	{ "bat", "",    1, "Baltic languages" },
	{ "bal", "",    1, "Baluchi" },
	{ "bam", "",    1, "Bambara" },
	{ "bai", "",    1, "Bamileke languages" },
	{ "bad", "",    1, "Banda languages" },
	{ "bnt", "",    1, "Bantu languages" },
	{ "bas", "",    1, "Basa" },
	{ "bak", "",    1, "Bashkir" },
	{ "baq", "eus", 1, "Basque" },
	{ "bej", "",    1, "Bedawiyet" },
	{ "bej", "",    1, "Beja" },
	{ "bel", "",    1, "Belarusian" },
	{ "bem", "",    1, "Bemba" },
	{ "ben", "",    1, "Bengali" },
	{ "ber", "",    1, "Berber languages" },
	{ "bho", "",    1, "Bhojpuri" },
	{ "bih", "",    1, "Bihari languages" },
	{ "bik", "",    1, "Bikol" },
	{ "byn", "",    1, "Bilin" },
	{ "bin", "",    1, "Bini" },
	{ "bis", "",    1, "Bislama" },
	{ "bla", "",    1, "Blackfoot" },
	{ "byn", "",    1, "Blin" },
	{ "zbl", "",    1, "Blissymbols" },
	{ "bos", "",    1, "Bosnian" },
	{ "bra", "",    1, "Braj" },
	{ "btk", "",    1, "Bratak languages" },
	{ "bre", "",    1, "Breton" },
	{ "bug", "",    1, "Buginese" },
	{ "bul", "",    1, "Bulgarian" },
	{ "bua", "",    1, "Buriat" },
	{ "bur", "mya", 1, "Burmese" },
	{ "cad", "",    1, "Caddo" },
	{ "spa", "",    0, "Castilian" },
	{ "cat", "",    1, "Catalan" },
	{ "cau", "",    1, "Caucasian languages" },
	{ "ceb", "",    1, "Cebuano" },
	{ "cel", "",    1, "Celtic languages" },
	{ "cai", "",    1, "Central American Indian languages" },
	{ "khm", "",    1, "Central Khmer" },
	{ "chg", "",    1, "Chagatai" },
	{ "cmc", "",    1, "Chamic languages" },
	{ "cha", "",    1, "Chamorro" },
	{ "che", "",    1, "Chechen" },
	{ "chr", "",    1, "Cherokee" },
	{ "nya", "",    1, "Chewa" },
	{ "chy", "",    1, "Cheyenne" },
	{ "chb", "",    1, "Chibcha" },
	{ "nya", "",    1, "Chichewa" },
	{ "chi", "zho", 1, "Chinese" },
	{ "chn", "",    1, "Chinook Jargon" },
	{ "chp", "",    1, "Chipewyan" },
	{ "cho", "",    1, "Choctaw" },
	{ "zha", "",    1, "Chuang" },
	{ "chu", "",    1, "Church Slavic" },
	{ "chu", "",    1, "Church Slavonic" },
	{ "chk", "",    1, "Chuukese" },
	{ "chv", "",    1, "Chuvash" },
	{ "kbd", "",    1, "Circassian" },
	{ "nwc", "",    1, "Classical Nepal Bhasa" },
	{ "nwc", "",    1, "Classical Newari" },
	{ "syc", "",    1, "Classical Syriac" },
	{ "rar", "",    1, "Cook Islands Maori" },
	{ "cop", "",    1, "Coptic" },
	{ "cor", "",    1, "Cornish" },
	{ "cos", "",    1, "Corsican" },
	{ "cre", "",    1, "Cree" },
	{ "mus", "",    1, "Creek" },
	{ "crp", "",    1, "creoles and pidgins" },
	{ "cpe", "",    1, "creoles and pidgins, English-based" },
	{ "cpf", "",    1, "creoles and pidgins, French-based" },
	{ "cpp", "",    1, "creoles and pidgins, Portuguese-based" },
	{ "crh", "",    1, "Crimean Tartar" },
	{ "crh", "",    1, "Crimean Turkish" },
	{ "hrv", "",    1, "Croatian" },
	{ "cus", "",    1, "Cushitic languages" },
	{ "cze", "ces", 1, "Czech" },
	{ "dak", "",    1, "Dakota" },
	{ "dan", "",    1, "Danish" },
	{ "dar", "",    1, "Dargwa" },
	{ "del", "",    1, "Delaware" },
	{ "chp", "",    1, "Dene Suline" },
	{ "div", "",    1, "Dhivehi" },
	{ "din", "",    1, "Dinka" },
	{ "div", "",    1, "Divehi" },
	{ "doi", "",    1, "Dogri" },
	{ "dgr", "",    1, "Dogrib" },
	{ "dra", "",    1, "Dravidian languages" },
	{ "dua", "",    1, "Duala" },
	{ "dut", "",    1, "Dutch" },
	{ "dum", "",    1, "Dutch, Middle" },
	{ "dyu", "",    1, "Dyula" },
	{ "dzo", "",    1, "Dzongkha" },
	{ "frs", "",    1, "Eastern Frisian" },
	{ "bin", "",    1, "Edo" },
	{ "efi", "",    1, "Efik" },
	{ "egy", "",    1, "Egyptian (Ancient)" },
	{ "eka", "",    1, "Ekajuk" },
	{ "elx", "",    1, "Elamite" },
	{ "eng", "",    1, "English" },
	{ "enm", "",    0, "English, Middle" },
	{ "ang", "",    0, "English, Old" },
	{ "myv", "",    1, "Erzya" },
	{ "epo", "",    1, "Esperanto" },
	{ "est", "",    1, "Estonian" },
	{ "ewe", "",    1, "Ewe" },
	{ "ewo", "",    1, "Ewondo" },
	{ "fan", "",    1, "Fang" },
	{ "fat", "",    1, "Fanti" },
	{ "fao", "",    1, "Faroese" },
	{ "fij", "",    1, "Fijian" },
	{ "fil", "",    1, "Filipino" },
	{ "fin", "",    1, "Finnish" },
	{ "fiu", "",    1, "Finno-Ugric languages" },
	{ "dut", "",    1, "Flemish" },
	{ "fon", "",    1, "Fon" },
	{ "fre", "fra", 1, "French" },
	{ "frm", "",    0, "French, Middle" },
	{ "fro", "",    0, "French, Old" },
	{ "frs", "",    1, "Frisian, Eastern" },
	{ "frr", "",    1, "Frisian, Northern" },
	{ "fry", "",    1, "Frisian, Western" },
	{ "fur", "",    1, "Friulian" },
	{ "ful", "",    1, "Fulah" },
	{ "gaa", "",    1, "Ga" },
	{ "gla", "",    1, "Gaelic" },
	{ "car", "",    1, "Galibi Carib" },
	{ "lug", "",    1, "Ganda" },
	{ "gay", "",    1, "Gayo" },
	{ "gba", "",    1, "Gbaya" },
	{ "gez", "",    1, "Ge'ez" },
	{ "geo", "kat", 1, "Georgian" },
	{ "ger", "deu", 1, "German" },
	{ "nds", "",    1, "German, Low" },
	{ "gmh", "",    1, "German, Middle High" },
	{ "goh", "",    1, "German, Old High" },
	{ "gem", "",    1, "Germanic languages" },
	{ "kik", "",    1, "Gikuyu" },
	{ "gil", "",    1, "Gilbertese" },
	{ "gon", "",    1, "Gondi" },
	{ "gor", "",    1, "Gorontalo" },
	{ "got", "",    1, "Gothic" },
	{ "grb", "",    1, "Grebo" },
	{ "grc", "",    1, "Greek, Ancient" },
	{ "gre", "ell", 1, "Greek, Modern" },
	{ "kal", "",    1, "Greenlandic" },
	{ "grn", "",    1, "Guarani" },
	{ "guj", "",    1, "Gujarati" },
	{ "gwi", "",    1, "Gwich'in" },
	{ "hai", "",    1, "Haida" },
	{ "hat", "",    1, "Haitian" },
	{ "hat", "",    1, "Haitian Creole" },
	{ "hau", "",    1, "Hausa" },
	{ "haw", "",    1, "Hawaiian" },
	{ "heb", "",    1, "Hebrew" },
	{ "hil", "",    1, "Hiligaynon" },
	{ "him", "",    1, "Himachali languages" },
	{ "hin", "",    1, "Hindi" },
	{ "hmo", "",    1, "Hiri Motu" },
	{ "hit", "",    1, "Hittite" },
	{ "hmn", "",    1, "Hmong" },
	{ "hun", "",    1, "Hungarian" },
	{ "hup", "",    1, "Hupa" },
	{ "iba", "",    1, "Iban" },
	{ "ice", "isl", 1, "Icelandic" },
	{ "ido", "",    1, "Ido" },
	{ "ibo", "",    1, "Igbo" },
	{ "ijo", "",    1, "Ijo languages" },
	{ "ilo", "",    1, "Iloko" },
	{ "arc", "",    1, "Imperial Aramaic" },
	{ "smn", "",    1, "Inari Sami" },
	{ "inc", "",    1, "Indic languages" },
	{ "ine", "",    1, "Indo-European languages" },
	{ "ind", "",    1, "Indonesian" },
	{ "inh", "",    1, "Ingush" },
	{ "ina", "",    1, "Interlingua" },
	{ "ile", "",    1, "Interlingue, Occidental" },
	{ "iku", "",    1, "Inuktitut" },
	{ "ipk", "",    1, "Inupiaq" },
	{ "ira", "",    1, "Iranian languages" },
	{ "mga", "",    1, "Irish, Middle" },
	{ "sga", "",    1, "Irish, Old" },
	{ "iro", "",    1, "Iroquoian languages" },
	{ "ita", "",    1, "Italian" },
	{ "jpn", "",    1, "Japanese" },
	{ "jav", "",    1, "Javanese" },
	{ "kac", "",    1, "Jingpho" },
	{ "jrb", "",    1, "Judaeo-Arabic" },
	{ "jpr", "",    1, "Judaeo-Persian" },
	{ "kab", "",    1, "Kabyle" },
	{ "kac", "",    1, "Kachin" },
	{ "kal", "",    1, "Kalaallisut" },
	{ "xal", "",    1, "Kalmyk" },
	{ "kam", "",    1, "Kamba" },
	{ "kan", "",    1, "Kannada" },
	{ "kau", "",    1, "Kanuri" },
	{ "pam", "",    1, "Kapampangan" },
	{ "kaa", "",    1, "Kara-Kalpak" },
	{ "krc", "",    1, "Karachay-Balkar" },
	{ "krl", "",    1, "Karelian" },
	{ "kar", "",    1, "Karen languages" },
	{ "kas", "",    1, "Kashmiri" },
	{ "csb", "",    1, "Kashubian" },
	{ "kaw", "",    1, "Kawi" },
	{ "kaz", "",    1, "Kazakh" },
	{ "kha", "",    1, "Khasi" },
	{ "khi", "",    1, "Khoisan languages" },
	{ "kho", "",    1, "Khotanese" },
	{ "kik", "",    1, "Kikuyu" },
	{ "kmb", "",    1, "Kimbundu" },
	{ "kin", "",    1, "Kinyarwanda" },
	{ "kir", "",    1, "Kirghiz" },
	{ "gil", "",    1, "Kiribati" },
	{ "tlh", "",    1, "Klingon" },
	{ "kom", "",    1, "Komi" },
	{ "kon", "",    1, "Kongo" },
	{ "kok", "",    1, "Konkani" },
	{ "kor", "",    1, "Korean" },
	{ "kos", "",    1, "Kosraean" },
	{ "kpe", "",    1, "Kpelle" },
	{ "kro", "",    1, "Kru languages" },
	{ "kua", "",    1, "Kuanyama" },
	{ "kum", "",    1, "Kumyk" },
	{ "kur", "",    1, "Kurdish" },
	{ "kru", "",    1, "Kurukh" },
	{ "kut", "",    1, "Kutenai" },
	{ "kua", "",    1, "Kwanyama" },
	{ "kir", "",    1, "Kyrgyz" },
	{ "lad", "",    1, "Ladino" },
	{ "lah", "",    1, "Lahnda" },
	{ "lam", "",    1, "Lamba" },
	{ "day", "",    1, "Land Dayak languages" },
	{ "lao", "",    1, "Lao" },
	{ "lat", "",    1, "Latin" },
	{ "lav", "",    1, "Latvian" },
	{ "ast", "",    1, "Leonese" },
	{ "ltz", "",    1, "Letzeburgesch" },
	{ "lez", "",    1, "Lezghian" },
	{ "lim", "",    1, "Limburgan" },
	{ "lim", "",    1, "Limburger" },
	{ "lim", "",    1, "Limburgish" },
	{ "lin", "",    1, "Lingala" },
	{ "lit", "",    1, "Lithuanian" },
	{ "jbo", "",    1, "Lojban" },
	{ "nds", "",    1, "Low German" },
	{ "nds", "",    1, "Low Saxon" },
	{ "dsb", "",    1, "Lower Sorbian" },
	{ "loz", "",    1, "Lozi" },
	{ "lub", "",    1, "Luba-Katanga" },
	{ "lua", "",    1, "Luba-Lulua" },
	{ "lui", "",    1, "Luiseno" },
	{ "smj", "",    1, "Lule Sami" },
	{ "lun", "",    1, "Lunda" },
	{ "luo", "",    1, "Luo" },
	{ "luo", "",    1, "Luo (Kenya and Tanzania)" },
	{ "lus", "",    1, "Lushai" },
	{ "ltz", "",    1, "Luxembourgish" },
	{ "mas", "",    1, "Maasai" },
	{ "rup", "",    1, "Macedo-Romanian" },
	{ "mac", "mkd", 1, "Macedonian" },
	{ "mad", "",    1, "Madurese" },
	{ "mag", "",    1, "Magahi" },
	{ "mai", "",    1, "Maithili" },
	{ "mak", "",    1, "Makasar" },
	{ "mlg", "",    1, "Malagasy" },
	{ "may", "msa", 1, "Malay" },
	{ "mal", "",    1, "Malayalam" },
	{ "div", "",    1, "Maldivian" },
	{ "mlt", "",    1, "Maltese" },
	{ "mnc", "",    1, "Manchu" },
	{ "mdr", "",    1, "Mandar" },
	{ "man", "",    1, "Mandingo" },
	{ "mni", "",    1, "Manipuri" },
	{ "mno", "",    1, "Manobo languages" },
	{ "glv", "",    1, "Manx" },
	{ "mao", "mri", 1, "Maori" },
	{ "arn", "",    1, "Mapuche" },
	{ "arn", "",    1, "Mapudungun" },
	{ "mar", "",    1, "Marathi" },
	{ "chm", "",    1, "Mari" },
	{ "mah", "",    1, "Marshallese" },
	{ "mwr", "",    1, "Marwari" },
	{ "myn", "",    1, "Mayan languages" },
	{ "men", "",    1, "Mende" },
	{ "mic", "",    1, "Mi'kmaq" },
	{ "mic", "",    1, "Micmac" },
	{ "dum", "",    1, "Middle Dutch" },
	{ "enm", "",    1, "Middle English" },
	{ "frm", "",    1, "Middle French" },
	{ "gmh", "",    1, "Middle High German" },
	{ "mga", "",    1, "Middle Irish" },
	{ "pal", "",    1, "Middle Persian" },
	{ "min", "",    1, "Minangkabau" },
	{ "mwl", "",    1, "Mirandese" },
	{ "gre", "ell", 1, "Modern Greek" },
	{ "moh", "",    1, "Mohawk" },
	{ "mdf", "",    1, "Moksha" },
	{ "mkh", "",    1, "Mon-Khmer languages" },
	{ "lol", "",    1, "Mongo" },
	{ "mon", "",    1, "Mongolian" },
	{ "mos", "",    1, "Mossi" },
	{ "mul", "",    1, "Multiple languages" },
	{ "mun", "",    1, "Munda languages" },
	{ "nqo", "",    1, "N'Ko" },
	{ "nah", "",    1, "Nahuatl" },
	{ "nau", "",    1, "Nauruan" },
	{ "nav", "",    1, "Navaho" },
	{ "nav", "",    1, "Navajo" },
	{ "ndo", "",    1, "Ndonga" },
	{ "nap", "",    1, "Neapolitan" },
	{ "new", "",    1, "Nepal Bhasa" },
	{ "nep", "",    1, "Nepali" },
	{ "new", "",    1, "Newari" },
	{ "nia", "",    1, "Nias" },
	{ "nic", "",    1, "Niger-Congo languages" },
	{ "ssa", "",    1, "Nilo-Saharan languages" },
	{ "niu", "",    1, "Niuean" },
	{ "nog", "",    1, "Nogai" },
	{ "non", "",    0, "Norse, Old" },
	{ "nai", "",    1, "North American Indian languages" },
	{ "frr", "",    1, "Northern Frisian" },
	{ "nde", "",    1, "Northern Ndebele" },
	{ "sme", "",    1, "Northern Sami" },
	{ "nso", "",    1, "Northern Sotho" },
	{ "nob", "",    1, "Norwegian Bokmaal" },
	{ "nno", "",    1, "Norwegian Nynorsk" },
	{ "zxx", "",    1, "Not linguistic content; not applicable" },
	{ "nub", "",    1, "Nubian languages" },
	{ "iii", "",    1, "Nuosu" },
	{ "nym", "",    1, "Nyamwezi" },
	{ "nya", "",    1, "Nyanja" },
	{ "nyn", "",    1, "Nyankole" },
	{ "nyr", "",    1, "Nyoro" },
	{ "nzi", "",    1, "Nzima" },
	{ "oci", "",    1, "Occitan" },
	{ "pro", "",    0, "Occitan, Old" },
	{ "arc", "",    1, "Official Aramaic" },
	{ "xal", "",    1, "Oirat" },
	{ "oji", "",    1, "Ojibwa" },
	{ "chu", "",    1, "Old Bulgarian" },
	{ "chu", "",    1, "Old Church Slavonic" },
	{ "ang", "",    1, "Old English" },
	{ "fro", "",    1, "Old French" },
	{ "goh", "",    1, "Old High German" },
	{ "sga", "",    1, "Old Irish" },
	{ "nwc", "",    1, "Old Newari" },
	{ "non", "",    1, "Old Norse" },
	{ "pro", "",    1, "Old Occitan" },
	{ "peo", "",    1, "Old Persian" },
	{ "pro", "",    1, "Old Provencal" },
	{ "chu", "",    1, "Old Slavonic" },
	{ "ori", "",    1, "Oriya" },
	{ "orm", "",    1, "Oromo" },
	{ "osa", "",    1, "Osage" },
	{ "oss", "",    1, "Ossetian" },
	{ "oss", "",    1, "Ossetic" },
	{ "oto", "",    1, "Otomian languages" },
	{ "ota", "",    1, "Ottoman Turkish" },
	{ "pal", "",    1, "Pahlavi" },
	{ "pau", "",    1, "Palauan" },
	{ "pli", "",    1, "Pali" },
	{ "pam", "",    1, "Pampanga" },
	{ "pag", "",    1, "Pangasinan" },
	{ "pan", "",    1, "Panjabi" },
	{ "pap", "",    1, "Papiamento" },
	{ "paa", "",    1, "Papuan languages" },
	{ "pus", "",    1, "Pashto" },
	{ "pus", "",    1, "Pashto language" },
	{ "nso", "",    1, "Pedi" },
	{ "per", "fas", 1, "Persian" },
	{ "pal", "",    0, "Persian, Middle" },
	{ "peo", "",    0, "Persian, Old" },
	{ "phi", "",    1, "Philippine languages" },
	{ "phn", "",    1, "Phoenician" },
	{ "fil", "",    0, "Pilipino" },
	{ "pon", "",    1, "Pohnpeian" },
	{ "pol", "",    1, "Polish" },
	{ "por", "",    1, "Portuguese" },
	{ "pra", "",    1, "Prakit" },
	{ "pro", "",    0, "Provencal, Old" },
	{ "pan", "",    1, "Punjabi" },
	{ "que", "",    1, "Quechua" },
	{ "raj", "",    1, "Rajasthani" },
	{ "rap", "",    1, "Rapanui" },
	{ "rar", "",    1, "Rarotongan" },
	{ "roa", "",    1, "Romance languages" },
	{ "rum", "ron", 1, "Romanian" },
	{ "roh", "",    1, "Romansh" },	
	{ "rom", "",    1, "Romany" },
	{ "run", "",    1, "Rundi" },
	{ "rus", "",    1, "Russian" },
	{ "kho", "",    1, "Sakan" },
	{ "sal", "",    1, "Salishan languages" },
	{ "sam", "",    1, "Samaritan Aramaic" },
	{ "smi", "",    1, "Sami languages" },
	{ "smo", "",    1, "Samoan" },
	{ "sad", "",    1, "Sandawe" },
	{ "sag", "",    1, "Sango" },
	{ "san", "",    1, "Sanskrit" },
	{ "sat", "",    1, "Santali" },
	{ "srd", "",    1, "Sardinian" },
	{ "sas", "",    1, "Sasak" },
	{ "nds", "",    1, "Saxon, Low" },
	{ "sco", "",    1, "Scots" },
	{ "gla", "",    1, "Scottish Gaelic" },
	{ "sel", "",    1, "Selkup" },
	{ "sem", "",    1, "Semitic languages" },
	{ "nso", "",    1, "Sepedi" },
	{ "srp", "",    1, "Serbian" },
	{ "srr", "",    1, "Serer" },
	{ "shn", "",    1, "Shan" },
	{ "sna", "",    1, "Shona" },
	{ "iii", "",    1, "Sichuan Yi" },
	{ "scn", "",    1, "Sicilian" },
	{ "sid", "",    1, "Sidamo" },
	{ "sgn", "",    1, "Sign languages" },
	{ "bla", "",    1, "Siksika" },
	{ "snd", "",    1, "Sindhi" },
	{ "sin", "",    1, "Sinhala" },
	{ "sin", "",    1, "Sinhalese" },
	{ "sit", "",    1, "Sino-Tibetan languages" },
	{ "sio", "",    1, "Siouan languages" },
	{ "sms", "",    1, "Skolt Sami" },
	{ "den", "",    1, "Slave (Athapascan)" },
	{ "sla", "",    1, "Slavic languages" },
	{ "slo", "slk", 1, "Slovak" },
	{ "slv", "",    1, "Slovenian" },
	{ "sog", "",    1, "Sogdian" },
	{ "som", "",    1, "Somali" },
	{ "son", "",    1, "Songhay languages" },
	{ "snk", "",    1, "Soninke" },
	{ "wen", "",    1, "Sorbian languages" },
	{ "dsb", "",    1, "Sorbian, Lower" },
	{ "hsb", "",    1, "Sorbian, Upper" },
	{ "sai", "",    1, "South American Indian languages" },
	{ "alt", "",    1, "Southern Altai" },
	{ "nbl", "",    1, "Southern Ndebele" },
	{ "sma", "",    1, "Southern Sami" },
	{ "sot", "",    1, "Southern Sotho" },
	{ "spa", "",    1, "Spanish" },
	{ "srn", "",    1, "Sranan Tongo" },
	{ "zgh", "",    1, "Standard Moroccan Tamazight" },
	{ "suk", "",    1, "Sukuma" },
	{ "sux", "",    1, "Sumerian" },
	{ "sun", "",    1, "Sundanese" },
	{ "sus", "",    1, "Susu" },
	{ "swa", "",    1, "Swahili" },
	{ "ssw", "",    1, "Swati" },
	{ "swe", "",    1, "Swedish" },
	{ "gsw", "",    1, "Swiss German" },
	{ "syr", "",    1, "Syriac" },
	{ "tgl", "",    1, "Tagalog" },
	{ "tah", "",    1, "Tahitian" },
	{ "tai", "",    1, "Tai languages" },
	{ "tgk", "",    1, "Tajik" },
	{ "tmh", "",    1, "Tamashek" },
	{ "tam", "",    1, "Tamil" },
	{ "tat", "",    1, "Tatar" },
	{ "tel", "",    1, "Telugu" },
	{ "ter", "",    1, "Tereno" },
	{ "tet", "",    1, "Tetum" },
	{ "tha", "",    1, "Thai" },
	{ "tib", "bod", 1, "Tibetan" },
	{ "tig", "",    1, "Tigre" },
	{ "tir", "",    1, "Tigrinya" },
	{ "tem", "",    1, "Time" },
	{ "tiv", "",    1, "Tiv" },
	{ "tli", "",    1, "Tlingit" },
	{ "tpi", "",    1, "Tok Pisin" },
	{ "tkl", "",    1, "Tokelau" },
	{ "tog", "",    1, "Tonga (Nyasa)" },
	{ "ton", "",    1, "Tonga (Tonga Islands)" },
	{ "tsi", "",    1, "Tsimshian" },
	{ "tso", "",    1, "Tsonga" },
	{ "tsn", "",    1, "Tswana" },
	{ "tum", "",    1, "Tumbuka" },
	{ "tup", "",    1, "Tupian languages" },
	{ "tur", "",    1, "Turkish" },
	{ "ota", "",    1, "Turkish, Ottoman" },
	{ "tuk", "",    1, "Turkmen" },
	{ "tvl", "",    1, "Tuvalu" },
	{ "tyv", "",    1, "Tuvinian" },
	{ "twi", "",    1, "Twi" },
	{ "udm", "",    1, "Udmurt" },
	{ "uga", "",    1, "Ugaritic" },
	{ "uig", "",    1, "Uighur" },
	{ "ukr", "",    1, "Ukranian" },
	{ "umb", "",    1, "Umbundu" },
	{ "mis", "",    1, "Uncoded languages" },
	{ "und", "",    1, "Undetermined language" },
	{ "hsb", "",    1, "Upper Sorbian" },
	{ "urd", "",    1, "Urdu" },
	{ "uig", "",    1, "Uyghur" },
	{ "uzb", "",    1, "Uzbek" },
	{ "vai", "",    1, "Vai" },
	{ "cat", "",    1, "Valencian" },
	{ "ven", "",    1, "Venda" },
	{ "vie", "",    1, "Vietnamese" },
	{ "vol", "",    1, "Volapuk" },
	{ "vot", "",    1, "Voltic" },
	{ "wak", "",    1, "Wakashan languages" },
	{ "wln", "",    1, "Walloon" },
	{ "war", "",    1, "Waray-Waray" },
	{ "was", "",    1, "Washo" },
	{ "wel", "cym", 1, "Welsh" },
	{ "fry", "",    1, "Western Frisian" },
	{ "wal", "",    1, "Wolaitta" },
	{ "wal", "",    1, "Wolaytta" },
	{ "wol", "",    1, "Wolof" },
	{ "xho", "",    1, "Xhosa" },
	{ "sah", "",    1, "Yakut" },
	{ "yao", "",    1, "Yao" },
	{ "yap", "",    1, "Yapese" },
	{ "yid", "",    1, "Yidish" },
	{ "yor", "",    1, "Yoruba" },
	{ "ypk", "",    1, "Yupik languages" },
	{ "znd", "",    1, "Zande languages" },
	{ "zap", "",    1, "Zapotec" },
	{ "zza", "",    1, "Zaza" },
	{ "zza", "",    1, "Zazaki" },
	{ "zen", "",    1, "Zenaga" },
	{ "zha", "",    1, "Zhuang" },
	{ "zul", "",    1, "Zulu" },
	{ "zun", "",    1, "Zuni" },
};
static int niso639_2= sizeof( iso639_2 ) / sizeof( iso639_2[0] );

char *
iso639_2_from_code( char *code )
{
	int i;
	for ( i=0; i<niso639_2; ++i ) {
		if ( !iso639_2[i].main ) continue;
		if ( !strcasecmp( iso639_2[i].code1, code ) )
			return iso639_2[i].language;
		if ( iso639_2[i].code2[0]!='\0' && !strcasecmp( iso639_2[i].code2, code ) )
			return iso639_2[i].language;
	}
	return NULL;
}

char *
iso639_2_from_language( char *lang )
{
	int i, n;
	for ( i=0; i<niso639_2; ++i ) {
		n = strcasecmp( iso639_2[i].language, lang );
		if ( n==0 ) return iso639_2[i].code1;
		if ( n > 0 ) return NULL;
	}
	return NULL;
}

#ifdef TEST

#include <stdio.h>
#include <stdlib.h>

static int
check_alphabetical( void )
{
	char *l1, *l2;
	int i, ret = 1;
	l1 = iso639_2[0].language;
	for ( i=0; i<niso639_2-1; ++i ) {
		l2 = iso639_2[i+1].language;
		if ( strcasecmp( l1, l2 ) >= 0 ) {
			fprintf( stderr, "Swap '%s' and '%s'\n", l1, l2 );
			ret = 0;
		}
		l1 = l2;
	}
	return ret;
}

int
main( int argc, char *argv[] )
{
	int ok;
	ok = check_alphabetical();
	if ( ok ) return EXIT_SUCCESS;
	return EXIT_FAILURE;
}

#endif