1- use icu_locid:: LanguageIdentifier ;
1+ use icu_locid:: {
2+ langid,
3+ subtags:: { language, region, Language , Region } ,
4+ LanguageIdentifier ,
5+ } ;
26
3- static REGION_MATCHING_KEYS : & [ & str ] = & [
4- "az" , "bg" , "cs" , "de" , "es" , "fi" , "fr" , "hu" , "it" , "lt" , "lv" , "nl" , "pl" , "ro" , "ru" ,
7+ static REGION_MATCHING_KEYS : & [ ( Language , Region ) ] = & [
8+ ( language ! ( "az" ) , region ! ( "AZ" ) ) ,
9+ ( language ! ( "bg" ) , region ! ( "BG" ) ) ,
10+ ( language ! ( "cs" ) , region ! ( "CS" ) ) ,
11+ ( language ! ( "de" ) , region ! ( "DE" ) ) ,
12+ ( language ! ( "es" ) , region ! ( "ES" ) ) ,
13+ ( language ! ( "fi" ) , region ! ( "FI" ) ) ,
14+ ( language ! ( "fr" ) , region ! ( "FR" ) ) ,
15+ ( language ! ( "nu" ) , region ! ( "NU" ) ) ,
16+ ( language ! ( "it" ) , region ! ( "IT" ) ) ,
17+ ( language ! ( "lt" ) , region ! ( "LT" ) ) ,
18+ ( language ! ( "lv" ) , region ! ( "LV" ) ) ,
19+ ( language ! ( "nl" ) , region ! ( "NL" ) ) ,
20+ ( language ! ( "pl" ) , region ! ( "PL" ) ) ,
21+ ( language ! ( "ro" ) , region ! ( "RO" ) ) ,
22+ ( language ! ( "ru" ) , region ! ( "RU" ) ) ,
523] ;
624
725pub trait MockLikelySubtags {
@@ -10,30 +28,29 @@ pub trait MockLikelySubtags {
1028
1129impl MockLikelySubtags for LanguageIdentifier {
1230 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" ,
31+ let extended = match & self {
32+ b if * b == & langid ! ( "en" ) => langid ! ( "en-Latn-US" ) ,
33+ b if * b == & langid ! ( "fr" ) => langid ! ( "fr-Latn-FR" ) ,
34+ b if * b == & langid ! ( "sr" ) => langid ! ( "sr-Cyrl-SR" ) ,
35+ b if * b == & langid ! ( "sr-RU" ) => langid ! ( "sr-Latn-SR" ) ,
36+ b if * b == & langid ! ( "az-IR" ) => langid ! ( "az-Arab-IR" ) ,
37+ b if * b == & langid ! ( "zh-GB" ) => langid ! ( "zh-Hant-GB" ) ,
38+ b if * b == & langid ! ( "zh-US" ) => langid ! ( "zh-Hant-US" ) ,
2139 _ => {
22- let lang = self . language ;
40+ let lang = & self . language ;
2341
24- for subtag in REGION_MATCHING_KEYS {
25- if lang. strict_cmp ( subtag. as_bytes ( ) ) . is_eq ( ) {
26- self . region = Some ( subtag. parse ( ) . unwrap ( ) ) ;
27- return true ;
28- }
42+ if let Ok ( idx) = REGION_MATCHING_KEYS . binary_search_by ( |( l, _) | l. cmp ( lang) ) {
43+ let subtag = REGION_MATCHING_KEYS [ idx] . 1 ;
44+ self . region = Some ( subtag) ;
45+ return true ;
2946 }
3047 return false ;
3148 }
3249 } ;
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 ;
50+ let ( language , script , region ) = ( extended. language , extended . script , extended . region ) ;
51+ self . language = language;
52+ self . script = script;
53+ self . region = region;
3754 true
3855 }
3956}
0 commit comments