summaryrefslogtreecommitdiffstats
path: root/third_party/rust/fluent-langneg/src/negotiate/likely_subtags.rs
blob: 60a7b7a525728c020a437cb2c2573f732f9667b5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use unic_langid::LanguageIdentifier;

static REGION_MATCHING_KEYS: &[&str] = &[
    "az", "bg", "cs", "de", "es", "fi", "fr", "hu", "it", "lt", "lv", "nl", "pl", "ro", "ru",
];

pub trait MockLikelySubtags {
    fn maximize(&mut self) -> bool;
}

impl MockLikelySubtags for LanguageIdentifier {
    fn maximize(&mut self) -> bool {
        let extended = match self.to_string().as_str() {
            "en" => "en-Latn-US",
            "fr" => "fr-Latn-FR",
            "sr" => "sr-Cyrl-SR",
            "sr-RU" => "sr-Latn-SR",
            "az-IR" => "az-Arab-IR",
            "zh-GB" => "zh-Hant-GB",
            "zh-US" => "zh-Hant-US",
            _ => {
                let lang = self.language;

                for subtag in REGION_MATCHING_KEYS {
                    if lang == *subtag {
                        self.region = Some(subtag.parse().unwrap());
                        return true;
                    }
                }
                return false;
            }
        };
        let langid: LanguageIdentifier = extended.parse().expect("Failed to parse langid.");
        self.language = langid.language;
        self.script = langid.script;
        self.region = langid.region;
        true
    }
}