lang
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
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"
}
Types
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 {
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
}
Constructors
-
AaAfar
-
AbAbkhazian
-
AfAfrikaans
-
AkAkan
-
SqAlbanian
-
AmAmharic
-
ArArabic
-
AnAragonese
-
HyArmenian
-
AsAssamese
-
AvAvaric
-
AeAvestan
-
AyAymara
-
AzAzerbaijani
-
BaBashkir
-
BmBambara
-
EuBasque
-
BeBelarusian
-
BnBengali
-
BiBislama
-
BsBosnian
-
BrBreton
-
BgBulgarian
-
MyBurmese
-
CaCatalan/Valencian
-
ChChamorro
-
CeChechen
-
ZhChinese
-
CuChurch Slavic/Old Slavonic/Church Slavonic/Old Bulgarian/Old Church Slavonic
-
CvChuvash
-
KwCornish
-
CoCorsican
-
CrCree
-
CsCzech
-
DaDanish
-
DvDivehi/Dhivehi/Maldivian
-
NlDutch/Flemish
-
DzDzongkha
-
EnEnglish
-
EoEsperanto
-
EtEstonian
-
EeEwe
-
FoFaroese
-
FjFijian
-
FiFinnish
-
FrFrench
-
FyWestern Frisian
-
FfFulah
-
KaGeorgian
-
DeGerman
-
GdGaelic/Scottish Gaelic
-
GaIrish
-
GlGalician
-
GvManx
-
ElGreek, Modern (1453-)
-
GnGuarani
-
GuGujarati
-
HtHaitian/Haitian Creole
-
HaHausa
-
HeHebrew
-
HzHerero
-
HiHindi
-
HoHiri Motu
-
HrCroatian
-
HuHungarian
-
IgIgbo
-
IsIcelandic
-
IoIdo
-
IiSichuan Yi/Nuosu
-
IuInuktitut
-
IeInterlingue/Occidental
-
IaInterlingua (International Auxiliary Language Association)
-
IdIndonesian
-
IkInupiaq
-
ItItalian
-
JvJavanese
-
JaJapanese
-
KlKalaallisut/Greenlandic
-
KnKannada
-
KsKashmiri
-
KrKanuri
-
KkKazakh
-
KmCentral Khmer
-
KiKikuyu/Gikuyu
-
RwKinyarwanda
-
KyKirghiz/Kyrgyz
-
KvKomi
-
KgKongo
-
KoKorean
-
KjKuanyama/Kwanyama
-
KuKurdish
-
LoLao
-
LaLatin
-
LvLatvian
-
LiLimburgan/Limburger/Limburgish
-
LnLingala
-
LtLithuanian
-
LbLuxembourgish/Letzeburgesch
-
LuLuba-Katanga
-
LgGanda
-
MkMacedonian
-
MhMarshallese
-
MlMalayalam
-
MiMaori
-
MrMarathi
-
MsMalay
-
MgMalagasy
-
MtMaltese
-
MnMongolian
-
NaNauru
-
NvNavajo/Navaho
-
NrNdebele, South/South Ndebele
-
NdNdebele, North/North Ndebele
-
NgNdonga
-
NeNepali
-
NnNorwegian Nynorsk/Nynorsk, Norwegian
-
NbBokmål, Norwegian/Norwegian Bokmål
-
NoNorwegian
-
NyChichewa/Chewa/Nyanja
-
OcOccitan (post 1500)
-
OjOjibwa
-
OrOriya
-
OmOromo
-
OsOssetian/Ossetic
-
PaPanjabi/Punjabi
-
FaPersian
-
PiPali
-
PlPolish
-
PtPortuguese
-
PsPushto/Pashto
-
QuQuechua
-
RmRomansh
-
RoRomanian/Moldavian/Moldovan
-
RnRundi
-
RuRussian
-
SgSango
-
SaSanskrit
-
SiSinhala/Sinhalese
-
SkSlovak
-
SlSlovenian
-
SeNorthern Sami
-
SmSamoan
-
SnShona
-
SdSindhi
-
SoSomali
-
StSotho, Southern
-
EsSpanish/Castilian
-
ScSardinian
-
SrSerbian
-
SsSwati
-
SuSundanese
-
SwSwahili
-
SvSwedish
-
TyTahitian
-
TaTamil
-
TtTatar
-
TeTelugu
-
TgTajik
-
TlTagalog
-
ThThai
-
BoTibetan
-
TiTigrinya
-
ToTonga (Tonga Islands)
-
TnTswana
-
TsTsonga
-
TkTurkmen
-
TrTurkish
-
TwTwi
-
UgUighur/Uyghur
-
UkUkrainian
-
UrUrdu
-
UzUzbek
-
VeVenda
-
ViVietnamese
-
VoVolapük
-
CyWelsh
-
WaWalloon
-
WoWolof
-
XhXhosa
-
YiYiddish
-
YoYoruba
-
ZaZhuang/Chuang
-
ZuZulu
Values
pub const all: List(Language)
A list of all 183 languages that have ISO 639-1 codes.
Examples
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 fn from_iso639_1(code: String) -> Result(Language, Nil)
Parse an ISO 639-1 two-letter code into a Language.
The input is case-insensitive and whitespace is trimmed.
Examples
from_iso639_1("en")
// -> Ok(En)
from_iso639_1("DE")
// -> Ok(De)
from_iso639_1("invalid")
// -> Error(Nil)
pub fn from_iso639_2(code: String) -> Result(Language, 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
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 to_iso639_1(language: Language) -> String
Convert a Language to its ISO 639-1 two-letter code.
Examples
to_iso639_1(En)
// -> "en"
to_iso639_1(De)
// -> "de"
pub fn to_iso639_2(language: Language) -> String
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
to_iso639_2(En)
// -> "eng"
to_iso639_2(De)
// -> "deu"
to_iso639_2(Zh)
// -> "zho"