wordle_cli/lang/
locale.rs

1use any_ascii::any_ascii;
2
3/// Eliminate non-ASCII characters.
4/// Replace common german special characters with their matching counterparts.
5/// The parameter is expected to be lower case.
6pub fn replace_unicode(word: &str, lang: &str) -> String {
7    match lang {
8        "de" => {
9            // replace umlauts for german language
10            let without_umlauts = replace_umlauts(word);
11
12            any_ascii(without_umlauts.as_str())
13        }
14        _ => any_ascii(word)
15    }
16}
17
18/// Replace german umlaut characters with their logical counterparts. The parameter is expected to be lowercase.
19///
20/// * 'ä' -> "ae"
21/// * 'ö' -> "oe"
22/// * 'ü' -> "ue"
23fn replace_umlauts(word: &str) -> String {
24    word.replace("ä", "ae").replace("ö", "oe").replace("ü", "ue")
25}
26
27
28#[cfg(test)]
29#[test]
30fn test_replace_unicode() {
31    assert_eq!(replace_unicode("schön", "de"), "schoen");
32    assert_eq!(replace_unicode("geschoß", "de"), "geschoss");
33    assert_eq!(replace_unicode("zäh", "de"), "zaeh");
34    assert_eq!(replace_unicode("lüge", "de"), "luege");
35
36    assert_eq!(replace_unicode("schön", "en"), "schon");
37    assert_eq!(replace_unicode("geschoß", "en"), "geschoss");
38    assert_eq!(replace_unicode("zäh", "en"), "zah");
39    assert_eq!(replace_unicode("lüge", "en"), "luge");
40}
41
42#[cfg(test)]
43#[test]
44fn test_replace_umlauts() {
45    assert_eq!(replace_umlauts("schön"), "schoen");
46    assert_eq!(replace_umlauts("zäh"), "zaeh");
47    assert_eq!(replace_umlauts("lüge"), "luege");
48
49    assert_ne!(replace_umlauts("schön"), "schon");
50    assert_ne!(replace_umlauts("zäh"), "zah");
51    assert_ne!(replace_umlauts("lüge"), "luge");
52}