更新回答“如何改变语言的应用程序内”
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