基础本地化 + Storyboard + .strings -> 无本地化

9

Xcode 4.6,目标iOS 6,SDK iOS 6.1

我使用的是一个在我的应用程序中运作良好的Storyboard;它所包含的字符串都是英文。我想添加一种法语本地化。操作如下:

  • 添加了一个基础本地化,将MainStoryboard.storyboard从en.lproj转移到Base.lproj。
  • 添加了一种法语本地化,将InfoPlist.strings(英语)和MainStoryboard.storyboard(基础版)克隆到fr.lproj中。
  • 更改了几个字符串(UISegmentedControl中的段标题)在法语MainStoryboard.storyboard 中。
  • 在模拟器中将语言设置为法语。
  • 从Xcode运行应用程序。

结果: 这个方法行得通;我更改的字符串出现在了正在运行的应用程序中。

但是我想要更加精细的操作。我希望使用.strings文件进行法语本地化。(这不仅仅是为了更加优美;法语本地化将被交给非技术翻译人员,他们不能期望掌握Interface Builder。)因此:

  • 在Xcode项目导航器中选择基础的MainStoryboard.storyboard。
  • 在文件检查器中,在本地化下,将法语本地化从“Interface Builder Cocoa Touch Storyboard”更改为“本地化字符串”。
  • 接受Xcode的警告,即法语Storyboard将被丢弃,改为使用.strings文件,该文件将出现在Assistant editor中。
  • 进行相同的两个编辑;这些都是正确的字符串,因为它们都被注释为IBUISegmentedControl...segmentTitles;而且标签文本在.strings文件中没有出现在其他任何地方。
  • 删除模拟器中现有(正在运行)应用程序的副本。
  • 运行该应用程序。

结果: 视图使用基础(最初的英文)本地化,而不是加载法语字符串。

转换为Autolayout没有效果。从模拟器中删除应用程序也没有效果。从Derived Products目录中删除也没有效果。Stack Overflow建议使用ibtool生成.strings文件,而不是使用Xcode;但是生成的两个文件是相同的。

这并不令人满意。正如我所说,我不能将.storyboard文件交给非技术翻译人员。我如何让iOS接受来自.strings文件的Storyboard本地化?

4个回答

4

使用本地化字符串设置,启用英文本地化复选框:

本地化设置

清理构建文件夹(⌥⇧⌘K),然后重新构建。


3
我希望您已经解决了问题。 我遇到了同样的问题(需要翻译成意大利语),我是这样解决的:
1) 在it.lproj中创建Localizable.string文件。
2) 在需要使用的地方使用NSLocalizedString(@“TEST”,@“comment”)方法。
3) 将Localizable.string添加到Build Phases->Copy Bundle Resource中。在iOS 5.1中,最后一步不是必需的。
我感谢Cocoanetics在[问题]中的回复:Base internationalization and multiple storyboard not working right

1
为了补充claymation的答案,关于进行干净构建,还有助于从iOS模拟器中删除应用程序。
这可能与约翰·赫斯的回答描述有关。

1

我不得不将我的字符串文件转换为一个故事板,然后再转回到字符串文件才能使其正常工作。这太可笑了。苹果公司可以向微软学习如何创建更可靠的开发工具。


我也有同样的经历。 :3 - Quang Nguyen

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