1 | use unic_langid::LanguageIdentifier; |
2 | |
3 | static REGION_MATCHING_KEYS: &[&str] = &[ |
4 | "az" , "bg" , "cs" , "de" , "es" , "fi" , "fr" , "hu" , "it" , "lt" , "lv" , "nl" , "pl" , "ro" , "ru" , |
5 | ]; |
6 | |
7 | pub trait MockLikelySubtags { |
8 | fn maximize(&mut self) -> bool; |
9 | } |
10 | |
11 | impl 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 | |