Packages

🌍 Type-safe ISO 639 language codes for Gleam

Current section

Files

Jump to
lang src lang.gleam
Raw

src/lang.gleam

//// 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,
]