问题
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!
回答1:
Next setting in Info.plist fixed the issue with localization and storyboard RTL in my case.
回答2:
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