Sep 24, 2012
iOS application custom localization
Apple do not recommend to allow user to switch application language another way then switch it in system settings either I do. Sometimes (rare) it makes sense to allow user to switch the language of the specific application. Anyway, before do it – please, think twice; it’s really goes against Apple’s language policy, so benefits from such a decision should overcome the drawbacks.
So, if if you want to switch your application language, use the following code:
// Use "nil" to fallback to system settings void loadCustomLocalization(NSString * locCode) { NSString * appleLanguages = @"AppleLanguages"; if (locCode) { [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:locCode] forKey:appleLanguages]; } else { [[NSUserDefaults standardUserDefaults] removeObjectForKey:appleLanguages]; } [[NSUserDefaults standardUserDefaults] synchronize]; }
Call loadCustomLocalization() before UIApplicationMain() call, for example:
void loadLocalization() { const int result = [[[NSUserDefaults standardUserDefaults] stringForKey:@"language"] intValue]; NSString * language = 0; switch (result) { case 1: language = @"ru"; break; case 2: language = @"en"; break; } loadCustomLocalization(language); } int main(int argc, char *argv[]) { loadLocalization(); NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; return retVal; }
My application has three values for language setting in application settings menu.
User may choose between system language, Russian or English.
But remember: very often this is not a kind of freedom you want to give to your customers; the real freedom is to provide all application content on all possible languages (but it costs a lot).