更新回答「如何改變語言的應用程序內」
NSLocalizedString()
(及其變型)訪問NSUserDefaults的了「AppleLanguages」鍵,以確定哪些用戶對首選語言設置。這將返回一組語言代碼,第一個是用戶爲其電話設置的語言代碼,如果資源不適用於首選語言,則會使用後續語言代碼作爲後備代碼。
如果您希望通過使用setObject:forKey:方法來設置您自己的語言列表,您可以重寫自己的應用程序的全局設置。這將優先於全局設置的值,並返回到您的應用程序中執行本地化的任何代碼。代碼如下:
[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"de", @"en", @"fr", nil] forKey:@"AppleLanguages"];
注意:爲了安全起見,請確保使用適當的預定義語言名稱。
下面是代碼片段,但您必須在項目中包含所有本地化文件。
@implementation LocalizeLanguage
static NSBundle *bundle = nil;
+(void)initialize {
NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* languages = [defs objectForKey:@"AppleLanguages"];
NSString *current = [[languages objectAtIndex:0] retain];
[self setLocalizeLanguage:current];
}
/*
[LocalizeLanguage setLocalizeLanguage:@"en"];
[LocalizeLanguage setLocalizeLanguage:@"fr"];
*/
+(void)setLocalizeLanguage:(NSString *)lang {
NSLog(@"preferredLang: %@", lang);
NSString *path = [[ NSBundle mainBundle ] pathForResource:lang ofType:@"lproj" ];
bundle = [[NSBundle bundleWithPath:path] retain];
}
+(NSString *)get:(NSString *)key alter:(NSString *)alternate {
return [bundle localizedStringForKey:key value:alternate table:nil];
}
@end
請查看我在下面的帖子回答:http://stackoverflow.com/a/20257557/306764 – 2014-04-21 16:21:51