diff --git a/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm b/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm index 544bad0365d96..5a367bdeae6e1 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm @@ -748,18 +748,35 @@ - (void)onMemoryWarning:(NSNotification*)notification { - (void)onLocaleUpdated:(NSNotification*)notification { NSArray* preferredLocales = [NSLocale preferredLanguages]; - NSMutableArray* data = [NSMutableArray new]; + NSMutableArray* data = [[NSMutableArray new] autorelease]; + + // Force prepend the [NSLocale currentLocale] to the front of the list + // to ensure we are including the full default locale. preferredLocales + // is not guaranteed to include anything beyond the languageCode. + NSLocale* currentLocale = [NSLocale currentLocale]; + NSString* languageCode = [currentLocale objectForKey:NSLocaleLanguageCode]; + NSString* countryCode = [currentLocale objectForKey:NSLocaleCountryCode]; + NSString* scriptCode = [currentLocale objectForKey:NSLocaleScriptCode]; + NSString* variantCode = [currentLocale objectForKey:NSLocaleVariantCode]; + if (languageCode) { + [data addObject:languageCode]; + [data addObject:(countryCode ? countryCode : @"")]; + [data addObject:(scriptCode ? scriptCode : @"")]; + [data addObject:(variantCode ? variantCode : @"")]; + } + + // Add any secondary locales/languages to the list. for (NSString* localeID in preferredLocales) { - NSLocale* currentLocale = [[NSLocale alloc] initWithLocaleIdentifier:localeID]; + NSLocale* currentLocale = [[[NSLocale alloc] initWithLocaleIdentifier:localeID] autorelease]; NSString* languageCode = [currentLocale objectForKey:NSLocaleLanguageCode]; NSString* countryCode = [currentLocale objectForKey:NSLocaleCountryCode]; NSString* scriptCode = [currentLocale objectForKey:NSLocaleScriptCode]; NSString* variantCode = [currentLocale objectForKey:NSLocaleVariantCode]; - if (!languageCode || !countryCode) { + if (!languageCode) { continue; } [data addObject:languageCode]; - [data addObject:countryCode]; + [data addObject:(countryCode ? countryCode : @"")]; [data addObject:(scriptCode ? scriptCode : @"")]; [data addObject:(variantCode ? variantCode : @"")]; }