1use unic_langid::LanguageIdentifier;
2
3static REGION_MATCHING_KEYS: &[&str] = &[
4 "az", "bg", "cs", "de", "es", "fi", "fr", "hu", "it", "lt", "lv", "nl", "pl", "ro", "ru",
5];
6
7pub trait MockLikelySubtags {
8 fn maximize(&mut self) -> bool;
9}
10
11impl MockLikelySubtags for LanguageIdentifier {
12 fn maximize(&mut self) -> bool {
13 let extended = match self.to_string().as_str() {
14 "en" => "en-Latn-US",
15 "fr" => "fr-Latn-FR",
16 "sr" => "sr-Cyrl-SR",
17 "sr-RU" => "sr-Latn-SR",
18 "az-IR" => "az-Arab-IR",
19 "zh-GB" => "zh-Hant-GB",
20 "zh-US" => "zh-Hant-US",
21 _ => {
22 let lang = self.language;
23
24 for subtag in REGION_MATCHING_KEYS {
25 if lang == *subtag {
26 self.region = Some(subtag.parse().unwrap());
27 return true;
28 }
29 }
30 return false;
31 }
32 };
33 let langid: LanguageIdentifier = extended.parse().expect("Failed to parse langid.");
34 self.language = langid.language;
35 self.script = langid.script;
36 self.region = langid.region;
37 true
38 }
39}
40