use enum_iterator_derive::IntoEnumIterator;
#[derive(Copy, Debug, PartialEq, Clone, Eq, Hash, IntoEnumIterator)]
pub enum Language {
Afar,
Abkhaz,
Avestan,
Afrikaans,
Akan,
Amharic,
Aragonese,
Arabic,
Assamese,
Avaric,
Aymara,
Azerbaijani,
Bashkir,
Belarusian,
Bulgarian,
Bihari,
Bislama,
Bambara,
Bengali,
Tibetan,
Breton,
Bosnian,
Catalan,
Chechen,
Chamorro,
Corsican,
Cree,
Czech,
ChurchSlavonic,
Chuvash,
Welsh,
Danish,
German,
Divehi,
Dzongkha,
Ewe,
Greek,
English,
Esperanto,
Spanish,
Estonian,
Basque,
Persian,
Fula,
Finnish,
Fijian,
Faroese,
French,
WesternFrisian,
Irish,
Gaelic,
Galician,
Guarani,
Gujarati,
Manx,
Hausa,
Hebrew,
Hindi,
HiriMotu,
Croatian,
Haitian,
Hungarian,
Armenian,
Herero,
Interlingua,
Indonesian,
Interlingue,
Igbo,
Nuosu,
Inupiaq,
Ido,
Icelandic,
Italian,
Inuktitut,
Japanese,
Javanese,
Georgian,
Kongo,
Kikuyu,
Kwanyama,
Kazakh,
Kalaallisut,
Khmer,
Kannada,
Korean,
Kanuri,
Kashmiri,
Kurdish,
Komi,
Cornish,
Kyrgyz,
Latin,
Luxembourgish,
Ganda,
Limburgish,
Lingala,
Lao,
Lithuanian,
LubaKatanga,
Latvian,
Malagasy,
Marshallese,
Maori,
Macedonian,
Malayalam,
Mongolian,
Marathi,
Malay,
Maltese,
Burmese,
Nauruan,
NorwegianBokmal,
NorthernNdebele,
Nepali,
Ndonga,
Dutch,
NorwegianNynorsk,
Norwegian,
SouthernNdebele,
Navajo,
Chichewa,
Occitan,
Ojibwe,
Oromo,
Oriya,
Ossetian,
Punjabi,
Pali,
Polish,
Pashto,
Portuguese,
Quechua,
Romansh,
Kirundi,
Romanian,
Russian,
Kinyarwanda,
Sanskrit,
Sardinian,
Sindhi,
NorthernSami,
Sango,
Sinhalese,
Slovak,
Slovene,
Samoan,
Shona,
Somali,
Albanian,
Serbian,
Swati,
SouthernSotho,
Sundanese,
Swedish,
Swahili,
Tamil,
Telugu,
Tajik,
Thai,
Tigrinya,
Turkmen,
Tagalog,
Tswana,
Tonga,
Turkish,
Tsonga,
Tatar,
Twi,
Tahitian,
Uyghur,
Ukrainian,
Urdu,
Uzbek,
Venda,
Vietnamese,
Volapuk,
Walloon,
Wolof,
Xhosa,
Yiddish,
Yoruba,
Zhuang,
Chinese,
Zulu,
}
impl serde::Serialize for Language {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
use serde::ser::SerializeMap;
let mut map = serializer.serialize_map(Some(3))?;
map.serialize_entry("id", self.id())?;
map.serialize_entry("id3", self.to_3_letter_code())?;
map.serialize_entry("human", self.human().as_str())?;
map.end()
}
}
impl std::str::FromStr for Language {
type Err = crate::Error;
fn from_str(v: &str) -> Result<Language, Self::Err> {
Language::from_2_letter_code(v)
}
}
impl ToString for Language {
fn to_string(&self) -> String {
self.human()
}
}
impl Default for Language {
fn default() -> Self {
Self::English
}
}
impl Language {
pub fn from_3_letter_code(code: &str) -> Result<Language, crate::Error> {
Ok(match code {
"aar" => Self::Afar,
"abk" => Self::Abkhaz,
"ave" => Self::Avestan,
"afr" => Self::Afrikaans,
"aka" => Self::Akan,
"amh" => Self::Amharic,
"arg" => Self::Aragonese,
"ara" => Self::Arabic,
"asm" => Self::Assamese,
"ava" => Self::Avaric,
"aym" => Self::Aymara,
"aze" => Self::Azerbaijani,
"bak" => Self::Bashkir,
"bel" => Self::Belarusian,
"bul" => Self::Bulgarian,
"bih" => Self::Bihari,
"bis" => Self::Bislama,
"bam" => Self::Bambara,
"ben" => Self::Bengali,
"bod" => Self::Tibetan,
"bre" => Self::Breton,
"bos" => Self::Bosnian,
"cat" => Self::Catalan,
"che" => Self::Chechen,
"cha" => Self::Chamorro,
"cos" => Self::Corsican,
"cre" => Self::Cree,
"ces" => Self::Czech,
"chu" => Self::ChurchSlavonic,
"chv" => Self::Chuvash,
"cym" => Self::Welsh,
"dan" => Self::Danish,
"deu" => Self::German,
"div" => Self::Divehi,
"dzo" => Self::Dzongkha,
"ewe" => Self::Ewe,
"ell" => Self::Greek,
"eng" => Self::English,
"epo" => Self::Esperanto,
"spa" => Self::Spanish,
"est" => Self::Estonian,
"eus" => Self::Basque,
"fas" => Self::Persian,
"ful" => Self::Fula,
"fin" => Self::Finnish,
"fij" => Self::Fijian,
"fao" => Self::Faroese,
"fra" => Self::French,
"fry" => Self::WesternFrisian,
"gle" => Self::Irish,
"gla" => Self::Gaelic,
"glg" => Self::Galician,
"grn" => Self::Guarani,
"guj" => Self::Gujarati,
"glv" => Self::Manx,
"hau" => Self::Hausa,
"heb" => Self::Hebrew,
"hin" => Self::Hindi,
"hmo" => Self::HiriMotu,
"hrv" => Self::Croatian,
"hat" => Self::Haitian,
"hun" => Self::Hungarian,
"hye" => Self::Armenian,
"her" => Self::Herero,
"ina" => Self::Interlingua,
"ind" => Self::Indonesian,
"ile" => Self::Interlingue,
"ibo" => Self::Igbo,
"iii" => Self::Nuosu,
"ipk" => Self::Inupiaq,
"ido" => Self::Ido,
"isl" => Self::Icelandic,
"ita" => Self::Italian,
"iku" => Self::Inuktitut,
"jpn" => Self::Japanese,
"jav" => Self::Javanese,
"kat" => Self::Georgian,
"kon" => Self::Kongo,
"kik" => Self::Kikuyu,
"kua" => Self::Kwanyama,
"kaz" => Self::Kazakh,
"kal" => Self::Kalaallisut,
"khm" => Self::Khmer,
"kan" => Self::Kannada,
"kor" => Self::Korean,
"kau" => Self::Kanuri,
"kas" => Self::Kashmiri,
"kur" => Self::Kurdish,
"kom" => Self::Komi,
"cor" => Self::Cornish,
"kir" => Self::Kyrgyz,
"lat" => Self::Latin,
"ltz" => Self::Luxembourgish,
"lug" => Self::Ganda,
"lim" => Self::Limburgish,
"lin" => Self::Lingala,
"lao" => Self::Lao,
"lit" => Self::Lithuanian,
"lub" => Self::LubaKatanga,
"lav" => Self::Latvian,
"mlg" => Self::Malagasy,
"mah" => Self::Marshallese,
"mri" => Self::Maori,
"mkd" => Self::Macedonian,
"mal" => Self::Malayalam,
"mon" => Self::Mongolian,
"mar" => Self::Marathi,
"msa" => Self::Malay,
"mlt" => Self::Maltese,
"mya" => Self::Burmese,
"nau" => Self::Nauruan,
"nob" => Self::NorwegianBokmal,
"nde" => Self::NorthernNdebele,
"nep" => Self::Nepali,
"ndo" => Self::Ndonga,
"nld" => Self::Dutch,
"nno" => Self::NorwegianNynorsk,
"nor" => Self::Norwegian,
"nbl" => Self::SouthernNdebele,
"nav" => Self::Navajo,
"nya" => Self::Chichewa,
"oci" => Self::Occitan,
"oji" => Self::Ojibwe,
"orm" => Self::Oromo,
"ori" => Self::Oriya,
"oss" => Self::Ossetian,
"pan" => Self::Punjabi,
"pli" => Self::Pali,
"pol" => Self::Polish,
"pus" => Self::Pashto,
"por" => Self::Portuguese,
"que" => Self::Quechua,
"roh" => Self::Romansh,
"run" => Self::Kirundi,
"ron" => Self::Romanian,
"rus" => Self::Russian,
"kin" => Self::Kinyarwanda,
"san" => Self::Sanskrit,
"srd" => Self::Sardinian,
"snd" => Self::Sindhi,
"sme" => Self::NorthernSami,
"sag" => Self::Sango,
"sin" => Self::Sinhalese,
"slk" => Self::Slovak,
"slv" => Self::Slovene,
"smo" => Self::Samoan,
"sna" => Self::Shona,
"som" => Self::Somali,
"sqi" => Self::Albanian,
"srp" => Self::Serbian,
"ssw" => Self::Swati,
"sot" => Self::SouthernSotho,
"sun" => Self::Sundanese,
"swe" => Self::Swedish,
"swa" => Self::Swahili,
"tam" => Self::Tamil,
"tel" => Self::Telugu,
"tgk" => Self::Tajik,
"tha" => Self::Thai,
"tir" => Self::Tigrinya,
"tuk" => Self::Turkmen,
"tgl" => Self::Tagalog,
"tsn" => Self::Tswana,
"ton" => Self::Tonga,
"tur" => Self::Turkish,
"tso" => Self::Tsonga,
"tat" => Self::Tatar,
"twi" => Self::Twi,
"tah" => Self::Tahitian,
"uig" => Self::Uyghur,
"ukr" => Self::Ukrainian,
"urd" => Self::Urdu,
"uzb" => Self::Uzbek,
"ven" => Self::Venda,
"vie" => Self::Vietnamese,
"vol" => Self::Volapuk,
"wln" => Self::Walloon,
"wol" => Self::Wolof,
"xho" => Self::Xhosa,
"yid" => Self::Yiddish,
"yor" => Self::Yoruba,
"zha" => Self::Zhuang,
"zho" => Self::Chinese,
"zul" => Self::Zulu,
_ => {
return Err(crate::Error::InvalidCode {
found: code.to_string(),
})
}
})
}
pub fn to_3_letter_code(&self) -> &'static str {
match self {
Self::Afar => "aar",
Self::Abkhaz => "abk",
Self::Avestan => "ave",
Self::Afrikaans => "afr",
Self::Akan => "aka",
Self::Amharic => "amh",
Self::Aragonese => "arg",
Self::Arabic => "ara",
Self::Assamese => "asm",
Self::Avaric => "ava",
Self::Aymara => "aym",
Self::Azerbaijani => "aze",
Self::Bashkir => "bak",
Self::Belarusian => "bel",
Self::Bulgarian => "bul",
Self::Bihari => "bih",
Self::Bislama => "bis",
Self::Bambara => "bam",
Self::Bengali => "ben",
Self::Tibetan => "bod",
Self::Breton => "bre",
Self::Bosnian => "bos",
Self::Catalan => "cat",
Self::Chechen => "che",
Self::Chamorro => "cha",
Self::Corsican => "cos",
Self::Cree => "cre",
Self::Czech => "ces",
Self::ChurchSlavonic => "chu",
Self::Chuvash => "chv",
Self::Welsh => "cym",
Self::Danish => "dan",
Self::German => "deu",
Self::Divehi => "div",
Self::Dzongkha => "dzo",
Self::Ewe => "ewe",
Self::Greek => "ell",
Self::English => "eng",
Self::Esperanto => "epo",
Self::Spanish => "spa",
Self::Estonian => "est",
Self::Basque => "eus",
Self::Persian => "fas",
Self::Fula => "ful",
Self::Finnish => "fin",
Self::Fijian => "fij",
Self::Faroese => "fao",
Self::French => "fra",
Self::WesternFrisian => "fry",
Self::Irish => "gle",
Self::Gaelic => "gla",
Self::Galician => "glg",
Self::Guarani => "grn",
Self::Gujarati => "guj",
Self::Manx => "glv",
Self::Hausa => "hau",
Self::Hebrew => "heb",
Self::Hindi => "hin",
Self::HiriMotu => "hmo",
Self::Croatian => "hrv",
Self::Haitian => "hat",
Self::Hungarian => "hun",
Self::Armenian => "hye",
Self::Herero => "her",
Self::Interlingua => "ina",
Self::Indonesian => "ind",
Self::Interlingue => "ile",
Self::Igbo => "ibo",
Self::Nuosu => "iii",
Self::Inupiaq => "ipk",
Self::Ido => "ido",
Self::Icelandic => "isl",
Self::Italian => "ita",
Self::Inuktitut => "iku",
Self::Japanese => "jpn",
Self::Javanese => "jav",
Self::Georgian => "kat",
Self::Kongo => "kon",
Self::Kikuyu => "kik",
Self::Kwanyama => "kua",
Self::Kazakh => "kaz",
Self::Kalaallisut => "kal",
Self::Khmer => "khm",
Self::Kannada => "kan",
Self::Korean => "kor",
Self::Kanuri => "kau",
Self::Kashmiri => "kas",
Self::Kurdish => "kur",
Self::Komi => "kom",
Self::Cornish => "cor",
Self::Kyrgyz => "kir",
Self::Latin => "lat",
Self::Luxembourgish => "ltz",
Self::Ganda => "lug",
Self::Limburgish => "lim",
Self::Lingala => "lin",
Self::Lao => "lao",
Self::Lithuanian => "lit",
Self::LubaKatanga => "lub",
Self::Latvian => "lav",
Self::Malagasy => "mlg",
Self::Marshallese => "mah",
Self::Maori => "mri",
Self::Macedonian => "mkd",
Self::Malayalam => "mal",
Self::Mongolian => "mon",
Self::Marathi => "mar",
Self::Malay => "msa",
Self::Maltese => "mlt",
Self::Burmese => "mya",
Self::Nauruan => "nau",
Self::NorwegianBokmal => "nob",
Self::NorthernNdebele => "nde",
Self::Nepali => "nep",
Self::Ndonga => "ndo",
Self::Dutch => "nld",
Self::NorwegianNynorsk => "nno",
Self::Norwegian => "nor",
Self::SouthernNdebele => "nbl",
Self::Navajo => "nav",
Self::Chichewa => "nya",
Self::Occitan => "oci",
Self::Ojibwe => "oji",
Self::Oromo => "orm",
Self::Oriya => "ori",
Self::Ossetian => "oss",
Self::Punjabi => "pan",
Self::Pali => "pli",
Self::Polish => "pol",
Self::Pashto => "pus",
Self::Portuguese => "por",
Self::Quechua => "que",
Self::Romansh => "roh",
Self::Kirundi => "run",
Self::Romanian => "ron",
Self::Russian => "rus",
Self::Kinyarwanda => "kin",
Self::Sanskrit => "san",
Self::Sardinian => "srd",
Self::Sindhi => "snd",
Self::NorthernSami => "sme",
Self::Sango => "sag",
Self::Sinhalese => "sin",
Self::Slovak => "slk",
Self::Slovene => "slv",
Self::Samoan => "smo",
Self::Shona => "sna",
Self::Somali => "som",
Self::Albanian => "sqi",
Self::Serbian => "srp",
Self::Swati => "ssw",
Self::SouthernSotho => "sot",
Self::Sundanese => "sun",
Self::Swedish => "swe",
Self::Swahili => "swa",
Self::Tamil => "tam",
Self::Telugu => "tel",
Self::Tajik => "tgk",
Self::Thai => "tha",
Self::Tigrinya => "tir",
Self::Turkmen => "tuk",
Self::Tagalog => "tgl",
Self::Tswana => "tsn",
Self::Tonga => "ton",
Self::Turkish => "tur",
Self::Tsonga => "tso",
Self::Tatar => "tat",
Self::Twi => "twi",
Self::Tahitian => "tah",
Self::Uyghur => "uig",
Self::Ukrainian => "ukr",
Self::Urdu => "urd",
Self::Uzbek => "uzb",
Self::Venda => "ven",
Self::Vietnamese => "vie",
Self::Volapuk => "vol",
Self::Walloon => "wln",
Self::Wolof => "wol",
Self::Xhosa => "xho",
Self::Yiddish => "yid",
Self::Yoruba => "yor",
Self::Zhuang => "zha",
Self::Chinese => "zho",
Self::Zulu => "zul",
}
}
pub fn from_2_letter_code(code: &str) -> Result<Language, crate::Error> {
Ok(match code {
"aa" => Self::Afar,
"ab" => Self::Abkhaz,
"ae" => Self::Avestan,
"af" => Self::Afrikaans,
"ak" => Self::Akan,
"am" => Self::Amharic,
"an" => Self::Aragonese,
"ar" => Self::Arabic,
"as" => Self::Assamese,
"av" => Self::Avaric,
"ay" => Self::Aymara,
"az" => Self::Azerbaijani,
"ba" => Self::Bashkir,
"be" => Self::Belarusian,
"bg" => Self::Bulgarian,
"bh" => Self::Bihari,
"bi" => Self::Bislama,
"bm" => Self::Bambara,
"bn" => Self::Bengali,
"bo" => Self::Tibetan,
"br" => Self::Breton,
"bs" => Self::Bosnian,
"ca" => Self::Catalan,
"ce" => Self::Chechen,
"ch" => Self::Chamorro,
"co" => Self::Corsican,
"cr" => Self::Cree,
"cs" => Self::Czech,
"cu" => Self::ChurchSlavonic,
"cv" => Self::Chuvash,
"cy" => Self::Welsh,
"da" => Self::Danish,
"de" => Self::German,
"dv" => Self::Divehi,
"dz" => Self::Dzongkha,
"ee" => Self::Ewe,
"el" => Self::Greek,
"en" => Self::English,
"eo" => Self::Esperanto,
"es" => Self::Spanish,
"et" => Self::Estonian,
"eu" => Self::Basque,
"fa" => Self::Persian,
"ff" => Self::Fula,
"fi" => Self::Finnish,
"fj" => Self::Fijian,
"fo" => Self::Faroese,
"fr" => Self::French,
"fy" => Self::WesternFrisian,
"ga" => Self::Irish,
"gd" => Self::Gaelic,
"gl" => Self::Galician,
"gn" => Self::Guarani,
"gu" => Self::Gujarati,
"gv" => Self::Manx,
"ha" => Self::Hausa,
"he" => Self::Hebrew,
"hi" => Self::Hindi,
"ho" => Self::HiriMotu,
"hr" => Self::Croatian,
"ht" => Self::Haitian,
"hu" => Self::Hungarian,
"hy" => Self::Armenian,
"hz" => Self::Herero,
"ia" => Self::Interlingua,
"id" => Self::Indonesian,
"ie" => Self::Interlingue,
"ig" => Self::Igbo,
"ii" => Self::Nuosu,
"ik" => Self::Inupiaq,
"io" => Self::Ido,
"is" => Self::Icelandic,
"it" => Self::Italian,
"iu" => Self::Inuktitut,
"ja" => Self::Japanese,
"jv" => Self::Javanese,
"ka" => Self::Georgian,
"kg" => Self::Kongo,
"ki" => Self::Kikuyu,
"kj" => Self::Kwanyama,
"kk" => Self::Kazakh,
"kl" => Self::Kalaallisut,
"km" => Self::Khmer,
"kn" => Self::Kannada,
"ko" => Self::Korean,
"kr" => Self::Kanuri,
"ks" => Self::Kashmiri,
"ku" => Self::Kurdish,
"kv" => Self::Komi,
"kw" => Self::Cornish,
"ky" => Self::Kyrgyz,
"la" => Self::Latin,
"lb" => Self::Luxembourgish,
"lg" => Self::Ganda,
"li" => Self::Limburgish,
"ln" => Self::Lingala,
"lo" => Self::Lao,
"lt" => Self::Lithuanian,
"lu" => Self::LubaKatanga,
"lv" => Self::Latvian,
"mg" => Self::Malagasy,
"mh" => Self::Marshallese,
"mi" => Self::Maori,
"mk" => Self::Macedonian,
"ml" => Self::Malayalam,
"mn" => Self::Mongolian,
"mr" => Self::Marathi,
"ms" => Self::Malay,
"mt" => Self::Maltese,
"my" => Self::Burmese,
"na" => Self::Nauruan,
"nb" => Self::NorwegianBokmal,
"nd" => Self::NorthernNdebele,
"ne" => Self::Nepali,
"ng" => Self::Ndonga,
"nl" => Self::Dutch,
"nn" => Self::NorwegianNynorsk,
"no" => Self::Norwegian,
"nr" => Self::SouthernNdebele,
"nv" => Self::Navajo,
"ny" => Self::Chichewa,
"oc" => Self::Occitan,
"oj" => Self::Ojibwe,
"om" => Self::Oromo,
"or" => Self::Oriya,
"os" => Self::Ossetian,
"pa" => Self::Punjabi,
"pi" => Self::Pali,
"pl" => Self::Polish,
"ps" => Self::Pashto,
"pt" => Self::Portuguese,
"qu" => Self::Quechua,
"rm" => Self::Romansh,
"rn" => Self::Kirundi,
"ro" => Self::Romanian,
"ru" => Self::Russian,
"rw" => Self::Kinyarwanda,
"sa" => Self::Sanskrit,
"sc" => Self::Sardinian,
"sd" => Self::Sindhi,
"se" => Self::NorthernSami,
"sg" => Self::Sango,
"si" => Self::Sinhalese,
"sk" => Self::Slovak,
"sl" => Self::Slovene,
"sm" => Self::Samoan,
"sn" => Self::Shona,
"so" => Self::Somali,
"sq" => Self::Albanian,
"sr" => Self::Serbian,
"ss" => Self::Swati,
"st" => Self::SouthernSotho,
"su" => Self::Sundanese,
"sv" => Self::Swedish,
"sw" => Self::Swahili,
"ta" => Self::Tamil,
"te" => Self::Telugu,
"tg" => Self::Tajik,
"th" => Self::Thai,
"ti" => Self::Tigrinya,
"tk" => Self::Turkmen,
"tl" => Self::Tagalog,
"tn" => Self::Tswana,
"to" => Self::Tonga,
"tr" => Self::Turkish,
"ts" => Self::Tsonga,
"tt" => Self::Tatar,
"tw" => Self::Twi,
"ty" => Self::Tahitian,
"ug" => Self::Uyghur,
"uk" => Self::Ukrainian,
"ur" => Self::Urdu,
"uz" => Self::Uzbek,
"ve" => Self::Venda,
"vi" => Self::Vietnamese,
"vo" => Self::Volapuk,
"wa" => Self::Walloon,
"wo" => Self::Wolof,
"xh" => Self::Xhosa,
"yi" => Self::Yiddish,
"yo" => Self::Yoruba,
"za" => Self::Zhuang,
"zh" => Self::Chinese,
"zu" => Self::Zulu,
_ => {
return Err(crate::Error::InvalidCode {
found: code.to_string(),
})
}
})
}
pub fn to_2_letter_code(&self) -> &'static str {
match self {
Self::Afar => "aa",
Self::Abkhaz => "ab",
Self::Avestan => "ae",
Self::Afrikaans => "af",
Self::Akan => "ak",
Self::Amharic => "am",
Self::Aragonese => "an",
Self::Arabic => "ar",
Self::Assamese => "as",
Self::Avaric => "av",
Self::Aymara => "ay",
Self::Azerbaijani => "az",
Self::Bashkir => "ba",
Self::Belarusian => "be",
Self::Bulgarian => "bg",
Self::Bihari => "bh",
Self::Bislama => "bi",
Self::Bambara => "bm",
Self::Bengali => "bn",
Self::Tibetan => "bo",
Self::Breton => "br",
Self::Bosnian => "bs",
Self::Catalan => "ca",
Self::Chechen => "ce",
Self::Chamorro => "ch",
Self::Corsican => "co",
Self::Cree => "cr",
Self::Czech => "cs",
Self::ChurchSlavonic => "cu",
Self::Chuvash => "cv",
Self::Welsh => "cy",
Self::Danish => "da",
Self::German => "de",
Self::Divehi => "dv",
Self::Dzongkha => "dz",
Self::Ewe => "ee",
Self::Greek => "el",
Self::English => "en",
Self::Esperanto => "eo",
Self::Spanish => "es",
Self::Estonian => "et",
Self::Basque => "eu",
Self::Persian => "fa",
Self::Fula => "ff",
Self::Finnish => "fi",
Self::Fijian => "fj",
Self::Faroese => "fo",
Self::French => "fr",
Self::WesternFrisian => "fy",
Self::Irish => "ga",
Self::Gaelic => "gd",
Self::Galician => "gl",
Self::Guarani => "gn",
Self::Gujarati => "gu",
Self::Manx => "gv",
Self::Hausa => "ha",
Self::Hebrew => "he",
Self::Hindi => "hi",
Self::HiriMotu => "ho",
Self::Croatian => "hr",
Self::Haitian => "ht",
Self::Hungarian => "hu",
Self::Armenian => "hy",
Self::Herero => "hz",
Self::Interlingua => "ia",
Self::Indonesian => "id",
Self::Interlingue => "ie",
Self::Igbo => "ig",
Self::Nuosu => "ii",
Self::Inupiaq => "ik",
Self::Ido => "io",
Self::Icelandic => "is",
Self::Italian => "it",
Self::Inuktitut => "iu",
Self::Japanese => "ja",
Self::Javanese => "jv",
Self::Georgian => "ka",
Self::Kongo => "kg",
Self::Kikuyu => "ki",
Self::Kwanyama => "kj",
Self::Kazakh => "kk",
Self::Kalaallisut => "kl",
Self::Khmer => "km",
Self::Kannada => "kn",
Self::Korean => "ko",
Self::Kanuri => "kr",
Self::Kashmiri => "ks",
Self::Kurdish => "ku",
Self::Komi => "kv",
Self::Cornish => "kw",
Self::Kyrgyz => "ky",
Self::Latin => "la",
Self::Luxembourgish => "lb",
Self::Ganda => "lg",
Self::Limburgish => "li",
Self::Lingala => "ln",
Self::Lao => "lo",
Self::Lithuanian => "lt",
Self::LubaKatanga => "lu",
Self::Latvian => "lv",
Self::Malagasy => "mg",
Self::Marshallese => "mh",
Self::Maori => "mi",
Self::Macedonian => "mk",
Self::Malayalam => "ml",
Self::Mongolian => "mn",
Self::Marathi => "mr",
Self::Malay => "ms",
Self::Maltese => "mt",
Self::Burmese => "my",
Self::Nauruan => "na",
Self::NorwegianBokmal => "nb",
Self::NorthernNdebele => "nd",
Self::Nepali => "ne",
Self::Ndonga => "ng",
Self::Dutch => "nl",
Self::NorwegianNynorsk => "nn",
Self::Norwegian => "no",
Self::SouthernNdebele => "nr",
Self::Navajo => "nv",
Self::Chichewa => "ny",
Self::Occitan => "oc",
Self::Ojibwe => "oj",
Self::Oromo => "om",
Self::Oriya => "or",
Self::Ossetian => "os",
Self::Punjabi => "pa",
Self::Pali => "pi",
Self::Polish => "pl",
Self::Pashto => "ps",
Self::Portuguese => "pt",
Self::Quechua => "qu",
Self::Romansh => "rm",
Self::Kirundi => "rn",
Self::Romanian => "ro",
Self::Russian => "ru",
Self::Kinyarwanda => "rw",
Self::Sanskrit => "sa",
Self::Sardinian => "sc",
Self::Sindhi => "sd",
Self::NorthernSami => "se",
Self::Sango => "sg",
Self::Sinhalese => "si",
Self::Slovak => "sk",
Self::Slovene => "sl",
Self::Samoan => "sm",
Self::Shona => "sn",
Self::Somali => "so",
Self::Albanian => "sq",
Self::Serbian => "sr",
Self::Swati => "ss",
Self::SouthernSotho => "st",
Self::Sundanese => "su",
Self::Swedish => "sv",
Self::Swahili => "sw",
Self::Tamil => "ta",
Self::Telugu => "te",
Self::Tajik => "tg",
Self::Thai => "th",
Self::Tigrinya => "ti",
Self::Turkmen => "tk",
Self::Tagalog => "tl",
Self::Tswana => "tn",
Self::Tonga => "to",
Self::Turkish => "tr",
Self::Tsonga => "ts",
Self::Tatar => "tt",
Self::Twi => "tw",
Self::Tahitian => "ty",
Self::Uyghur => "ug",
Self::Ukrainian => "uk",
Self::Urdu => "ur",
Self::Uzbek => "uz",
Self::Venda => "ve",
Self::Vietnamese => "vi",
Self::Volapuk => "vo",
Self::Walloon => "wa",
Self::Wolof => "wo",
Self::Xhosa => "xh",
Self::Yiddish => "yi",
Self::Yoruba => "yo",
Self::Zhuang => "za",
Self::Chinese => "zh",
Self::Zulu => "zu",
}
}
pub fn human(&self) -> String {
match self {
Self::Afar => "Afar",
Self::Abkhaz => "Abkhaz",
Self::Avestan => "Avestan",
Self::Afrikaans => "Afrikaans",
Self::Akan => "Akan",
Self::Amharic => "Amharic",
Self::Aragonese => "Aragonese",
Self::Arabic => "Arabic",
Self::Assamese => "Assamese",
Self::Avaric => "Avaric",
Self::Aymara => "Aymara",
Self::Azerbaijani => "Azerbaijani",
Self::Bashkir => "Bashkir",
Self::Belarusian => "Belarusian",
Self::Bulgarian => "Bulgarian",
Self::Bihari => "Bihari",
Self::Bislama => "Bislama",
Self::Bambara => "Bambara",
Self::Bengali => "Bengali",
Self::Tibetan => "Tibetan",
Self::Breton => "Breton",
Self::Bosnian => "Bosnian",
Self::Catalan => "Catalan",
Self::Chechen => "Chechen",
Self::Chamorro => "Chamorro",
Self::Corsican => "Corsican",
Self::Cree => "Cree",
Self::Czech => "Czech",
Self::ChurchSlavonic => "Church Slavonic",
Self::Chuvash => "Chuvash",
Self::Welsh => "Welsh",
Self::Danish => "Danish",
Self::German => "German",
Self::Divehi => "Divehi",
Self::Dzongkha => "Dzongkha",
Self::Ewe => "Ewe",
Self::Greek => "Greek",
Self::English => "English",
Self::Esperanto => "Esperanto",
Self::Spanish => "Spanish",
Self::Estonian => "Estonian",
Self::Basque => "Basque",
Self::Persian => "Persian",
Self::Fula => "Fula",
Self::Finnish => "Finnish",
Self::Fijian => "Fijian",
Self::Faroese => "Faroese",
Self::French => "French",
Self::WesternFrisian => "Western Frisian",
Self::Irish => "Irish",
Self::Gaelic => "Gaelic",
Self::Galician => "Galician",
Self::Guarani => "Guaraní",
Self::Gujarati => "Gujarati",
Self::Manx => "Manx",
Self::Hausa => "Hausa",
Self::Hebrew => "Hebrew",
Self::Hindi => "Hindi",
Self::HiriMotu => "Hiri Motu",
Self::Croatian => "Croatian",
Self::Haitian => "Haitian",
Self::Hungarian => "Hungarian",
Self::Armenian => "Armenian",
Self::Herero => "Herero",
Self::Interlingua => "Interlingua",
Self::Indonesian => "Indonesian",
Self::Interlingue => "Interlingue",
Self::Igbo => "Igbo",
Self::Nuosu => "Nuosu",
Self::Inupiaq => "Inupiaq",
Self::Ido => "Ido",
Self::Icelandic => "Icelandic",
Self::Italian => "Italian",
Self::Inuktitut => "Inuktitut",
Self::Japanese => "Japanese",
Self::Javanese => "Javanese",
Self::Georgian => "Georgian",
Self::Kongo => "Kongo",
Self::Kikuyu => "Kikuyu",
Self::Kwanyama => "Kwanyama",
Self::Kazakh => "Kazakh",
Self::Kalaallisut => "Kalaallisut",
Self::Khmer => "Khmer",
Self::Kannada => "Kannada",
Self::Korean => "Korean",
Self::Kanuri => "Kanuri",
Self::Kashmiri => "Kashmiri",
Self::Kurdish => "Kurdish",
Self::Komi => "Komi",
Self::Cornish => "Cornish",
Self::Kyrgyz => "Kyrgyz",
Self::Latin => "Latin",
Self::Luxembourgish => "Luxembourgish",
Self::Ganda => "Ganda",
Self::Limburgish => "Limburgish",
Self::Lingala => "Lingala",
Self::Lao => "Lao",
Self::Lithuanian => "Lithuanian",
Self::LubaKatanga => "Luba-Katanga",
Self::Latvian => "Latvian",
Self::Malagasy => "Malagasy",
Self::Marshallese => "Marshallese",
Self::Maori => "Māori",
Self::Macedonian => "Macedonian",
Self::Malayalam => "Malayalam",
Self::Mongolian => "Mongolian",
Self::Marathi => "Marathi",
Self::Malay => "Malay",
Self::Maltese => "Maltese",
Self::Burmese => "Burmese",
Self::Nauruan => "Nauruan",
Self::NorwegianBokmal => "Norwegian Bokmal",
Self::NorthernNdebele => "Northern Ndebele",
Self::Nepali => "Nepali",
Self::Ndonga => "Ndonga",
Self::Dutch => "Dutch",
Self::NorwegianNynorsk => "Norwegian Nynorsk",
Self::Norwegian => "Norwegian",
Self::SouthernNdebele => "Southern Ndebele",
Self::Navajo => "Navajo",
Self::Chichewa => "Chichewa",
Self::Occitan => "Occitan",
Self::Ojibwe => "Ojibwe",
Self::Oromo => "Oromo",
Self::Oriya => "Oriya",
Self::Ossetian => "Ossetian",
Self::Punjabi => "Punjabi",
Self::Pali => "Pāli",
Self::Polish => "Polish",
Self::Pashto => "Pashto",
Self::Portuguese => "Portuguese",
Self::Quechua => "Quechua",
Self::Romansh => "Romansh",
Self::Kirundi => "Kirundi",
Self::Romanian => "Romanian",
Self::Russian => "Russian",
Self::Kinyarwanda => "Kinyarwanda",
Self::Sanskrit => "Sanskrit",
Self::Sardinian => "Sardinian",
Self::Sindhi => "Sindhi",
Self::NorthernSami => "Northern Sami",
Self::Sango => "Sango",
Self::Sinhalese => "Sinhalese",
Self::Slovak => "Slovak",
Self::Slovene => "Slovene",
Self::Samoan => "Samoan",
Self::Shona => "Shona",
Self::Somali => "Somali",
Self::Albanian => "Albanian",
Self::Serbian => "Serbian",
Self::Swati => "Swati",
Self::SouthernSotho => "Southern Sotho",
Self::Sundanese => "Sundanese",
Self::Swedish => "Swedish",
Self::Swahili => "Swahili",
Self::Tamil => "Tamil",
Self::Telugu => "Telugu",
Self::Tajik => "Tajik",
Self::Thai => "Thai",
Self::Tigrinya => "Tigrinya",
Self::Turkmen => "Turkmen",
Self::Tagalog => "Tagalog",
Self::Tswana => "Tswana",
Self::Tonga => "Tonga",
Self::Turkish => "Turkish",
Self::Tsonga => "Tsonga",
Self::Tatar => "Tatar",
Self::Twi => "Twi",
Self::Tahitian => "Tahitian",
Self::Uyghur => "Uyghur",
Self::Ukrainian => "Ukrainian",
Self::Urdu => "Urdu",
Self::Uzbek => "Uzbek",
Self::Venda => "Venda",
Self::Vietnamese => "Vietnamese",
Self::Volapuk => "Volapuk",
Self::Walloon => "Walloon",
Self::Wolof => "Wolof",
Self::Xhosa => "Xhosa",
Self::Yiddish => "Yiddish",
Self::Yoruba => "Yoruba",
Self::Zhuang => "Zhuang",
Self::Chinese => "Chinese",
Self::Zulu => "Zulu",
}
.to_string()
}
pub fn id(&self) -> &'static str {
self.to_2_letter_code()
}
pub fn from_accept_language_header(h: Option<String>, default: Self) -> Self {
if let Some(v) = h {
for code in accept_language::parse(v.as_str()).iter() {
let code = code.split('-').next().unwrap_or(code);
if let Ok(lang) = Self::from_2_letter_code(code) {
return lang;
}
}
}
default
}
}
impl Language {
pub fn all() -> Vec<Language> {
use enum_iterator::IntoEnumIterator;
Language::into_enum_iter().collect()
}
}
#[cfg(test)]
mod tests {
fn f(v: &str, l: super::Language) {
assert_eq!(
super::Language::from_accept_language_header(
Some(v.to_string()),
super::Language::Herero
),
l
)
}
#[test]
fn test() {
f("en-US, en-GB;q=0.5", super::Language::English);
f("hi", super::Language::Hindi);
f("hi, en", super::Language::Hindi);
}
}