多个故事板无法加载本地化。

3

我有一个应用程序,其中包含几个不同的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
我也尝试过,但没有成功。你是在使用带有.storyboards的基本国际化.strings文件吗? - macandyp
你传递了主要的捆绑包吗?即不仅仅是nil。 - Fogmeister
我已经放置了一个答案,以防您想要复制代码,但它与我的项目完全相匹配。 - Fogmeister
2
如果我创建一个新项目,它会按照你所描述的方式工作。但是我的当前项目没有这样。看起来我还有更多的乐趣等着我。谢谢! - macandyp
显示剩余2条评论
1个回答

1
我在本地化应用程序中使用多个故事板。它们都没有设置为“主界面”文件。根据用户在应用程序中需要的位置,它们都会在代码中加载。
基本上,我有一个登录故事板,引导用户完成登录,以及一个“应用”故事板,用于应用程序的内容。
该项目使用基础国际化(以英语作为开发语言),并使用字符串文件进行所有翻译(nibs,storyboards和代码)。
它们是通过类似这样的方法加载的...
- (void)showStoryboardWithName:(NSString *)storyboardName transition:(UIViewAnimationOptions)transition
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:[NSBundle mainBundle]];
    UIViewController *controller = [storyboard instantiateInitialViewController];
    [self showViewController:controller withTransition:transition];
}

我在应用程序中本地化了大约15种语言,并且它们都能正常工作。

1
不确定最终是什么起了作用。我已经卸载了好几次,但都没有成功。最后我找出了一台旧的iPod touch并安装了它,一切都按预期工作了。然后我又从手机上卸载了一次,这次也成功了。感谢您确认了这应该很容易就能解决问题,而我才是那个疯狂的人 :) - macandyp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接