#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum Lang {
#[default]
En,
De,
Fr,
Es,
It,
Sq,
Hy,
Az,
Be,
Bs,
Bg,
Ca,
Zh,
Hr,
Cs,
Da,
Nl,
Et,
Fi,
Ka,
El,
Hi,
Hu,
Is,
Ga,
La,
Lv,
Lt,
Smj,
Lb,
Mk,
Mt,
Cnr,
Se,
No,
Nn,
Pl,
Pt,
Ro,
Rm,
Ru,
Sr,
Sk,
Sl,
Sma,
Sv,
Tr,
Uk,
Ur,
}
impl Lang {
#[must_use]
pub const fn code(self) -> &'static str {
match self {
Self::En => "en",
Self::De => "de",
Self::Fr => "fr",
Self::Es => "es",
Self::It => "it",
Self::Sq => "sq",
Self::Hy => "hy",
Self::Az => "az",
Self::Be => "be",
Self::Bs => "bs",
Self::Bg => "bg",
Self::Ca => "ca",
Self::Zh => "zh",
Self::Hr => "hr",
Self::Cs => "cs",
Self::Da => "da",
Self::Nl => "nl",
Self::Et => "et",
Self::Fi => "fi",
Self::Ka => "ka",
Self::El => "el",
Self::Hi => "hi",
Self::Hu => "hu",
Self::Is => "is",
Self::Ga => "ga",
Self::La => "la",
Self::Lv => "lv",
Self::Lt => "lt",
Self::Smj => "smj",
Self::Lb => "lb",
Self::Mk => "mk",
Self::Mt => "mt",
Self::Cnr => "cnr",
Self::Se => "se",
Self::No => "no",
Self::Nn => "nn",
Self::Pl => "pl",
Self::Pt => "pt",
Self::Ro => "ro",
Self::Rm => "rm",
Self::Ru => "ru",
Self::Sr => "sr",
Self::Sk => "sk",
Self::Sl => "sl",
Self::Sma => "sma",
Self::Sv => "sv",
Self::Tr => "tr",
Self::Uk => "uk",
Self::Ur => "ur",
}
}
#[must_use]
pub const fn endonym(self) -> &'static str {
match self {
Self::En => "English",
Self::De => "Deutsch",
Self::Fr => "Français",
Self::Es => "Español",
Self::It => "Italiano",
Self::Sq => "Shqip",
Self::Hy => "Հայերեն",
Self::Az => "Azərbaycanca",
Self::Be => "Беларуская",
Self::Bs => "Bosanski",
Self::Bg => "Български",
Self::Ca => "Català",
Self::Zh => "中文",
Self::Hr => "Hrvatski",
Self::Cs => "Čeština",
Self::Da => "Dansk",
Self::Nl => "Nederlands",
Self::Et => "Eesti",
Self::Fi => "Suomi",
Self::Ka => "ქართული",
Self::El => "Ελληνικά",
Self::Hi => "हिन्दी",
Self::Hu => "Magyar",
Self::Is => "Íslenska",
Self::Ga => "Gaeilge",
Self::La => "Latina",
Self::Lv => "Latviešu",
Self::Lt => "Lietuvių",
Self::Smj => "Julevsámegiella",
Self::Lb => "Lëtzebuergesch",
Self::Mk => "Македонски",
Self::Mt => "Malti",
Self::Cnr => "Crnogorski",
Self::Se => "Davvisámegiella",
Self::No => "Norsk bokmål",
Self::Nn => "Norsk nynorsk",
Self::Pl => "Polski",
Self::Pt => "Português",
Self::Ro => "Română",
Self::Rm => "Rumantsch",
Self::Ru => "Русский",
Self::Sr => "Српски",
Self::Sk => "Slovenčina",
Self::Sl => "Slovenščina",
Self::Sma => "Åarjelsaemien gïele",
Self::Sv => "Svenska",
Self::Tr => "Türkçe",
Self::Uk => "Українська",
Self::Ur => "اردو",
}
}
#[must_use]
pub fn from_code(code: &str) -> Option<Self> {
let primary = code.split(['-', '_']).next().unwrap_or(code);
match primary.to_ascii_lowercase().as_str() {
"en" => Some(Self::En),
"de" => Some(Self::De),
"fr" => Some(Self::Fr),
"es" => Some(Self::Es),
"it" => Some(Self::It),
"sq" => Some(Self::Sq),
"hy" => Some(Self::Hy),
"az" => Some(Self::Az),
"be" => Some(Self::Be),
"bs" => Some(Self::Bs),
"bg" => Some(Self::Bg),
"ca" => Some(Self::Ca),
"zh" => Some(Self::Zh),
"hr" => Some(Self::Hr),
"cs" => Some(Self::Cs),
"da" => Some(Self::Da),
"nl" => Some(Self::Nl),
"et" => Some(Self::Et),
"fi" => Some(Self::Fi),
"ka" => Some(Self::Ka),
"el" => Some(Self::El),
"hi" => Some(Self::Hi),
"hu" => Some(Self::Hu),
"is" => Some(Self::Is),
"ga" => Some(Self::Ga),
"la" => Some(Self::La),
"lv" => Some(Self::Lv),
"lt" => Some(Self::Lt),
"smj" => Some(Self::Smj),
"lb" => Some(Self::Lb),
"mk" => Some(Self::Mk),
"mt" => Some(Self::Mt),
"cnr" => Some(Self::Cnr),
"se" => Some(Self::Se),
"no" | "nb" => Some(Self::No),
"nn" => Some(Self::Nn),
"pl" => Some(Self::Pl),
"pt" => Some(Self::Pt),
"ro" => Some(Self::Ro),
"rm" => Some(Self::Rm),
"ru" => Some(Self::Ru),
"sr" => Some(Self::Sr),
"sk" => Some(Self::Sk),
"sl" => Some(Self::Sl),
"sma" => Some(Self::Sma),
"sv" => Some(Self::Sv),
"tr" => Some(Self::Tr),
"uk" => Some(Self::Uk),
"ur" => Some(Self::Ur),
_ => None,
}
}
#[must_use]
pub const fn dir(self) -> &'static str {
match self {
Self::Ur => "rtl",
_ => "ltr",
}
}
#[must_use]
pub const fn all() -> [Self; 49] {
[
Self::En,
Self::De,
Self::Fr,
Self::Es,
Self::It,
Self::Sq,
Self::Hy,
Self::Az,
Self::Be,
Self::Bs,
Self::Bg,
Self::Ca,
Self::Zh,
Self::Hr,
Self::Cs,
Self::Da,
Self::Nl,
Self::Et,
Self::Fi,
Self::Ka,
Self::El,
Self::Hi,
Self::Hu,
Self::Is,
Self::Ga,
Self::La,
Self::Lv,
Self::Lt,
Self::Smj,
Self::Lb,
Self::Mk,
Self::Mt,
Self::Cnr,
Self::Se,
Self::No,
Self::Nn,
Self::Pl,
Self::Pt,
Self::Ro,
Self::Rm,
Self::Ru,
Self::Sr,
Self::Sk,
Self::Sl,
Self::Sma,
Self::Sv,
Self::Tr,
Self::Uk,
Self::Ur,
]
}
}