The worst way is through NSUserDefaults: the locale is determined AppleLocale(language identifier as a string), and the language is determined by the first match in AppleLanguages(array of language identifiers); your application can override these defaults only for your application. To check if your application is overridden, you can use something like [defaults persistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]] objectForKey:@"AppleLocale"]. To remove an override, use -removeObjectForKey:.
Whatever way you do it, you will probably have to restart the application when changing languages; OS X and iOS applications are simply not designed to change the language at runtime (in OS X, only new running applications see a change in language, and on iOS, the system kills all applications to change the language).
, /; , App Store.