diff --git a/src/java.base/share/classes/java/util/LocaleISOData.java b/src/java.base/share/classes/java/util/LocaleISOData.java index 0204eec2edd..d102ad5c87e 100644 --- a/src/java.base/share/classes/java/util/LocaleISOData.java +++ b/src/java.base/share/classes/java/util/LocaleISOData.java @@ -45,7 +45,7 @@ class LocaleISOData { + "ba" + "bak" // Bashkir + "be" + "bel" // Belarusian + "bg" + "bul" // Bulgarian - + "bh" + "bih" // Bihari + + "bh" + "bih" // Bihari languages + "bi" + "bis" // Bislama + "bm" + "bam" // Bambara + "bn" + "ben" // Bengali @@ -78,10 +78,10 @@ class LocaleISOData { + "fj" + "fij" // Fijian + "fo" + "fao" // Faroese + "fr" + "fra" // French - + "fy" + "fry" // Frisian + + "fy" + "fry" // Western Frisian + "ga" + "gle" // Irish + "gd" + "gla" // Scottish Gaelic - + "gl" + "glg" // Gallegan + + "gl" + "glg" // Galician + "gn" + "grn" // Guarani + "gu" + "guj" // Gujarati + "gv" + "glv" // Manx @@ -115,7 +115,7 @@ class LocaleISOData { + "kj" + "kua" // Kwanyama + "kk" + "kaz" // Kazakh + "kl" + "kal" // Greenlandic - + "km" + "khm" // Khmer + + "km" + "khm" // Central Khmer + "kn" + "kan" // Kannada + "ko" + "kor" // Korean + "kr" + "kau" // Kanuri @@ -155,7 +155,7 @@ class LocaleISOData { + "nr" + "nbl" // South Ndebele + "nv" + "nav" // Navajo + "ny" + "nya" // Nyanja - + "oc" + "oci" // Occitan + + "oc" + "oci" // Occitan (post 1500) + "oj" + "oji" // Ojibwa + "om" + "orm" // Oromo + "or" + "ori" // Oriya @@ -166,7 +166,7 @@ class LocaleISOData { + "ps" + "pus" // Pushto + "pt" + "por" // Portuguese + "qu" + "que" // Quechua - + "rm" + "roh" // Raeto-Romance + + "rm" + "roh" // Romansh + "rn" + "run" // Rundi + "ro" + "ron" // Romanian + "ru" + "rus" // Russian @@ -176,7 +176,7 @@ class LocaleISOData { + "sd" + "snd" // Sindhi + "se" + "sme" // Northern Sami + "sg" + "sag" // Sango - + "si" + "sin" // Sinhalese + + "si" + "sin" // Sinhala + "sk" + "slk" // Slovak + "sl" + "slv" // Slovenian + "sm" + "smo" // Samoan diff --git a/test/jdk/java/util/Locale/Bug4175998Test.java b/test/jdk/java/util/Locale/Bug4175998Test.java index 61bb55cfcc3..e62d8396de9 100644 --- a/test/jdk/java/util/Locale/Bug4175998Test.java +++ b/test/jdk/java/util/Locale/Bug4175998Test.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ * @library /java/text/testlib * @compile -encoding ascii Bug4175998Test.java * @run main Bug4175998Test - * @bug 4175998 + * @bug 4175998 8303917 */ /* @@ -43,6 +43,8 @@ * */ +import java.io.BufferedReader; +import java.io.FileReader; import java.util.*; /** @@ -58,13 +60,12 @@ public class Bug4175998Test extends IntlTest { public void testIt() throws Exception { boolean bad = false; - for (int i = 0; i < CODES.length; i++) { - final String[] localeCodes = CODES[i]; + for (final String[] localeCodes : CODES) { final Locale l = Locale.of(localeCodes[0]); final String iso3 = l.getISO3Language(); - if (!iso3.equals(localeCodes[1]) /*&& !iso3.equals(localeCodes[2])*/) { - logln("Locale("+l+") returned bad ISO3 language code." - +" Got '"+iso3+"' instead of '"+localeCodes[1]+"'"/*+" or '"+localeCodes[2]+"'"*/); + if (!iso3.equals(localeCodes[1])) { + logln("Locale(" + l + ") returned bad ISO3 language code." + + " Got '" + iso3 + "' instead of '" + localeCodes[1] + "'"); bad = true; } } @@ -74,782 +75,217 @@ public class Bug4175998Test extends IntlTest { } private static final String[][] CODES = { - {"pt","por","por"}, - {"eu","eus","baq"}, - {"ps","pus","pus"}, - {"et","est","est"}, - {"ka","kat","geo"}, - {"es","spa","spa"}, - {"eo","epo","epo"}, - {"en","eng","eng"}, - {"pl","pol","pol"}, - {"el","ell","gre"}, - {"uz","uzb","uzb"}, - {"jv","jav","jav"}, - {"ur","urd","urd"}, - {"uk","ukr","ukr"}, - {"ug","uig","uig"}, - {"zu","zul","zul"}, - {"ja","jpn","jpn"}, - {"or","ori","ori"}, - {"om","orm","orm"}, - {"zh","zho","chi"}, - {"tw","twi","twi"}, - {"de","deu","ger"}, - {"oc","oci","oci"}, - {"za","zha","zha"}, - {"tt","tat","tat"}, - {"iu","iku","iku"}, - {"ts","tso","tso"}, - {"it","ita","ita"}, - {"tr","tur","tur"}, - {"da","dan","dan"}, - {"is","isl","ice"}, - {"to","ton","ton"}, - {"tl","tgl","tgl"}, - {"tk","tuk","tuk"}, - {"ik","ipk","ipk"}, - {"ti","tir","tir"}, - {"th","tha","tha"}, - {"tg","tgk","tgk"}, - {"te","tel","tel"}, - {"cy","cym","wel"}, - {"ie","ile","ile"}, - {"id","ind","ind"}, - {"ta","tam","tam"}, - {"ia","ina","ina"}, - {"cs","ces","cze"}, - {"yo","yor","yor"}, - {"no","nor","nor"}, - {"co","cos","cos"}, - {"nl","nld","dut"}, - {"yi","yid","yid"}, - {"hy","hye","arm"}, - {"sw","swa","swa"}, - {"ne","nep","nep"}, - {"sv","swe","swe"}, - {"su","sun","sun"}, - {"hu","hun","hun"}, - {"na","nau","nau"}, - {"sr","srp","scc"}, - {"ca","cat","cat"}, - {"sq","sqi","alb"}, - {"hr","hrv","scr"}, - {"so","som","som"}, - {"sn","sna","sna"}, - {"sm","smo","smo"}, - {"sl","slv","slv"}, - {"sk","slk","slo"}, - {"si","sin","sin"}, - {"hi","hin","hin"}, - {"my","mya","bur"}, - {"sd","snd","snd"}, - {"he","heb","heb"}, - {"sa","san","san"}, - {"mt","mlt","mlt"}, - {"ms","msa","may"}, - {"ha","hau","hau"}, - {"mr","mar","mar"}, - {"br","bre","bre"}, - {"mo","mol","mol"}, - {"bo","bod","tib"}, - {"mn","mon","mon"}, - {"bn","ben","ben"}, - {"ml","mal","mal"}, - {"mk","mkd","mac"}, - {"xh","xho","xho"}, - {"mi","mri","mao"}, - {"bi","bis","bis"}, - {"bh","bih","bih"}, - {"mg","mlg","mlg"}, - {"bg","bul","bul"}, - {"rw","kin","kin"}, - {"be","bel","bel"}, - {"ru","rus","rus"}, - {"gu","guj","guj"}, - {"ba","bak","bak"}, - {"ro","ron","rum"}, - {"rm","roh","roh"}, - {"gn","grn","grn"}, - {"az","aze","aze"}, - {"ay","aym","aym"}, - {"gd","gla","gla"}, - {"lv","lav","lav"}, - {"lt","lit","lit"}, - {"ga","gle","gle"}, - {"as","asm","asm"}, - {"ar","ara","ara"}, - {"wo","wol","wol"}, - {"ln","lin","lin"}, - {"am","amh","amh"}, - {"fy","fry","fry"}, - {"af","afr","afr"}, - {"qu","que","que"}, - {"ab","abk","abk"}, - {"la","lat","lat"}, - {"aa","aar","aar"}, - {"fr","fra","fre"}, - {"fo","fao","fao"}, - {"fj","fij","fij"}, - {"fi","fin","fin"}, - {"ky","kir","kir"}, - {"ku","kur","kur"}, - {"fa","fas","per"}, - {"ks","kas","kas"}, - {"vo","vol","vol"}, - {"ko","kor","kor"}, - {"kn","kan","kan"}, - {"kk","kaz","kaz"}, - {"vi","vie","vie"}, + {"aa","aar","aar"}, + {"ab","abk","abk"}, + {"af","afr","afr"}, + {"ak","aka","aka"}, + {"sq","sqi","alb"}, + {"am","amh","amh"}, + {"ar","ara","ara"}, + {"an","arg","arg"}, + {"hy","hye","arm"}, + {"as","asm","asm"}, + {"av","ava","ava"}, + {"ae","ave","ave"}, + {"ay","aym","aym"}, + {"az","aze","aze"}, + {"ba","bak","bak"}, + {"bm","bam","bam"}, + {"eu","eus","baq"}, + {"be","bel","bel"}, + {"bn","ben","ben"}, + {"bh","bih","bih"}, + {"bi","bis","bis"}, + {"bs","bos","bos"}, + {"br","bre","bre"}, + {"bg","bul","bul"}, + {"my","mya","bur"}, + {"ca","cat","cat"}, + {"ch","cha","cha"}, + {"ce","che","che"}, + {"zh","zho","chi"}, + {"cu","chu","chu"}, + {"cv","chv","chv"}, + {"kw","cor","cor"}, + {"co","cos","cos"}, + {"cr","cre","cre"}, + {"cs","ces","cze"}, + {"da","dan","dan"}, + {"dv","div","div"}, + {"nl","nld","dut"}, + {"dz","dzo","dzo"}, + {"en","eng","eng"}, + {"eo","epo","epo"}, + {"et","est","est"}, + {"ee","ewe","ewe"}, + {"fo","fao","fao"}, + {"fj","fij","fij"}, + {"fi","fin","fin"}, + {"fr","fra","fre"}, + {"fy","fry","fry"}, + {"ff","ful","ful"}, + {"ka","kat","geo"}, + {"de","deu","ger"}, + {"gd","gla","gla"}, + {"ga","gle","gle"}, + {"gl","glg","glg"}, + {"gv","glv","glv"}, + {"el","ell","gre"}, + {"gn","grn","grn"}, + {"gu","guj","guj"}, + {"ht","hat","hat"}, + {"ha","hau","hau"}, + {"he","heb","heb"}, + {"hz","her","her"}, + {"hi","hin","hin"}, + {"ho","hmo","hmo"}, + {"hr","hrv","hrv"}, + {"hu","hun","hun"}, + {"ig","ibo","ibo"}, + {"is","isl","ice"}, + {"io","ido","ido"}, + {"ii","iii","iii"}, + {"iu","iku","iku"}, + {"ie","ile","ile"}, + {"ia","ina","ina"}, + {"id","ind","ind"}, + {"ik","ipk","ipk"}, + {"it","ita","ita"}, + {"jv","jav","jav"}, + {"ja","jpn","jpn"}, + {"kl","kal","kal"}, + {"kn","kan","kan"}, + {"ks","kas","kas"}, + {"kr","kau","kau"}, + {"kk","kaz","kaz"}, + {"km","khm","khm"}, + {"ki","kik","kik"}, + {"rw","kin","kin"}, + {"ky","kir","kir"}, + {"kv","kom","kom"}, + {"kg","kon","kon"}, + {"ko","kor","kor"}, + {"kj","kua","kua"}, + {"ku","kur","kur"}, + {"lo","lao","lao"}, + {"la","lat","lat"}, + {"lv","lav","lav"}, + {"li","lim","lim"}, + {"ln","lin","lin"}, + {"lt","lit","lit"}, + {"lb","ltz","ltz"}, + {"lu","lub","lub"}, + {"lg","lug","lug"}, + {"mk","mkd","mac"}, + {"mh","mah","mah"}, + {"ml","mal","mal"}, + {"mi","mri","mao"}, + {"mr","mar","mar"}, + {"ms","msa","may"}, + {"mg","mlg","mlg"}, + {"mt","mlt","mlt"}, + {"mn","mon","mon"}, + {"na","nau","nau"}, + {"nv","nav","nav"}, + {"nr","nbl","nbl"}, + {"nd","nde","nde"}, + {"ng","ndo","ndo"}, + {"ne","nep","nep"}, + {"nn","nno","nno"}, + {"nb","nob","nob"}, + {"no","nor","nor"}, + {"ny","nya","nya"}, + {"oc","oci","oci"}, + {"oj","oji","oji"}, + {"or","ori","ori"}, + {"om","orm","orm"}, + {"os","oss","oss"}, + {"pa","pan","pan"}, + {"fa","fas","per"}, + {"pi","pli","pli"}, + {"pl","pol","pol"}, + {"pt","por","por"}, + {"ps","pus","pus"}, + {"qu","que","que"}, + {"rm","roh","roh"}, + {"ro","ron","rum"}, + {"rn","run","run"}, + {"ru","rus","rus"}, + {"sg","sag","sag"}, + {"sa","san","san"}, + {"si","sin","sin"}, + {"sk","slk","slo"}, + {"sl","slv","slv"}, + {"se","sme","sme"}, + {"sm","smo","smo"}, + {"sn","sna","sna"}, + {"sd","snd","snd"}, + {"so","som","som"}, + {"st","sot","sot"}, + {"es","spa","spa"}, + {"sc","srd","srd"}, + {"sr","srp","srp"}, + {"ss","ssw","ssw"}, + {"su","sun","sun"}, + {"sw","swa","swa"}, + {"sv","swe","swe"}, + {"ty","tah","tah"}, + {"ta","tam","tam"}, + {"tt","tat","tat"}, + {"te","tel","tel"}, + {"tg","tgk","tgk"}, + {"tl","tgl","tgl"}, + {"th","tha","tha"}, + {"bo","bod","tib"}, + {"ti","tir","tir"}, + {"to","ton","ton"}, + {"tn","tsn","tsn"}, + {"ts","tso","tso"}, + {"tk","tuk","tuk"}, + {"tr","tur","tur"}, + {"tw","twi","twi"}, + {"ug","uig","uig"}, + {"uk","ukr","ukr"}, + {"ur","urd","urd"}, + {"uz","uzb","uzb"}, + {"ve","ven","ven"}, + {"vi","vie","vie"}, + {"vo","vol","vol"}, + {"cy","cym","wel"}, + {"wa","wln","wln"}, + {"wo","wol","wol"}, + {"xh","xho","xho"}, + {"yi","yid","yid"}, + {"yo","yor","yor"}, + {"za","zha","zha"}, + {"zu","zul","zul"}, }; -/* - The following code was used to generate the table above from the two ISO standards. - It matches the language names (not the codes) from both standards to associate - the two and three letter codes. - - private static final String ISO639 = "d:\\temp\\iso639.txt"; - private static final String ISO6392 = "d:\\temp\\iso-639-2.txt"; + // The following code was used to generate the table above from the two ISO standards. + private static final String ISO639 = "ISO-639-2_utf-8.txt"; private static void generateTables() { try { BufferedReader ISO639File = new BufferedReader(new FileReader(ISO639)); - Hashtable i639 = new Hashtable(); for (String line = ISO639File.readLine(); line != null; line = ISO639File.readLine()) { - if (!line.startsWith("#")) { - final int ndx = line.indexOf(' '); - final String arg1 = line.substring(0, ndx); - final int ndx2 = line.indexOf(' ', ndx+1); - final String arg2 = line.substring(ndx+1, ndx2 < 0 ? line.length() : ndx2); - i639.put(arg1, arg2); + String[] tokens= line.split("\\|"); + String iso639_1 = tokens[2]; + String iso639_2B = tokens[1]; + String iso639_2T = tokens[0]; + if (iso639_1.isEmpty()){ + continue; // Skip if not both a 639-1 and 639-2 code } - } - - BufferedReader ISO6392File = new BufferedReader(new FileReader(ISO6392)); - Hashtable i6392 = new Hashtable(); - for (String line = ISO6392File.readLine(); line != null; line = ISO6392File.readLine()) { - final int ndx = line.indexOf(' '); - final int ndx2 = line.indexOf(' ', ndx+1); - int ndx3 = line.indexOf(' ', ndx2+1); - if (ndx3 < 0) ndx3 = line.length(); - final String arg1 = line.substring(0, ndx); - final String arg2 = line.substring(ndx+1, ndx2); - final String arg3 = line.substring(ndx2+1, ndx3); - i6392.put(arg3, new ISO6392Entry(arg1, arg2)); - } - - Enumeration keys = i639.keys(); - while (keys.hasMoreElements()) { - final Object key = keys.nextElement(); - final Object name = i639.get(key); - final Object value = i6392.get(name); - - if (value != null) { - System.out.print("{"); - System.out.print("\""+key+"\","); - System.out.print(value); - System.out.println("},"); + if (iso639_2B.isEmpty()){ + iso639_2B = iso639_2T; // Default 639/B to 639/T if empty } + System.out.printf(""" + {"%s","%s","%s"}, + """, iso639_1, iso639_2B, iso639_2T); } } catch (Exception e) { System.out.println(e); } } - - - private static final class ISO6392Entry { - public final String code; - public final String name; - public ISO6392Entry(String code, String name) { - this.code = code; - this.name = name; - } - public String toString() { - return "\""+code+"\",\""+name+"\""; - } - - } -*/ - } -/* - -data from ftp://dkuug.dk on March 4, 1999 -verified by http://www.triacom.com/archive/iso639-2.en.html - -iso 639 data -aa Afar -ab Abkhazian -af Afrikaans -am Amharic -ar Arabic -as Assamese -ay Aymara -az Azerbaijani -ba Bashkir -be Belarussian -bg Bulgarian -bh Bihari -bi Bislama -bn Bengali -bo Tibetan -br Breton -ca Catalan -co Corsican -cs Czech -cy Welsh -da Danish -de German -dz Bhutani -el Greek -en English -eo Esperanto -es Spanish -et Estonian -eu Basque -fa Persian -fi Finnish -fj Fijian -fo Faroese -fr French -fy Frisian -ga Irish -gd Gaelic -gl Galician -gn Guarani -gu Gujarati -ha Hausa -he Hebrew -hi Hindi -hr Croatian -hu Hungarian -hy Armenian -ia Interlingua -id Indonesian -ie Interlingue -ik Inupiak -is Icelandic -it Italian -iu Inuktitut -ja Japanese -jw Javanese -ka Georgian -kk Kazakh -kl Greenlandic -km Cambodian -kn Kannada -ko Korean -ks Kashmiri -ku Kurdish -ky Kirghiz -la Latin -ln Lingala -lo Laothian -lt Lithuanian -lv Latvian -mg Malagasy -mi Maori -mk Macedonian -ml Malayalam -mn Mongolian -mo Moldavian -mr Marathi -ms Malay -mt Maltese -my Burmese -na Nauru -ne Nepali -nl Dutch -no Norwegian -oc Occitan -om Oromo -or Oriya -pa Punjabi -pl Polish -ps Pushto -pt Portuguese -qu Quechua -rm Raeto-Romance -rn Kirundi -ro Romanian -ru Russian -rw Kinyarwanda -sa Sanskrit -sd Sindhi -sg Sangho -sh Croatian (Serbo) -si Sinhalese -sk Slovak -sl Slovenian -sm Samoan -sn Shona -so Somali -sq Albanian -sr Serbian -ss Siswati -st Sesotho -su Sundanese -sv Swedish -sw Swahili -ta Tamil -te Telugu -tg Tajik -th Thai -ti Tigrinya -tk Turkmen -tl Tagalog -tn Setswana -to Tonga -tr Turkish -ts Tsonga -tt Tatar -tw Twi -ug Uighur -uk Ukrainian -ur Urdu -uz Uzbek -vi Vietnamese -vo Volapuk -wo Wolof -xh Xhosa -yi Yiddish -yo Yoruba -za Zhuang -zh Chinese -zu Zulu - -ISO 639-2 data - -aar aar Afar -abk abk Abkhazian -ace ace Achinese -ach ach Acoli -ada ada Adangme -afa afa Afro-Asiatic (Other) -afh afh Afrihili -afr afr Afrikaans -aka aka Akan -akk akk Akkadian -ale ale Aleut -alg alg Algonquian languages -amh amh Amharic -ang ang English-Old (ca. 450-1100) -apa apa Apache languages -ara ara Arabic -arc arc Aramaic -arn arn Araucanian -arp arp Arapaho -art art Artificial (Other) -arw arw Arawak -asm asm Assamese -ath ath Athapascan languages -aus aus Australian languages -ava ava Avaric -ave ave Avestan -awa awa Awadhi -aym aym Aymara -aze aze Azerbaijani -bad bad Banda -bai bai Bamileke languages -bak bak Bashkir -bal bal Baluchi -bam bam Bambara -ban ban Balinese -bas bas Basa -bat bat Baltic (Other) -bej bej Beja -bel bel Belarussian -bem bem Bemba -ben ben Bengali -ber ber Berber (Other) -bho bho Bhojpuri -bih bih Bihari -bik bik Bikol -bin bin Bini -bis bis Bislama -bla bla Siksika -bnt bnt Bantu (Other) -bod tib Tibetan -bra bra Braj -bre bre Breton -btk btk Batak (Indonesia) -bua bua Buriat -bug bug Buginese -bul bul Bulgarian -cad cad Caddo -cai cai Central-American-Indian (Other) -car car Carib -cat cat Catalan -cau cau Caucasian (Other) -ceb ceb Cebuano -cel cel Celtic (Other) -ces cze Czech -cha cha Chamorro -chb chb Chibcha -che che Chechen -chg chg Chagatai -chk chk Chuukese -chm chm Mari -chn chn Chinook-jargon -cho cho Choctaw -chp chp Chipewyan -chr chr Cherokee -chu chu Church-Slavic -chv chv Chuvash -chy chy Cheyenne -cmc cmc Chamic languages -cop cop Coptic -cor cor Cornish -cos cos Corsican -cpe cpe Creoles-and-pidgins-English-based (Other) -cpf cpf Creoles-and-pidgins-French-based (Other) -cpp cpp Creoles-and-pidgins-Portuguese-based (Other) -cre cre Cree -crp crp Creoles-and-pidgins (Other) -cus cus Cushitic (Other) -cym wel Welsh -dak dak Dakota -dan dan Danish -day day Dayak -del del Delaware -den den Slave (Athapascan) -deu ger German -dgr dgr Dogrib -din din Dinka -div div Divehi -doi doi Dogri -dra dra Dravidian (Other) -dua dua Duala -dum dum Dutch-Middle (ca. 1050-1350) -dyu dyu Dyula -dzo dzo Dzongkha -efi efi Efik -egy egy Egyptian (Ancient) -eka eka Ekajuk -ell gre Greek Modern (post 1453) -elx elx Elamite -eng eng English -enm enm English-Middle (1100-1500) -epo epo Esperanto -est est Estonian -eus baq Basque -ewe ewe Ewe -ewo ewo Ewondo -fan fan Fang -fao fao Faroese -fas per Persian -fat fat Fanti -fij fij Fijian -fin fin Finnish -fiu fiu Finno-Ugrian (Other) -fon fon Fon -fra fre French -frm frm French-Middle (ca. 1400-1600) -fro fro French-Old (842-ca. 1400) -fry fry Frisian -ful ful Fulah -fur fur Friulian -gaa gaa Ga -gay gay Gayo -gba gba Gbaya -gem gem Germanic (Other) -gez gez Geez -gil gil Gilbertese -gdh gae Gaelic -gai iri Irish -glg glg Gallegan -glv glv Manx -gmh gmh German-Middle High (ca. 1050-1500) -goh goh German-Old High (ca. 750-1050) -gon gon Gondi -gor gor Gorontalo -got got Gothic -grb grb Grebo -grc grc Greek-Ancient (to 1453) -grn grn Guarani -guj guj Gujarati -gwi gwi Gwich'in -hai hai Haida -hau hau Hausa -haw haw Hawaiian -heb heb Hebrew -her her Herero -hil hil Hiligaynon -him him Himachali -hin hin Hindi -hit hit Hittite -hmn hmn Hmong -hmo hmo Hiri Motu -hrv scr Croatian -hun hun Hungarian -hup hup Hupa -hye arm Armenian -iba iba Iban -ibo ibo Igbo -ijo ijo Ijo -iku iku Inuktitut -ile ile Interlingue -ilo ilo Iloko -ina ina Interlingua (International Auxilary Language Association) -inc inc Indic (Other) -ind ind Indonesian -ine ine Indo-European (Other) -ipk ipk Inupiak -ira ira Iranian (Other) -iro iro Iroquoian languages -isl ice Icelandic -ita ita Italian -jaw jav Javanese -jpn jpn Japanese -jpr jpr Judeo-Persian -jrb jrb Judeo-Arabic -kaa kaa Kara-Kalpak -kab kab Kabyle -kac kac Kachin -kal kal Kalaallisut -kam kam Kamba -kan kan Kannada -kar kar Karen -kas kas Kashmiri -kat geo Georgian -kau kau Kanuri -kaw kaw Kawi -kaz kaz Kazakh -kha kha Khasi -khi khi Khoisan (Other) -khm khm Khmer -kho kho Khotanese -kik kik Kikuyu -kin kin Kinyarwanda -kir kir Kirghiz -kmb kmb Kimbundu -kok kok Konkani -kom kom Komi -kon kon Kongo -kor kor Korean -kos kos Kosraean -kpe kpe Kpelle -kro kro Kru -kru kru Kurukh -kua kua Kuanyama -kum kum Kumyk -kur kur Kurdish -kut kut Kutenai -lad lad Ladino -lah lah Lahnda -lam lam Lamba -lao lao Lao -lat lat Latin -lav lav Latvian -lez lez Lezghian -lin lin Lingala -lit lit Lithuanian -lol lol Mongo -loz loz Lozi -ltz ltz Letzeburgesch -lua lua Luba-Lulua -lub lub Luba-Katanga -lug lug Ganda -lui lui Luiseno -lun lun Lunda -luo luo Luo (Kenya and Tanzania) -lus lus Lushai -mad mad Madurese -mag mag Magahi -mah mah Marshall -mai mai Maithili -mak mak Makasar -mal mal Malayalam -man man Mandingo -map map Austronesian (Other) -mar mar Marathi -mas mas Masai -mdr mdr Mandar -men men Mende -mga mga Irish-Middle (900-1200) -mic mic Micmac -min min Minangkabau -mis mis Miscellaneous languages -mkd mac Macedonian -mkh mkh Mon-Khmer (Other) -mlg mlg Malagasy -mlt mlt Maltese -mni mni Manipuri -mno mno Manobo languages -moh moh Mohawk -mol mol Moldavian -mon mon Mongolian -mos mos Mossi -mri mao Maori -msa may Malay -mul mul Multiple languages -mun mun Munda languages -mus mus Creek -mwr mwr Marwari -mya bur Burmese -myn myn Mayan languages -nah nah Nahuatl -nai nai North American Indian (Other) -nau nau Nauru -nav nav Navajo -nbl nbl Ndebele, South -nde nde Ndebele, North -ndo ndo Ndonga -nep nep Nepali -new new Newari -nia nia Nias -nic nic Niger-Kordofanian (Other) -niu niu Niuean -nld dut Dutch -non non Norse, Old -nor nor Norwegian -nso nso Sohto, Northern -nub nub Nubian languages -nya nya Nyanja -nym nym Nyamwezi -nyn nyn Nyankole -nyo nyo Nyoro -nzi nzi Nzima -oci oci Occitan (post 1500) -oji oji Ojibwa -ori ori Oriya -orm orm Oromo -osa osa Osage -oss oss Ossetic -ota ota Turkish, Ottoman (1500-1928) -oto oto Otomian languages -paa paa Papuan (Other) -pag pag Pangasinan -pal pal Pahlavi -pam pam Pampanga -pan pan Panjabi -pap pap Papiamento -pau pau Palauan -peo peo Persian, Old (ca. 600-400 B.C.) -phi phi Philippine (Other) -phn phn Phoenician -pli pli Pali -pol pol Polish -pon pon Pohnpeian -por por Portuguese -pra pra Prakrit languages -pro pro Proven\u00E7al, Old (to 1500) -pus pus Pushto -qaa-qtz qaa-qtz Reserved for local use -que que Quechua -raj raj Rajasthani -rap rap Rapanui -rar rar Rarotongan -roa roa Romance (Other) -roh roh Raeto-Romance -rom rom Romany -ron rum Romanian -run run Rundi -rus rus Russian -sad sad Sandawe -sag sag Sango -sah sah Yakut -sai sai South American Indian (Other) -sal sal Salishan languages -sam sam Samaritan Aramaic -san san Sanskrit -sas sas Sasak -sat sat Santali -sco sco Scots -sel sel Selkup -sem sem Semitic (Other) -sga sga Irish-Old (to 900) -shn shn Shan -sid sid Sidamo -sin sin Sinhalese -sio sio Siouan languages -sit sit Sino-Tibetan (Other) -sla sla Slavic (Other) -slk slo Slovak -slv slv Slovenian -smi smi Sami languages -smo smo Samoan -sna sna Shona -snd snd Sindhi -snk snk Soninke -sog sog Sogdian -som som Somali -son son Songhai -sot sot Sotho Southern -spa spa Spanish -sqi alb Albanian -srd srd Sardinian -srp scc Serbian -srr srr Serer -ssa ssa Nilo-Saharan (Other) -ssw ssw Swati -suk suk Sukuma -sun sun Sundanese -sus sus Susu -sux sux Sumerian -swa swa Swahili -swe swe Swedish -syr syr Syriac -tah tah Tahitian -tai tai Tai (Other) -tam tam Tamil -tat tat Tatar -tel tel Telugu -tem tem Timne -ter ter Tereno -tet tet Tetum -tgk tgk Tajik -tgl tgl Tagalog -tha tha Thai -tig tig Tigre -tir tir Tigrinya -tiv tiv Tiv -tkl tkl Tokelau -tli tli Tlingit -tmh tmh Tamashek -tog tog Tonga (Nyasa) -ton ton Tonga (Tonga Islands) -tpi tpi Tok Pisin -tsi tsi Tsimshian -tsn tsn Tswana -tso tso Tsonga -tuk tuk Turkmen -tum tum Tumbuka -tur tur Turkish -tut tut Altaic -tvl tvl Tuvalu -twi twi Twi -tyv tyv Tuvinian -uga uga Ugaritic -uig uig Uighur -ukr ukr Ukrainian -umb umb Umbundu -und und Undetermined -urd urd Urdu -uzb uzb Uzbek -vai vai Vai -ven ven Venda -vie vie Vietnamese -vol vol Volapuk -vot vot Votic -wak wak Wakashan -wal wal Walamo -war war Waray -was was Washo -wen wen Sorbian -wol wol Wolof -xho xho Xhosa -yao yao Yao -yap yap Yapese -yid yid Yiddish -yor yor Yoruba -ypk ypk Yupik -zap zap Zapotec -zen zen Zenaga -zha zha Zhuang -zho chi Chinese -znd znd Zande -zul zul Zulu -zun zun Zuni - -*/ +// CODES generated from https://www.loc.gov/standards/iso639-2/ISO-639-2_utf-8.txt +// on March 9th, 2023.