I'm trying to set the language for my app at first run.
After seeing this question, I decided to do the same.
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!
Next setting in Info.plist fixed the issue with localization and storyboard RTL in my case.
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.
来源:https://stackoverflow.com/questions/22448407/set-default-language-at-first-run-ios