如何本地化iOS故事板

dhr*_*hrm 56 objective-c nslocalizedstring ios uistoryboard

我有一个带有一些观点的iPhone故事板.例如,命名导航项目标题News,应该为其他语言翻译.

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

我该怎么做?我应该只有英文故事板并使用ViewController手动翻译每个元素NSLocalizedString吗?

Col*_*lin 108

在iOS 6中,"信息"选项卡下的"项目"设置显示"使用基础国际化".如果选中该框,则会将所有字符串从Storyboard中拉出并转换为国际化的.strings文件.

这样您就不必拥有Storyboard的多个副本.

在此输入图像描述

  • http://forums.macrumors.com/showthread.php?t=1467446上有一个很好的教程. (3认同)

fre*_*tag 39

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

例如,"MainStoryboard.storyboard"将放在Base.lproj中.名为"MainStoryboard.strings"的关联文件放在en.lproj中,无论您应用何种本地化.

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

  • 不幸的是只有iOS 6和更好.如果将iOS 5设置为目标,则会收到错误消息. (4认同)

小智 10

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

self.title = NSLocalizedString("News", nil);
Run Code Online (Sandbox Code Playgroud)

例如,如果您想用荷兰语本地化您的应用程序,您可以使用Dutch.lproj/Localizable.strings:

"News" = "Nieuws";
Run Code Online (Sandbox Code Playgroud)

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


小智 6

您可能会发现此视频教程非常有用:

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

方法是为每种语言设置一个单独的故事板进行本地化,然后让脚本负责传播您在原始故事板中为所有其他语言所做的更改.