故事板+基本本地化+ .strings文件不会在运行时本地化
(也有类似的问题,其中一些导致了我已经尝试过,并且发现不起作用的答案,而其他人没有得到答案,我假设,因为那些问题没有提供像我将要提供的那样多的细节。
我从一个故事板开始,对我的应用程序运行良好; 它包含的string是英文的。 我想添加法语本地化。 我做到了这一点:
- 添加了基本本地化,将
MainStoryboard.storyboard
从en.lproj
转移到Base.lproj
。 - 添加了一个法语本地化,将
InfoPlist.strings
(英文)和MainStoryboard.storyboard
(Base)克隆到fr.lproj
。 - 在法国的
MainStoryboard.storyboard
更改了几个string(UISegmentedControl
的段名称)。 - 在模拟器中,将语言设置为法语。
- 从Xcode运行应用程序。
结果 :这工作; 我在运行的应用程序中显示了更改的string。
但我想成为所有的幻想。 我想用.strings
文件做法语本地化。 (这不仅仅是一个花哨的问题,法国本地化将翻译到非技术翻译,谁不能期望掌握界面生成器。)所以:
- 在Xcode Project导航器中select基本
MainStoryboard.storyboard
。 - 在“文件”检查器的“本地化”下,将法语本地化从“Interface Builder Cocoa Touch Storyboard”更改为“Localizable Strings”。
- 接受Xcode的警告,法语故事板将被丢弃,以支持出现在助手编辑器中的
.strings
文件。 - 做了两个相同的编辑; 不存在任何错误string的问题,因为它们都被评论为
IBUISegmentedControl...segmentTitles
; 并且标签文本不会出现在.strings
文件中的任何其他位置。 - 从模拟器中删除应用程序的现有(工作)副本。
- 运行应用程序。
结果 :该视图使用基本(本来是英语)本地化,而不是加载法语string。
这并不令人满意。 我尝试从模拟器中删除应用程序,甚至删除派生数据文件夹。 错误依然存在。
正如我所说,我不能把一个.storyboard
文件转换成一个非技术性的翻译。 我如何让iOS从.strings
文件接受故事板本地化?
我和我的UISegmentedControl
有同样的问题。 事实certificate,在iOS 6中有一个错误:.strings故事板本地化不能在UISegmentedControl
文本和UISearchBar
占位符上工作。 看到这个openradar: http ://openradar.appspot.com/radar?id=2159402
你有尝试本地化其他元素,如UILabel
? 这应该工作。
这是我如何解决它:
在viewDidLoad中:
[self.segmentedControl setTitle:NSLocalizedString(@"Title", @"Your localize comment") forSegmentAtIndex:0];
您可以对search占位符执行相同的操作:
[self.searchBar setPlaceholder:NSLocalizedString(@"Your string placeholder", @"Your comment for localizers")];
然后创build一个Localizable.strings文件,它将工作。
对于为iOS 7或更高版本开发人员以及为search栏search.strings
格式的人员,应如何转换placeholder
字段,例如:
/* Class = "UISearchBar"; normalTitle = "Search for Places"; ObjectID = "F3d-Ir-fni"; */ "F3d-Ir-fni.placeholder" = "Nach Orten suchen";