//// Lang provides a `Language` type representing the 183 languages //// from the ISO 639 standard that have both ISO 639-1 (alpha-2, two-letter) //// and ISO 639-2 (alpha-3, three-letter) codes. //// //// It does not handle regional variants or scripts - //// those concerns are left to application code or higher-level libraries. //// //// ## Examples //// //// ```gleam //// import lang //// //// fn main() { //// let language = lang.En //// //// // Convert to codes //// lang.to_iso639_1(language) //// // -> "en" //// //// lang.to_iso639_2(language) //// // -> "eng" //// //// // Parse from codes //// lang.from_iso639_1("ko") //// // -> Ok(Ko) //// //// lang.from_iso639_2("kor") //// // -> Ok(Ko) //// //// // Get language name //// lang.to_name(language) //// // -> "English" //// } //// ``` // Generated on 2025-12-15T16:45:02.108573737Z from ISO 639 standard data. // DO NOT EDIT THIS FILE MANUALLY - Regenerate with: `gleam run -m codegen` import gleam/string /// ISO 639 language codes. /// /// This type represents the 183 languages that have both ISO 639-1 /// (two-letter) and ISO 639-2 (three-letter) codes. /// /// Language variants are represented using their two-letter codes in title case /// (e.g., `En` for English, `De` for German). pub type Language { /// Afar Aa /// Abkhazian Ab /// Afrikaans Af /// Akan Ak /// Albanian Sq /// Amharic Am /// Arabic Ar /// Aragonese An /// Armenian Hy /// Assamese As /// Avaric Av /// Avestan Ae /// Aymara Ay /// Azerbaijani Az /// Bashkir Ba /// Bambara Bm /// Basque Eu /// Belarusian Be /// Bengali Bn /// Bislama Bi /// Bosnian Bs /// Breton Br /// Bulgarian Bg /// Burmese My /// Catalan/Valencian Ca /// Chamorro Ch /// Chechen Ce /// Chinese Zh /// Church Slavic/Old Slavonic/Church Slavonic/Old Bulgarian/Old Church Slavonic Cu /// Chuvash Cv /// Cornish Kw /// Corsican Co /// Cree Cr /// Czech Cs /// Danish Da /// Divehi/Dhivehi/Maldivian Dv /// Dutch/Flemish Nl /// Dzongkha Dz /// English En /// Esperanto Eo /// Estonian Et /// Ewe Ee /// Faroese Fo /// Fijian Fj /// Finnish Fi /// French Fr /// Western Frisian Fy /// Fulah Ff /// Georgian Ka /// German De /// Gaelic/Scottish Gaelic Gd /// Irish Ga /// Galician Gl /// Manx Gv /// Greek, Modern (1453-) El /// Guarani Gn /// Gujarati Gu /// Haitian/Haitian Creole Ht /// Hausa Ha /// Hebrew He /// Herero Hz /// Hindi Hi /// Hiri Motu Ho /// Croatian Hr /// Hungarian Hu /// Igbo Ig /// Icelandic Is /// Ido Io /// Sichuan Yi/Nuosu Ii /// Inuktitut Iu /// Interlingue/Occidental Ie /// Interlingua (International Auxiliary Language Association) Ia /// Indonesian Id /// Inupiaq Ik /// Italian It /// Javanese Jv /// Japanese Ja /// Kalaallisut/Greenlandic Kl /// Kannada Kn /// Kashmiri Ks /// Kanuri Kr /// Kazakh Kk /// Central Khmer Km /// Kikuyu/Gikuyu Ki /// Kinyarwanda Rw /// Kirghiz/Kyrgyz Ky /// Komi Kv /// Kongo Kg /// Korean Ko /// Kuanyama/Kwanyama Kj /// Kurdish Ku /// Lao Lo /// Latin La /// Latvian Lv /// Limburgan/Limburger/Limburgish Li /// Lingala Ln /// Lithuanian Lt /// Luxembourgish/Letzeburgesch Lb /// Luba-Katanga Lu /// Ganda Lg /// Macedonian Mk /// Marshallese Mh /// Malayalam Ml /// Maori Mi /// Marathi Mr /// Malay Ms /// Malagasy Mg /// Maltese Mt /// Mongolian Mn /// Nauru Na /// Navajo/Navaho Nv /// Ndebele, South/South Ndebele Nr /// Ndebele, North/North Ndebele Nd /// Ndonga Ng /// Nepali Ne /// Norwegian Nynorsk/Nynorsk, Norwegian Nn /// Bokmål, Norwegian/Norwegian Bokmål Nb /// Norwegian No /// Chichewa/Chewa/Nyanja Ny /// Occitan (post 1500) Oc /// Ojibwa Oj /// Oriya Or /// Oromo Om /// Ossetian/Ossetic Os /// Panjabi/Punjabi Pa /// Persian Fa /// Pali Pi /// Polish Pl /// Portuguese Pt /// Pushto/Pashto Ps /// Quechua Qu /// Romansh Rm /// Romanian/Moldavian/Moldovan Ro /// Rundi Rn /// Russian Ru /// Sango Sg /// Sanskrit Sa /// Sinhala/Sinhalese Si /// Slovak Sk /// Slovenian Sl /// Northern Sami Se /// Samoan Sm /// Shona Sn /// Sindhi Sd /// Somali So /// Sotho, Southern St /// Spanish/Castilian Es /// Sardinian Sc /// Serbian Sr /// Swati Ss /// Sundanese Su /// Swahili Sw /// Swedish Sv /// Tahitian Ty /// Tamil Ta /// Tatar Tt /// Telugu Te /// Tajik Tg /// Tagalog Tl /// Thai Th /// Tibetan Bo /// Tigrinya Ti /// Tonga (Tonga Islands) To /// Tswana Tn /// Tsonga Ts /// Turkmen Tk /// Turkish Tr /// Twi Tw /// Uighur/Uyghur Ug /// Ukrainian Uk /// Urdu Ur /// Uzbek Uz /// Venda Ve /// Vietnamese Vi /// Volapük Vo /// Welsh Cy /// Walloon Wa /// Wolof Wo /// Xhosa Xh /// Yiddish Yi /// Yoruba Yo /// Zhuang/Chuang Za /// Zulu Zu } /// Convert a `Language` to its ISO 639-1 two-letter code. /// /// ## Examples /// /// ```gleam /// to_iso639_1(En) /// // -> "en" /// /// to_iso639_1(De) /// // -> "de" /// ``` pub fn to_iso639_1(language: Language) -> String { case language { Aa -> "aa" Ab -> "ab" Af -> "af" Ak -> "ak" Sq -> "sq" Am -> "am" Ar -> "ar" An -> "an" Hy -> "hy" As -> "as" Av -> "av" Ae -> "ae" Ay -> "ay" Az -> "az" Ba -> "ba" Bm -> "bm" Eu -> "eu" Be -> "be" Bn -> "bn" Bi -> "bi" Bs -> "bs" Br -> "br" Bg -> "bg" My -> "my" Ca -> "ca" Ch -> "ch" Ce -> "ce" Zh -> "zh" Cu -> "cu" Cv -> "cv" Kw -> "kw" Co -> "co" Cr -> "cr" Cs -> "cs" Da -> "da" Dv -> "dv" Nl -> "nl" Dz -> "dz" En -> "en" Eo -> "eo" Et -> "et" Ee -> "ee" Fo -> "fo" Fj -> "fj" Fi -> "fi" Fr -> "fr" Fy -> "fy" Ff -> "ff" Ka -> "ka" De -> "de" Gd -> "gd" Ga -> "ga" Gl -> "gl" Gv -> "gv" El -> "el" Gn -> "gn" Gu -> "gu" Ht -> "ht" Ha -> "ha" He -> "he" Hz -> "hz" Hi -> "hi" Ho -> "ho" Hr -> "hr" Hu -> "hu" Ig -> "ig" Is -> "is" Io -> "io" Ii -> "ii" Iu -> "iu" Ie -> "ie" Ia -> "ia" Id -> "id" Ik -> "ik" It -> "it" Jv -> "jv" Ja -> "ja" Kl -> "kl" Kn -> "kn" Ks -> "ks" Kr -> "kr" Kk -> "kk" Km -> "km" Ki -> "ki" Rw -> "rw" Ky -> "ky" Kv -> "kv" Kg -> "kg" Ko -> "ko" Kj -> "kj" Ku -> "ku" Lo -> "lo" La -> "la" Lv -> "lv" Li -> "li" Ln -> "ln" Lt -> "lt" Lb -> "lb" Lu -> "lu" Lg -> "lg" Mk -> "mk" Mh -> "mh" Ml -> "ml" Mi -> "mi" Mr -> "mr" Ms -> "ms" Mg -> "mg" Mt -> "mt" Mn -> "mn" Na -> "na" Nv -> "nv" Nr -> "nr" Nd -> "nd" Ng -> "ng" Ne -> "ne" Nn -> "nn" Nb -> "nb" No -> "no" Ny -> "ny" Oc -> "oc" Oj -> "oj" Or -> "or" Om -> "om" Os -> "os" Pa -> "pa" Fa -> "fa" Pi -> "pi" Pl -> "pl" Pt -> "pt" Ps -> "ps" Qu -> "qu" Rm -> "rm" Ro -> "ro" Rn -> "rn" Ru -> "ru" Sg -> "sg" Sa -> "sa" Si -> "si" Sk -> "sk" Sl -> "sl" Se -> "se" Sm -> "sm" Sn -> "sn" Sd -> "sd" So -> "so" St -> "st" Es -> "es" Sc -> "sc" Sr -> "sr" Ss -> "ss" Su -> "su" Sw -> "sw" Sv -> "sv" Ty -> "ty" Ta -> "ta" Tt -> "tt" Te -> "te" Tg -> "tg" Tl -> "tl" Th -> "th" Bo -> "bo" Ti -> "ti" To -> "to" Tn -> "tn" Ts -> "ts" Tk -> "tk" Tr -> "tr" Tw -> "tw" Ug -> "ug" Uk -> "uk" Ur -> "ur" Uz -> "uz" Ve -> "ve" Vi -> "vi" Vo -> "vo" Cy -> "cy" Wa -> "wa" Wo -> "wo" Xh -> "xh" Yi -> "yi" Yo -> "yo" Za -> "za" Zu -> "zu" } } /// Convert a `Language` to its ISO 639-2 three-letter terminological code. /// /// When a language has both bibliographic and terminological codes, this function /// returns the terminological (T) code. For example, German returns `"deu"` /// (not `"ger"`), and Chinese returns `"zho"` (not `"chi"`). /// /// ## Examples /// /// ```gleam /// to_iso639_2(En) /// // -> "eng" /// /// to_iso639_2(De) /// // -> "deu" /// /// to_iso639_2(Zh) /// // -> "zho" /// ``` pub fn to_iso639_2(language: Language) -> String { case language { Aa -> "aar" Ab -> "abk" Af -> "afr" Ak -> "aka" Sq -> "sqi" Am -> "amh" Ar -> "ara" An -> "arg" Hy -> "hye" As -> "asm" Av -> "ava" Ae -> "ave" Ay -> "aym" Az -> "aze" Ba -> "bak" Bm -> "bam" Eu -> "eus" Be -> "bel" Bn -> "ben" Bi -> "bis" Bs -> "bos" Br -> "bre" Bg -> "bul" My -> "mya" Ca -> "cat" Ch -> "cha" Ce -> "che" Zh -> "zho" Cu -> "chu" Cv -> "chv" Kw -> "cor" Co -> "cos" Cr -> "cre" Cs -> "ces" Da -> "dan" Dv -> "div" Nl -> "nld" Dz -> "dzo" En -> "eng" Eo -> "epo" Et -> "est" Ee -> "ewe" Fo -> "fao" Fj -> "fij" Fi -> "fin" Fr -> "fra" Fy -> "fry" Ff -> "ful" Ka -> "kat" De -> "deu" Gd -> "gla" Ga -> "gle" Gl -> "glg" Gv -> "glv" El -> "ell" Gn -> "grn" Gu -> "guj" Ht -> "hat" Ha -> "hau" He -> "heb" Hz -> "her" Hi -> "hin" Ho -> "hmo" Hr -> "hrv" Hu -> "hun" Ig -> "ibo" Is -> "isl" Io -> "ido" Ii -> "iii" Iu -> "iku" Ie -> "ile" Ia -> "ina" Id -> "ind" Ik -> "ipk" It -> "ita" Jv -> "jav" Ja -> "jpn" Kl -> "kal" Kn -> "kan" Ks -> "kas" Kr -> "kau" Kk -> "kaz" Km -> "khm" Ki -> "kik" Rw -> "kin" Ky -> "kir" Kv -> "kom" Kg -> "kon" Ko -> "kor" Kj -> "kua" Ku -> "kur" Lo -> "lao" La -> "lat" Lv -> "lav" Li -> "lim" Ln -> "lin" Lt -> "lit" Lb -> "ltz" Lu -> "lub" Lg -> "lug" Mk -> "mkd" Mh -> "mah" Ml -> "mal" Mi -> "mri" Mr -> "mar" Ms -> "msa" Mg -> "mlg" Mt -> "mlt" Mn -> "mon" Na -> "nau" Nv -> "nav" Nr -> "nbl" Nd -> "nde" Ng -> "ndo" Ne -> "nep" Nn -> "nno" Nb -> "nob" No -> "nor" Ny -> "nya" Oc -> "oci" Oj -> "oji" Or -> "ori" Om -> "orm" Os -> "oss" Pa -> "pan" Fa -> "fas" Pi -> "pli" Pl -> "pol" Pt -> "por" Ps -> "pus" Qu -> "que" Rm -> "roh" Ro -> "ron" Rn -> "run" Ru -> "rus" Sg -> "sag" Sa -> "san" Si -> "sin" Sk -> "slk" Sl -> "slv" Se -> "sme" Sm -> "smo" Sn -> "sna" Sd -> "snd" So -> "som" St -> "sot" Es -> "spa" Sc -> "srd" Sr -> "srp" Ss -> "ssw" Su -> "sun" Sw -> "swa" Sv -> "swe" Ty -> "tah" Ta -> "tam" Tt -> "tat" Te -> "tel" Tg -> "tgk" Tl -> "tgl" Th -> "tha" Bo -> "bod" Ti -> "tir" To -> "ton" Tn -> "tsn" Ts -> "tso" Tk -> "tuk" Tr -> "tur" Tw -> "twi" Ug -> "uig" Uk -> "ukr" Ur -> "urd" Uz -> "uzb" Ve -> "ven" Vi -> "vie" Vo -> "vol" Cy -> "cym" Wa -> "wln" Wo -> "wol" Xh -> "xho" Yi -> "yid" Yo -> "yor" Za -> "zha" Zu -> "zul" } } /// Parse an ISO 639-1 two-letter code into a `Language`. /// /// The input is case-insensitive and whitespace is trimmed. /// /// ## Examples /// /// ```gleam /// from_iso639_1("en") /// // -> Ok(En) /// /// from_iso639_1("DE") /// // -> Ok(De) /// /// from_iso639_1("invalid") /// // -> Error(Nil) /// ``` pub fn from_iso639_1(code: String) -> Result(Language, Nil) { case string.lowercase(code) |> string.trim { "aa" -> Ok(Aa) "ab" -> Ok(Ab) "af" -> Ok(Af) "ak" -> Ok(Ak) "sq" -> Ok(Sq) "am" -> Ok(Am) "ar" -> Ok(Ar) "an" -> Ok(An) "hy" -> Ok(Hy) "as" -> Ok(As) "av" -> Ok(Av) "ae" -> Ok(Ae) "ay" -> Ok(Ay) "az" -> Ok(Az) "ba" -> Ok(Ba) "bm" -> Ok(Bm) "eu" -> Ok(Eu) "be" -> Ok(Be) "bn" -> Ok(Bn) "bi" -> Ok(Bi) "bs" -> Ok(Bs) "br" -> Ok(Br) "bg" -> Ok(Bg) "my" -> Ok(My) "ca" -> Ok(Ca) "ch" -> Ok(Ch) "ce" -> Ok(Ce) "zh" -> Ok(Zh) "cu" -> Ok(Cu) "cv" -> Ok(Cv) "kw" -> Ok(Kw) "co" -> Ok(Co) "cr" -> Ok(Cr) "cs" -> Ok(Cs) "da" -> Ok(Da) "dv" -> Ok(Dv) "nl" -> Ok(Nl) "dz" -> Ok(Dz) "en" -> Ok(En) "eo" -> Ok(Eo) "et" -> Ok(Et) "ee" -> Ok(Ee) "fo" -> Ok(Fo) "fj" -> Ok(Fj) "fi" -> Ok(Fi) "fr" -> Ok(Fr) "fy" -> Ok(Fy) "ff" -> Ok(Ff) "ka" -> Ok(Ka) "de" -> Ok(De) "gd" -> Ok(Gd) "ga" -> Ok(Ga) "gl" -> Ok(Gl) "gv" -> Ok(Gv) "el" -> Ok(El) "gn" -> Ok(Gn) "gu" -> Ok(Gu) "ht" -> Ok(Ht) "ha" -> Ok(Ha) "he" -> Ok(He) "hz" -> Ok(Hz) "hi" -> Ok(Hi) "ho" -> Ok(Ho) "hr" -> Ok(Hr) "hu" -> Ok(Hu) "ig" -> Ok(Ig) "is" -> Ok(Is) "io" -> Ok(Io) "ii" -> Ok(Ii) "iu" -> Ok(Iu) "ie" -> Ok(Ie) "ia" -> Ok(Ia) "id" -> Ok(Id) "ik" -> Ok(Ik) "it" -> Ok(It) "jv" -> Ok(Jv) "ja" -> Ok(Ja) "kl" -> Ok(Kl) "kn" -> Ok(Kn) "ks" -> Ok(Ks) "kr" -> Ok(Kr) "kk" -> Ok(Kk) "km" -> Ok(Km) "ki" -> Ok(Ki) "rw" -> Ok(Rw) "ky" -> Ok(Ky) "kv" -> Ok(Kv) "kg" -> Ok(Kg) "ko" -> Ok(Ko) "kj" -> Ok(Kj) "ku" -> Ok(Ku) "lo" -> Ok(Lo) "la" -> Ok(La) "lv" -> Ok(Lv) "li" -> Ok(Li) "ln" -> Ok(Ln) "lt" -> Ok(Lt) "lb" -> Ok(Lb) "lu" -> Ok(Lu) "lg" -> Ok(Lg) "mk" -> Ok(Mk) "mh" -> Ok(Mh) "ml" -> Ok(Ml) "mi" -> Ok(Mi) "mr" -> Ok(Mr) "ms" -> Ok(Ms) "mg" -> Ok(Mg) "mt" -> Ok(Mt) "mn" -> Ok(Mn) "na" -> Ok(Na) "nv" -> Ok(Nv) "nr" -> Ok(Nr) "nd" -> Ok(Nd) "ng" -> Ok(Ng) "ne" -> Ok(Ne) "nn" -> Ok(Nn) "nb" -> Ok(Nb) "no" -> Ok(No) "ny" -> Ok(Ny) "oc" -> Ok(Oc) "oj" -> Ok(Oj) "or" -> Ok(Or) "om" -> Ok(Om) "os" -> Ok(Os) "pa" -> Ok(Pa) "fa" -> Ok(Fa) "pi" -> Ok(Pi) "pl" -> Ok(Pl) "pt" -> Ok(Pt) "ps" -> Ok(Ps) "qu" -> Ok(Qu) "rm" -> Ok(Rm) "ro" -> Ok(Ro) "rn" -> Ok(Rn) "ru" -> Ok(Ru) "sg" -> Ok(Sg) "sa" -> Ok(Sa) "si" -> Ok(Si) "sk" -> Ok(Sk) "sl" -> Ok(Sl) "se" -> Ok(Se) "sm" -> Ok(Sm) "sn" -> Ok(Sn) "sd" -> Ok(Sd) "so" -> Ok(So) "st" -> Ok(St) "es" -> Ok(Es) "sc" -> Ok(Sc) "sr" -> Ok(Sr) "ss" -> Ok(Ss) "su" -> Ok(Su) "sw" -> Ok(Sw) "sv" -> Ok(Sv) "ty" -> Ok(Ty) "ta" -> Ok(Ta) "tt" -> Ok(Tt) "te" -> Ok(Te) "tg" -> Ok(Tg) "tl" -> Ok(Tl) "th" -> Ok(Th) "bo" -> Ok(Bo) "ti" -> Ok(Ti) "to" -> Ok(To) "tn" -> Ok(Tn) "ts" -> Ok(Ts) "tk" -> Ok(Tk) "tr" -> Ok(Tr) "tw" -> Ok(Tw) "ug" -> Ok(Ug) "uk" -> Ok(Uk) "ur" -> Ok(Ur) "uz" -> Ok(Uz) "ve" -> Ok(Ve) "vi" -> Ok(Vi) "vo" -> Ok(Vo) "cy" -> Ok(Cy) "wa" -> Ok(Wa) "wo" -> Ok(Wo) "xh" -> Ok(Xh) "yi" -> Ok(Yi) "yo" -> Ok(Yo) "za" -> Ok(Za) "zu" -> Ok(Zu) _ -> Error(Nil) } } /// Parse an ISO 639-2 three-letter code into a `Language`. /// /// Accepts both terminological (T) and bibliographic (B) codes. /// For example, both `"deu"` and `"ger"` will return `Ok(De)`. /// /// The input is case-insensitive and whitespace is trimmed. /// /// ## Examples /// /// ```gleam /// from_iso639_2("eng") /// // -> Ok(En) /// /// from_iso639_2("deu") // terminological code /// // -> Ok(De) /// /// from_iso639_2("ger") // bibliographic code /// // -> Ok(De) /// /// from_iso639_2("invalid") /// // -> Error(Nil) /// ``` pub fn from_iso639_2(code: String) -> Result(Language, Nil) { case string.lowercase(code) |> string.trim { "aar" -> Ok(Aa) "abk" -> Ok(Ab) "afr" -> Ok(Af) "aka" -> Ok(Ak) "sqi" | "alb" -> Ok(Sq) "amh" -> Ok(Am) "ara" -> Ok(Ar) "arg" -> Ok(An) "hye" | "arm" -> Ok(Hy) "asm" -> Ok(As) "ava" -> Ok(Av) "ave" -> Ok(Ae) "aym" -> Ok(Ay) "aze" -> Ok(Az) "bak" -> Ok(Ba) "bam" -> Ok(Bm) "eus" | "baq" -> Ok(Eu) "bel" -> Ok(Be) "ben" -> Ok(Bn) "bis" -> Ok(Bi) "bos" -> Ok(Bs) "bre" -> Ok(Br) "bul" -> Ok(Bg) "mya" | "bur" -> Ok(My) "cat" -> Ok(Ca) "cha" -> Ok(Ch) "che" -> Ok(Ce) "zho" | "chi" -> Ok(Zh) "chu" -> Ok(Cu) "chv" -> Ok(Cv) "cor" -> Ok(Kw) "cos" -> Ok(Co) "cre" -> Ok(Cr) "ces" | "cze" -> Ok(Cs) "dan" -> Ok(Da) "div" -> Ok(Dv) "nld" | "dut" -> Ok(Nl) "dzo" -> Ok(Dz) "eng" -> Ok(En) "epo" -> Ok(Eo) "est" -> Ok(Et) "ewe" -> Ok(Ee) "fao" -> Ok(Fo) "fij" -> Ok(Fj) "fin" -> Ok(Fi) "fra" | "fre" -> Ok(Fr) "fry" -> Ok(Fy) "ful" -> Ok(Ff) "kat" | "geo" -> Ok(Ka) "deu" | "ger" -> Ok(De) "gla" -> Ok(Gd) "gle" -> Ok(Ga) "glg" -> Ok(Gl) "glv" -> Ok(Gv) "ell" | "gre" -> Ok(El) "grn" -> Ok(Gn) "guj" -> Ok(Gu) "hat" -> Ok(Ht) "hau" -> Ok(Ha) "heb" -> Ok(He) "her" -> Ok(Hz) "hin" -> Ok(Hi) "hmo" -> Ok(Ho) "hrv" -> Ok(Hr) "hun" -> Ok(Hu) "ibo" -> Ok(Ig) "isl" | "ice" -> Ok(Is) "ido" -> Ok(Io) "iii" -> Ok(Ii) "iku" -> Ok(Iu) "ile" -> Ok(Ie) "ina" -> Ok(Ia) "ind" -> Ok(Id) "ipk" -> Ok(Ik) "ita" -> Ok(It) "jav" -> Ok(Jv) "jpn" -> Ok(Ja) "kal" -> Ok(Kl) "kan" -> Ok(Kn) "kas" -> Ok(Ks) "kau" -> Ok(Kr) "kaz" -> Ok(Kk) "khm" -> Ok(Km) "kik" -> Ok(Ki) "kin" -> Ok(Rw) "kir" -> Ok(Ky) "kom" -> Ok(Kv) "kon" -> Ok(Kg) "kor" -> Ok(Ko) "kua" -> Ok(Kj) "kur" -> Ok(Ku) "lao" -> Ok(Lo) "lat" -> Ok(La) "lav" -> Ok(Lv) "lim" -> Ok(Li) "lin" -> Ok(Ln) "lit" -> Ok(Lt) "ltz" -> Ok(Lb) "lub" -> Ok(Lu) "lug" -> Ok(Lg) "mkd" | "mac" -> Ok(Mk) "mah" -> Ok(Mh) "mal" -> Ok(Ml) "mri" | "mao" -> Ok(Mi) "mar" -> Ok(Mr) "msa" | "may" -> Ok(Ms) "mlg" -> Ok(Mg) "mlt" -> Ok(Mt) "mon" -> Ok(Mn) "nau" -> Ok(Na) "nav" -> Ok(Nv) "nbl" -> Ok(Nr) "nde" -> Ok(Nd) "ndo" -> Ok(Ng) "nep" -> Ok(Ne) "nno" -> Ok(Nn) "nob" -> Ok(Nb) "nor" -> Ok(No) "nya" -> Ok(Ny) "oci" -> Ok(Oc) "oji" -> Ok(Oj) "ori" -> Ok(Or) "orm" -> Ok(Om) "oss" -> Ok(Os) "pan" -> Ok(Pa) "fas" | "per" -> Ok(Fa) "pli" -> Ok(Pi) "pol" -> Ok(Pl) "por" -> Ok(Pt) "pus" -> Ok(Ps) "que" -> Ok(Qu) "roh" -> Ok(Rm) "ron" | "rum" -> Ok(Ro) "run" -> Ok(Rn) "rus" -> Ok(Ru) "sag" -> Ok(Sg) "san" -> Ok(Sa) "sin" -> Ok(Si) "slk" | "slo" -> Ok(Sk) "slv" -> Ok(Sl) "sme" -> Ok(Se) "smo" -> Ok(Sm) "sna" -> Ok(Sn) "snd" -> Ok(Sd) "som" -> Ok(So) "sot" -> Ok(St) "spa" -> Ok(Es) "srd" -> Ok(Sc) "srp" -> Ok(Sr) "ssw" -> Ok(Ss) "sun" -> Ok(Su) "swa" -> Ok(Sw) "swe" -> Ok(Sv) "tah" -> Ok(Ty) "tam" -> Ok(Ta) "tat" -> Ok(Tt) "tel" -> Ok(Te) "tgk" -> Ok(Tg) "tgl" -> Ok(Tl) "tha" -> Ok(Th) "bod" | "tib" -> Ok(Bo) "tir" -> Ok(Ti) "ton" -> Ok(To) "tsn" -> Ok(Tn) "tso" -> Ok(Ts) "tuk" -> Ok(Tk) "tur" -> Ok(Tr) "twi" -> Ok(Tw) "uig" -> Ok(Ug) "ukr" -> Ok(Uk) "urd" -> Ok(Ur) "uzb" -> Ok(Uz) "ven" -> Ok(Ve) "vie" -> Ok(Vi) "vol" -> Ok(Vo) "cym" | "wel" -> Ok(Cy) "wln" -> Ok(Wa) "wol" -> Ok(Wo) "xho" -> Ok(Xh) "yid" -> Ok(Yi) "yor" -> Ok(Yo) "zha" -> Ok(Za) "zul" -> Ok(Zu) _ -> Error(Nil) } } /// Get the English name of a language. /// /// ## Examples /// /// ```gleam /// to_name(En) /// // -> "English" /// /// to_name(Ja) /// // -> "Japanese" /// ``` pub fn to_name(language: Language) -> String { case language { Aa -> "Afar" Ab -> "Abkhazian" Af -> "Afrikaans" Ak -> "Akan" Sq -> "Albanian" Am -> "Amharic" Ar -> "Arabic" An -> "Aragonese" Hy -> "Armenian" As -> "Assamese" Av -> "Avaric" Ae -> "Avestan" Ay -> "Aymara" Az -> "Azerbaijani" Ba -> "Bashkir" Bm -> "Bambara" Eu -> "Basque" Be -> "Belarusian" Bn -> "Bengali" Bi -> "Bislama" Bs -> "Bosnian" Br -> "Breton" Bg -> "Bulgarian" My -> "Burmese" Ca -> "Catalan" Ch -> "Chamorro" Ce -> "Chechen" Zh -> "Chinese" Cu -> "Church Slavic" Cv -> "Chuvash" Kw -> "Cornish" Co -> "Corsican" Cr -> "Cree" Cs -> "Czech" Da -> "Danish" Dv -> "Divehi" Nl -> "Dutch" Dz -> "Dzongkha" En -> "English" Eo -> "Esperanto" Et -> "Estonian" Ee -> "Ewe" Fo -> "Faroese" Fj -> "Fijian" Fi -> "Finnish" Fr -> "French" Fy -> "Western Frisian" Ff -> "Fulah" Ka -> "Georgian" De -> "German" Gd -> "Gaelic" Ga -> "Irish" Gl -> "Galician" Gv -> "Manx" El -> "Greek, Modern (1453-)" Gn -> "Guarani" Gu -> "Gujarati" Ht -> "Haitian" Ha -> "Hausa" He -> "Hebrew" Hz -> "Herero" Hi -> "Hindi" Ho -> "Hiri Motu" Hr -> "Croatian" Hu -> "Hungarian" Ig -> "Igbo" Is -> "Icelandic" Io -> "Ido" Ii -> "Sichuan Yi" Iu -> "Inuktitut" Ie -> "Interlingue" Ia -> "Interlingua (International Auxiliary Language Association)" Id -> "Indonesian" Ik -> "Inupiaq" It -> "Italian" Jv -> "Javanese" Ja -> "Japanese" Kl -> "Kalaallisut" Kn -> "Kannada" Ks -> "Kashmiri" Kr -> "Kanuri" Kk -> "Kazakh" Km -> "Central Khmer" Ki -> "Kikuyu" Rw -> "Kinyarwanda" Ky -> "Kirghiz" Kv -> "Komi" Kg -> "Kongo" Ko -> "Korean" Kj -> "Kuanyama" Ku -> "Kurdish" Lo -> "Lao" La -> "Latin" Lv -> "Latvian" Li -> "Limburgan" Ln -> "Lingala" Lt -> "Lithuanian" Lb -> "Luxembourgish" Lu -> "Luba-Katanga" Lg -> "Ganda" Mk -> "Macedonian" Mh -> "Marshallese" Ml -> "Malayalam" Mi -> "Maori" Mr -> "Marathi" Ms -> "Malay" Mg -> "Malagasy" Mt -> "Maltese" Mn -> "Mongolian" Na -> "Nauru" Nv -> "Navajo" Nr -> "Ndebele, South" Nd -> "Ndebele, North" Ng -> "Ndonga" Ne -> "Nepali" Nn -> "Norwegian Nynorsk" Nb -> "Bokmål, Norwegian" No -> "Norwegian" Ny -> "Chichewa" Oc -> "Occitan (post 1500)" Oj -> "Ojibwa" Or -> "Oriya" Om -> "Oromo" Os -> "Ossetian" Pa -> "Panjabi" Fa -> "Persian" Pi -> "Pali" Pl -> "Polish" Pt -> "Portuguese" Ps -> "Pushto" Qu -> "Quechua" Rm -> "Romansh" Ro -> "Romanian" Rn -> "Rundi" Ru -> "Russian" Sg -> "Sango" Sa -> "Sanskrit" Si -> "Sinhala" Sk -> "Slovak" Sl -> "Slovenian" Se -> "Northern Sami" Sm -> "Samoan" Sn -> "Shona" Sd -> "Sindhi" So -> "Somali" St -> "Sotho, Southern" Es -> "Spanish" Sc -> "Sardinian" Sr -> "Serbian" Ss -> "Swati" Su -> "Sundanese" Sw -> "Swahili" Sv -> "Swedish" Ty -> "Tahitian" Ta -> "Tamil" Tt -> "Tatar" Te -> "Telugu" Tg -> "Tajik" Tl -> "Tagalog" Th -> "Thai" Bo -> "Tibetan" Ti -> "Tigrinya" To -> "Tonga (Tonga Islands)" Tn -> "Tswana" Ts -> "Tsonga" Tk -> "Turkmen" Tr -> "Turkish" Tw -> "Twi" Ug -> "Uighur" Uk -> "Ukrainian" Ur -> "Urdu" Uz -> "Uzbek" Ve -> "Venda" Vi -> "Vietnamese" Vo -> "Volapük" Cy -> "Welsh" Wa -> "Walloon" Wo -> "Wolof" Xh -> "Xhosa" Yi -> "Yiddish" Yo -> "Yoruba" Za -> "Zhuang" Zu -> "Zulu" } } /// A list of all 183 languages that have ISO 639-1 codes. /// /// ## Examples /// /// ```gleam /// all /// |> list.length /// // -> 183 /// /// all /// |> list.filter(fn(lang) { /// to_iso639_1(lang) |> string.starts_with("e") /// }) /// // -> [Ee, El, En, Eo, Es, Et, Eu] /// ``` pub const all: List(Language) = [ Aa, Ab, Af, Ak, Sq, Am, Ar, An, Hy, As, Av, Ae, Ay, Az, Ba, Bm, Eu, Be, Bn, Bi, Bs, Br, Bg, My, Ca, Ch, Ce, Zh, Cu, Cv, Kw, Co, Cr, Cs, Da, Dv, Nl, Dz, En, Eo, Et, Ee, Fo, Fj, Fi, Fr, Fy, Ff, Ka, De, Gd, Ga, Gl, Gv, El, Gn, Gu, Ht, Ha, He, Hz, Hi, Ho, Hr, Hu, Ig, Is, Io, Ii, Iu, Ie, Ia, Id, Ik, It, Jv, Ja, Kl, Kn, Ks, Kr, Kk, Km, Ki, Rw, Ky, Kv, Kg, Ko, Kj, Ku, Lo, La, Lv, Li, Ln, Lt, Lb, Lu, Lg, Mk, Mh, Ml, Mi, Mr, Ms, Mg, Mt, Mn, Na, Nv, Nr, Nd, Ng, Ne, Nn, Nb, No, Ny, Oc, Oj, Or, Om, Os, Pa, Fa, Pi, Pl, Pt, Ps, Qu, Rm, Ro, Rn, Ru, Sg, Sa, Si, Sk, Sl, Se, Sm, Sn, Sd, So, St, Es, Sc, Sr, Ss, Su, Sw, Sv, Ty, Ta, Tt, Te, Tg, Tl, Th, Bo, Ti, To, Tn, Ts, Tk, Tr, Tw, Ug, Uk, Ur, Uz, Ve, Vi, Vo, Cy, Wa, Wo, Xh, Yi, Yo, Za, Zu, ]