我有一个应用程序,其中包含几个不同的Storyboard,并使用基本国际化将其本地化成法语。Main.storyboard具有其.strings文件的翻译,并可以正确加载法语。但是,当我实例化一个新的Storyboard并呈现它时,它仍然是英文的。我只是为了加载Storyboard而进行了以下操作:
UIStoryboard *upcomingStoryboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil];
/// Code to present initial view controller.
这将只加载英文的storyboard。然后我尝试按照这个网站上的说明进行操作,这改变了我的代码:
NSString *language = @"Base";
NSBundle *mainBundle = [NSBundle mainBundle];
NSString *preferred = [[mainBundle preferredLocalizations] objectAtIndex:0];
if ([[mainBundle localizations] containsObject:preferred]) {
language = preferred;
}
NSBundle *bundle = [NSBundle bundleWithPath:[mainBundle pathForResource:language
ofType:@"lproj"]];
UIStoryboard *upcomingStoryboard = [UIStoryboard storyboardWithName:storyboardName bundle:bundle];
所有这些所做的就是在加载故事板时导致应用程序崩溃,这可能是因为fr.lproj
中没有实际的故事板文件,只有一个.strings
文件。有人成功过吗?
[UIStoryboard storyboardWithName:storyboardName bundle:[NSBundle mainBundle]];
?我在我的应用程序中使用的故事板不是主故事板,并且本地化没有任何问题。如果将nil
传递到 bundle 参数中,则不会本地化任何内容。这就是为什么有 bundle 参数的原因。 - Fogmeister