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

  • 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/Valencian

  • Ch

    Chamorro

  • Ce

    Chechen

  • Zh

    Chinese

  • Cu

    Church Slavic/Old Slavonic/Church Slavonic/Old Bulgarian/Old Church Slavonic

  • Cv

    Chuvash

  • Kw

    Cornish

  • Co

    Corsican

  • Cr

    Cree

  • Cs

    Czech

  • Da

    Danish

  • Dv

    Divehi/Dhivehi/Maldivian

  • Nl

    Dutch/Flemish

  • 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/Scottish Gaelic

  • Ga

    Irish

  • Gl

    Galician

  • Gv

    Manx

  • El

    Greek, Modern (1453-)

  • Gn

    Guarani

  • Gu

    Gujarati

  • Ht

    Haitian/Haitian Creole

  • Ha

    Hausa

  • He

    Hebrew

  • Hz

    Herero

  • Hi

    Hindi

  • Ho

    Hiri Motu

  • Hr

    Croatian

  • Hu

    Hungarian

  • Ig

    Igbo

  • Is

    Icelandic

  • Io

    Ido

  • Ii

    Sichuan Yi/Nuosu

  • Iu

    Inuktitut

  • Ie

    Interlingue/Occidental

  • Ia

    Interlingua (International Auxiliary Language Association)

  • Id

    Indonesian

  • Ik

    Inupiaq

  • It

    Italian

  • Jv

    Javanese

  • Ja

    Japanese

  • Kl

    Kalaallisut/Greenlandic

  • Kn

    Kannada

  • Ks

    Kashmiri

  • Kr

    Kanuri

  • Kk

    Kazakh

  • Km

    Central Khmer

  • Ki

    Kikuyu/Gikuyu

  • Rw

    Kinyarwanda

  • Ky

    Kirghiz/Kyrgyz

  • Kv

    Komi

  • Kg

    Kongo

  • Ko

    Korean

  • Kj

    Kuanyama/Kwanyama

  • Ku

    Kurdish

  • Lo

    Lao

  • La

    Latin

  • Lv

    Latvian

  • Li

    Limburgan/Limburger/Limburgish

  • Ln

    Lingala

  • Lt

    Lithuanian

  • Lb

    Luxembourgish/Letzeburgesch

  • 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/Navaho

  • Nr

    Ndebele, South/South Ndebele

  • Nd

    Ndebele, North/North Ndebele

  • Ng

    Ndonga

  • Ne

    Nepali

  • Nn

    Norwegian Nynorsk/Nynorsk, Norwegian

  • Nb

    Bokmål, Norwegian/Norwegian Bokmål

  • No

    Norwegian

  • Ny

    Chichewa/Chewa/Nyanja

  • Oc

    Occitan (post 1500)

  • Oj

    Ojibwa

  • Or

    Oriya

  • Om

    Oromo

  • Os

    Ossetian/Ossetic

  • Pa

    Panjabi/Punjabi

  • Fa

    Persian

  • Pi

    Pali

  • Pl

    Polish

  • Pt

    Portuguese

  • Ps

    Pushto/Pashto

  • Qu

    Quechua

  • Rm

    Romansh

  • Ro

    Romanian/Moldavian/Moldovan

  • Rn

    Rundi

  • Ru

    Russian

  • Sg

    Sango

  • Sa

    Sanskrit

  • Si

    Sinhala/Sinhalese

  • Sk

    Slovak

  • Sl

    Slovenian

  • Se

    Northern Sami

  • Sm

    Samoan

  • Sn

    Shona

  • Sd

    Sindhi

  • So

    Somali

  • St

    Sotho, Southern

  • Es

    Spanish/Castilian

  • 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/Uyghur

  • 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/Chuang

  • Zu

    Zulu

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"
pub fn to_name(language: Language) -> String

Get the English name of a language.

Examples

to_name(En)
// -> "English"

to_name(Ja)
// -> "Japanese"
Search Document