iOS更改应用语言不生效
我正在使用此设置dynamic更改我的iOS应用程序首选语言:
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:@"ar"] forKey:@"AppleLanguages"];
然后我从主NSBundle对象加载一个本地化的资源文件,但加载的文件不是新的语言,它加载了默认的英语语言,直到我重新启动应用程序完全加载阿拉伯文本地化。
我想强制NSBundle加载新语言@“ar”的资源文件,而不是在应用程序启动时设置的语言。 怎么样?
你的方法是一个很好的方式来获得你所需要的,并要求重新启动应用程序才能生效。
最好使用NSLocalizedStringFromTableInBundle
而不是NSLocalizedString
,并提供该语言的包。
NSString* path = [[NSBundle mainBundle] pathForResource:@"ar" ofType:@"lproj"]; NSBundle* ar_bundle = [NSBundle bundleWithPath:path]; NSLocalizedStringFromTableInBundle(@"str", nil, ar_bundle, @"comment");
如果你把这个包放在全局范围内,你可以创build一个macros来简化:
#define ARLocalizedString(str, cmt) NSLocalizedStringFromTableInBundle(str, nil, ar_bundle, cmt)
我已经试过这个,它的工作正常,无需重新启动应用程序:
//Use this in constants #ifdef NSLocalizedString #undef NSLocalizedString #endif #define NSLocalizedString(str, cmt) NSLocalizedStringFromTableInBundle(str, nil, newLangbundle, cmt)
newLangbundle – >在.pch中定义一个全局variables,并根据语言select使用此variables,
NSString* path = [[NSBundle mainBundle] pathForResource:@"th" ofType:@"lproj"]; newLangbundle = [NSBundle bundleWithPath:path];