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本地化?