Адресная арифметика с указателями.
программисты на C++ предпочитают избегать указателей из-за ошибок, которые могут быть представлены.
самый прохладный C++ я когда-либо видел хотя? Аналоговые литералы.
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
Вы можете создать подгруппу с набором локализованных строк, с которыми вы хотите это сделать, а затем используйте NSLocalizedStringFromTableInBundle ()
для их загрузки. (Я предполагаю, что это контент, отдельный от обычной локализации пользовательского интерфейса, которую вы, возможно, делаете в приложении.)
Обычно я делаю это таким образом, но в вашем проекте ДОЛЖНЫ быть все файлы локализации.
@implementation Language
static NSBundle *bundle = nil;
+(void)initialize
{
NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* languages = [defs objectForKey:@"AppleLanguages"];
NSString *current = [[languages objectAtIndex:0] retain];
[self setLanguage:current];
}
/*
example calls:
[Language setLanguage:@"it"];
[Language setLanguage:@"de"];
*/
+(void)setLanguage:(NSString *)l
{
NSLog(@"preferredLang: %@", l);
NSString *path = [[ NSBundle mainBundle ] pathForResource:l ofType:@"lproj" ];
bundle = [[NSBundle bundleWithPath:path] retain];
}
+(NSString *)get:(NSString *)key alter:(NSString *)alternate
{
return [bundle localizedStringForKey:key value:alternate table:nil];
}
@end
Как было сказано ранее, просто выполните:
[[NSUserDefaults standardUserDefaults] setObject: [NSArray arrayWithObjects:@"el", nil] forKey:@"AppleLanguages"];
Но чтобы избежать перезапуска приложения, поместите строку в основной метод main.m
непосредственно перед UIApplicationMain
( ...).