如何本地化iOS故事板

我有一个有一些意见的iPhone故事板。 例如,一个导航项目标题被命名为News ,应该翻译为其他语言。

当我为故事板添加一个新的本地化时,它为我的当前新语言的故事板创build了一个副本。 在这里,我可以改变导航项目的标题,但对我来说似乎不是很有用。 如果我的故事板包含100个视图,并且需要支持10种语言,该怎么办? 如果我需要改变原始故事板中的某些内容,则必须对所有语言进行相同的更改。 这似乎很奇怪。 在哪些情况下这可能有用?

我能做些什么呢? 我应该只有英文故事板,并使用NSLocalizedString手动翻译ViewController中的每个元素?

您可以通过更改代码中UI元素的标题来完成本地化:

 self.title = NSLocalizedString("News", nil); 

如果你想在荷兰本地化你的应用程序,例如,你可以在Dutch.lproj/Localizable.strings

 "News" = "Nieuws"; 

然后,您可以为每个UI元素和语言执行此操作。

在iOS 6中,在“信息”选项卡下有一个“使用基地国际化”项目设置。 如果选中该checkbox,则会将所有string从Storyboard中拉出来并转换为国际化的.strings文件。

这样你就不必拥有多个Storyboard的副本。

在这里输入图像说明

从iOS 6开始,您可以决定使用基本国际化:所有storyboard和xib / nib文件只在名为Base.lproj的文件夹中存在一次。 GUI元素的本地化被放置在每个本地化目录中的相关的.strings文件中。

例如“MainStoryboard.storyboard”将被放置在Base.lproj中。 一个名为“MainStoryboard.strings”的关联文件被放置在en.lproj中,并且您应用的任何本地化。

这真的很英俊,特别是与布局限制相结合!

你可能会发现这个video教程有用:

http://www.youtube.com/watch?v=cF1Rf02QvZQ

方法是为每种语言分别创build一个故事板以进行本地化,然后让脚本负责传播您在原始故事板中针对所有其他语言所做的更改。

对于具有iOS 5部署目标和故事板的应用程序,我使用类似这样的方式来本地化我的标签,其中故事板上的第一个ViewController是UITabBarController

 - (void)applicationDidFinishLaunching:(UIApplication *)application { // ... if ([self.window.rootViewController isKindOfClass:UITabBarController.class]) { UITabBarController *tabBarController = (UITabBarController *) self.window.rootViewController; // Localize tab items NSArray *tabBarItems = tabBarController.tabBar.items; [tabBarItems enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(UITabBarItem *item, NSUInteger tabIndex, BOOL *stop) { NSString *keyName = [NSString stringWithFormat:@"tabBarItem%i", tabIndex]; item.title = NSLocalizedString(keyName, @"TabBarItems"); }]; } else { // The root view controller is not the UITTabBarController } // ... } 

并在我的Localizable.strings文件中有这样的东西:

 // MARK: TabBar "tabBarItem0" = "My First Tab Label"; "tabBarItem1" = "My Second Tab Label"; "tabBarItem2" = "My Third Tab Label"; 

你也可以findPolyglot Localization。 而不是在代码中调用NSLocalizedString(),你可以直接在你的故事板中指定它的键。 您可以避免不必要的出口,并减less样板代码。

https://github.com/negusoft/Polyglot

我build议你学习命令行ibtool它有助于你本地化所有的故事板:)这里是一个教程在这里http://www.albertmata.net/articles/introduction-to-internationalization-using-storyboards-on-ios- 5.html