Question
On iPhone NSLocalizedString
returns the string in the language of the
iPhone. Is it possible to force NSLocalizedString
to use a specific language
to have the app in a different language than the device ?
Answer
NSLocalizedString()
(and variants thereof) access the "AppleLanguages" key
in NSUserDefaults
to determine what the user's settings for preferred
languages are. This returns an array of language codes, with the first one
being the one set by the user for their phone, and the subsequent ones used as
fallbacks if a resource is not available in the preferred language. (on the
desktop, the user can specify multiple languages with a custom ordering in
System Preferences)
You can override the global setting for your own application if you wish by using the setObject:forKey: method to set your own language list. This will take precedence over the globally set value and be returned to any code in your application that is performing localization. The code for this would look something like:
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"de", @"en", @"fr", nil] forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize]; //to make the change immediate
This would make German the preferred language for your application, with English and French as fallbacks. You would want to call this sometime early in your application's startup. You can read more about language/locale preferences here: Internationalization Programming Topics: Getting the Current Language and Locale