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.

  • Swift MVVM Example with Business & Data Layers
  • Making table view section expand swift
  • iOS UITableViewCells rows recycled and tag not working
  • Custom AVVideoCompositing class not working as expected
  • How to detect if ios8 custom keyboard extension is running in not iphone 6 optimized app?
  • App Crashing with EXC_BREAKPOINT Error
  • 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.