Set default language at first run IOS

I’m trying to set the language for my app at first run.

After seeing this question, I decided to do the same.

  • How to save User Name and Password in NSUserDefault?
  • Cannot access NSUserDefaults using app groups one to another
  • Reading NSUserDefaults from helper app in the sandbox
  • Swift: Error in NSKeyedArchiver
  • How can I reset the NSUserDefaults data in the iPhone simulator?
  • NSUserDefaults Unreliable in iOS 8
  • Setting default language for iPhone app on first run

    I adapted a bit the code, and made this:

    int main(int argc, char * argv[]) {
        @autoreleasepool {
            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
            [defaults setObject:@[[ITConf getStringForKey:ITConfLocale]] forKey:@"AppleLanguages"];
            [defaults synchronize];
            return UIApplicationMain(argc, argv, nil, NSStringFromClass([ITAppDelegate class]));
        }
    }
    

    But this code does not works (changes are made after second startup).
    However, the following code execute without any problem:

    int main(int argc, char * argv[]) {
        @autoreleasepool {
            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
            [defaults setObject:@[@"fr"] forKey:@"AppleLanguages"];
            [defaults synchronize];
            return UIApplicationMain(argc, argv, nil, NSStringFromClass([ITAppDelegate class]));
        }
    }
    

    I don’t understand why.
    ITConf returns a string from a .plist file see:

    NSString *fileP = [[NSBundle mainBundle] pathForResource:@"Conf" ofType:@"plist"];
    dictionary = [[NSDictionary alloc] initWithContentsOfFile:fileP];
    return dictionary[key];
    

    I verified using LLDB, and a NSString is correctly returned, with the proper value.

    It looks like black magic to me!

    2 Solutions Collect From Internet About “Set default language at first run IOS”

    Next setting in Info.plist fixed the issue with localization and storyboard RTL in my case.

    Set default language

    Basically you can’t rely on [NSBundle mainBundle] to look up your configuration as referencing [NSBundle mainBundle] will actually configure the bundle from the (at that time unchanged) AppleLanguages setting.