paw*_*ni1 5 iphone localization restart
我正在尝试更改应用程序语言,但是当我关闭应用程序并再次运行它后,我在main.h语言chages中运行此代码.这可以在不重新启动的情况下更改语言吗?
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSArray *languages = [NSArray arrayWithObject:@"en_GB"];
[[NSUserDefaults standardUserDefaults] setObject:languages forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
Run Code Online (Sandbox Code Playgroud)
更新答案“如何更改应用程序内的语言”
NSLocalizedString()(及其变体)访问 NSUserDefaults 中的“AppleLanguages”键以确定用户的首选语言设置是什么。这将返回一组语言代码,第一个是用户为其手机设置的语言代码,如果资源在首选语言中不可用,则后续的代码将用作后备。
如果您愿意,可以使用 setObject:forKey: 方法来覆盖您自己的应用程序的全局设置,就像您所做的那样设置您自己的语言列表。这将优先于全局设置值,并返回到应用程序中执行本地化的任何代码。其代码如下所示:
[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"de", @"en", @"fr", nil] forKey:@"AppleLanguages"];
Run Code Online (Sandbox Code Playgroud)
注意:为了安全起见,请确保使用适当的预定义语言名称。
下面是代码片段,但您的项目中必须包含所有本地化文件。
@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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5742 次 |
| 最近记录: |