use std::{env, fmt, str::FromStr};
#[derive(Debug, Clone, PartialEq)]
pub enum Lang {
EnUsUtf8,
ZhCnUtf8,
FrFrUtf8,
DeDeUtf8,
EsEsUtf8,
ItItUtf8,
JaJpUtf8,
KoKrUtf8,
PtPtUtf8,
RuRuUtf8,
ArSaUtf8,
HiInUtf8,
ThThUtf8,
ViVnUtf8,
NlNlUtf8,
SvSeUtf8,
FiFiUtf8,
}
impl fmt::Display for Lang {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let lang_str: &str = match self {
Lang::EnUsUtf8 => "English (US)",
Lang::ZhCnUtf8 => "中文 (中国)",
Lang::FrFrUtf8 => "Français (France)",
Lang::DeDeUtf8 => "Deutsch (Deutschland)",
Lang::EsEsUtf8 => "Español (España)",
Lang::ItItUtf8 => "Italiano (Italia)",
Lang::JaJpUtf8 => "日本語 (日本)",
Lang::KoKrUtf8 => "한국어 (한국)",
Lang::PtPtUtf8 => "Português (Portugal)",
Lang::RuRuUtf8 => "Русский (Россия)",
Lang::ArSaUtf8 => "العربية (السعودية)",
Lang::HiInUtf8 => "हिन्दी (भारत)",
Lang::ThThUtf8 => "ภาษาไทย (ประเทศไทย)",
Lang::ViVnUtf8 => "Tiếng Việt (Việt Nam)",
Lang::NlNlUtf8 => "Nederlands (Nederland)",
Lang::SvSeUtf8 => "Svenska (Sverige)",
Lang::FiFiUtf8 => "Suomi (Suomi)",
};
write!(f, "{}", lang_str)
}
}
impl Lang {
pub fn value(&self) -> u64 {
match self {
Lang::EnUsUtf8 => 0, Lang::ZhCnUtf8 => 28800, Lang::FrFrUtf8 => 3600, Lang::DeDeUtf8 => 3600, Lang::EsEsUtf8 => 3600, Lang::ItItUtf8 => 3600, Lang::JaJpUtf8 => 32400, Lang::KoKrUtf8 => 32400, Lang::PtPtUtf8 => 3600, Lang::RuRuUtf8 => 10800, Lang::ArSaUtf8 => 10800, Lang::HiInUtf8 => 19800, Lang::ThThUtf8 => 25200, Lang::ViVnUtf8 => 25200, Lang::NlNlUtf8 => 3600, Lang::SvSeUtf8 => 3600, Lang::FiFiUtf8 => 3600, }
}
}
impl Default for Lang {
fn default() -> Self {
Lang::ZhCnUtf8
}
}
impl FromStr for Lang {
type Err = ();
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"en_US.UTF-8" => Ok(Lang::EnUsUtf8),
"zh_CN.UTF-8" => Ok(Lang::ZhCnUtf8),
"fr_FR.UTF-8" => Ok(Lang::FrFrUtf8),
"de_DE.UTF-8" => Ok(Lang::DeDeUtf8),
"es_ES.UTF-8" => Ok(Lang::EsEsUtf8),
"it_IT.UTF-8" => Ok(Lang::ItItUtf8),
"ja_JP.UTF-8" => Ok(Lang::JaJpUtf8),
"ko_KR.UTF-8" => Ok(Lang::KoKrUtf8),
"pt_PT.UTF-8" => Ok(Lang::PtPtUtf8),
"ru_RU.UTF-8" => Ok(Lang::RuRuUtf8),
"ar_SA.UTF-8" => Ok(Lang::ArSaUtf8),
"hi_IN.UTF-8" => Ok(Lang::HiInUtf8),
"th_TH.UTF-8" => Ok(Lang::ThThUtf8),
"vi_VN.UTF-8" => Ok(Lang::ViVnUtf8),
"nl_NL.UTF-8" => Ok(Lang::NlNlUtf8),
"sv_SE.UTF-8" => Ok(Lang::SvSeUtf8),
"fi_FI.UTF-8" => Ok(Lang::FiFiUtf8),
_ => Err(()),
}
}
}
pub fn from_env_var() -> Lang {
let lang: Lang = env::var("LANG")
.unwrap_or_default()
.parse::<Lang>()
.unwrap_or_default();
lang
}