#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Locale {
De,
Tr,
Ar,
}
impl Locale {
pub fn apply(self, input: &str) -> String {
match self {
Locale::De => apply_de(input),
Locale::Tr => apply_tr(input),
Locale::Ar => apply_ar(input),
}
}
}
fn apply_de(input: &str) -> String {
input
.replace('ä', "ae")
.replace('ö', "oe")
.replace('ü', "ue")
.replace('ß', "ss")
.replace('Ä', "Ae")
.replace('Ö', "Oe")
.replace('Ü', "Ue")
}
fn apply_tr(input: &str) -> String {
input
.replace('ı', "i")
.replace('İ', "I")
.replace('ğ', "g")
.replace('Ğ', "G")
.replace('ş', "s")
.replace('Ş', "S")
.replace('ç', "c")
.replace('Ç', "C")
.replace('ö', "o")
.replace('Ö', "O")
.replace('ü', "u")
.replace('Ü', "U")
}
fn apply_ar(input: &str) -> String {
let mut out = String::with_capacity(input.len());
for ch in input.chars() {
match ch {
'ا' => out.push('a'),
'أ' => out.push('a'),
'إ' => out.push_str("ii"),
'آ' => out.push_str("aa"),
'ب' => out.push('b'),
'ت' => out.push('t'),
'ث' => out.push_str("th"),
'ج' => out.push('j'),
'ح' => out.push_str("ha"),
'خ' => out.push_str("kh"),
'د' => out.push('d'),
'ذ' => out.push_str("dh"),
'ر' => out.push('r'),
'ز' => out.push('z'),
'س' => out.push('s'),
'ش' => out.push_str("shi"),
'ص' => out.push('s'),
'ض' => out.push('d'),
'ط' => out.push('t'),
'ظ' => out.push('z'),
'ع' => out.push_str("ea"),
'غ' => out.push_str("gha"),
'ف' => out.push('f'),
'ق' => out.push('q'),
'ك' => out.push('k'),
'ل' => out.push('l'),
'م' => out.push_str("mu"),
'ن' => out.push('n'),
'ه' => out.push('h'),
'و' => out.push('w'),
'ي' => out.push_str("iy"),
'ى' => out.push_str("aa"),
'ؤ' => out.push('u'),
'ئ' => out.push('y'),
'ء' => {} 'ة' => out.push_str("at"),
'ـ' => {} '\u{064B}' | '\u{064C}' | '\u{064D}' | '\u{064E}' | '\u{064F}' | '\u{0650}'
| '\u{0651}' | '\u{0652}' => {}
_ => out.push(ch),
}
}
out
}