Ios 具有正确数字格式和本地化字符串格式的手动语言

Ios 具有正确数字格式和本地化字符串格式的手动语言,ios,localization,nsnumberformatter,appsettings,Ios,Localization,Nsnumberformatter,Appsettings,我在iOS应用程序中添加了一个手动语言部分,您可以在其中更改应用程序应显示的语言。如果有人选择手动语言,我会像这样覆盖“AppleLanguages”标准用户默认值 NSString*language=[[NSUserDefaults alloc]initWithSuiteName:kAppGroup]objectForKey:kManualLanguageKey] [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWi

我在iOS应用程序中添加了一个手动语言部分,您可以在其中更改应用程序应显示的语言。如果有人选择手动语言,我会像这样覆盖“AppleLanguages”标准用户默认值

NSString*language=[[NSUserDefaults alloc]initWithSuiteName:kAppGroup]objectForKey:kManualLanguageKey]

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:language, nil]
                                                      forKey:@"AppleLanguages"];
现在,当用户重新启动应用程序时(终止应用程序后),应用程序会自动加载正确的本地化字符串

现在我的问题是:

尽管这解决了我更改应用程序语言的问题,但它不能正确显示数字等。Number/DateFormatter和localizedStringWithFormat取决于[NSLocale currentLocale]。我知道我可能会对现在的lokale估计过高

[[NSUserDefaults standardUserDefaults] setObject:language
                                                      forKey:@"AppleLocale"];
但是,一旦用户决定禁用手动语言,我就无法在系统设置中选择真正的语言/区域。我可以在覆盖它之前将currentLocale存储在我自己的userDefaults中,但如果用户决定(出于任何原因)在应用程序中的手动语言处于活动状态时更改系统语言,我将无法获取新选择的系统语言


有没有办法在不手动更改NumberFormatter等的locale属性的情况下获得正确的数字和日期格式?

好的,我找到了一种方法,在用户在上禁用手动语言后重置当前的locale

在main.m中,如果手动语言的bool为false,我将按如下方式重置当前语言:

  NSArray *keysToRemove = @[@"AppleLanguages",@"NSLanguages",@"AppleLocale"];
            NSLog( @"RESETTING TO USE SYSTEM LOCALE" );
            @try {
                for( NSString *currentKey in keysToRemove ) {
                    if( [defaults objectForKey:currentKey] ) {
                        [defaults removeObjectForKey:currentKey];
                    }
                }
            }
            @catch (NSException *exception) {
                // NOTHNG TO CATCH HERE
            }
            @finally {
                [defaults synchronize];
            }
之后,当前区域设置和语言将返回到系统设置中选择的语言和区域