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];