故事板+基本本地化+ .strings文件在运行时不会本地化

时间:2013-02-25 19:46:30

标签: ios ios6 localization storyboard

(也有类似的问题。有些问题导致了我已经尝试过并且发现无法工作的答案。其他人没有得到答案,我认为因为这些人并没有提供与我相同的细节。我要去。)

我开始使用适合我的应用的故事板;它包含的字符串是英文的。我想添加法语本地化。我这样做了:

  • 添加了基本本地化,已转移 MainStoryboard.storyboarden.lprojBase.lproj
  • 添加了法语本地化,克隆了InfoPlist.strings(英文) 并MainStoryboard.storyboard(基础)加入fr.lproj
  • 更改了几个字符串(一个字符串的标题 法语UISegmentedControl。{/ li>中的MainStoryboard.storyboard
  • 在模拟器中,将语言设置为法语。
  • 从Xcode中删除应用程序。

结果:这有效;我更改的字符串出现在正在运行的应用程序中。

但我想要充满想象力。我想使用.strings文件进行法语本地化。 (这不仅仅是一种幻想;法语本地化将转交给非技术翻译人员,他们不能指望他们掌握Interface Builder。)所以:

  • 在Xcode项目中选择了基础MainStoryboard.storyboard 导航仪。
  • 在“文件”检查器中的“本地化”下,更改了法语 来自" Interface Builder Cocoa Touch Storyboard"至 "可本地化的字符串。"
  • 接受Xcode警告法国故事板将被丢弃 支持.strings文件,该文件出现在“助理编辑器”中。
  • 进行相同的两次编辑;毫无疑问他们是错的 字符串,因为他们都被评为 IBUISegmentedControl...segmentTitles;而且标签文字没有 出现在.strings文件中的任何其他位置。
  • 从模拟器中删除了应用程序的现有(工作)副本。
  • 跑出应用程序。

结果:视图使用基本(原始英语)本地化,而不是加载法语字符串。

这并不令人满意。我尝试从模拟器中删除应用程序,甚至删除了derived-data文件夹。这个bug仍然存在。

正如我所说,我无法将.storyboard文件转交给非技术翻译。如何让iOS接受.strings文件中的故事板本地化?

3 个答案:

答案 0 :(得分:8)

以下是我解决它的方法:

在viewDidLoad中:

[self.segmentedControl setTitle:NSLocalizedString(@"Title", @"Your localize comment") forSegmentAtIndex:0];

您可以对搜索占位符执行相同操作:

[self.searchBar setPlaceholder:NSLocalizedString(@"Your string placeholder", @"Your comment for localizers")];

然后只需创建一个Localizable.strings文件即可。

答案 1 :(得分:6)

我的UISegmentedControl遇到了同样的问题。事实证明,iOS 6中存在一个错误:.strings故事板本地化不会在UISegmentedControl文本和UISearchBar占位符上工作。 请参阅此openradar:http://openradar.appspot.com/radar?id=2159402

您是否尝试过本地化其他元素,例如UILabel s?这应该有用。

答案 2 :(得分:0)

对于为 iOS 7或更高版本开发并搜索搜索栏的.strings格式的人,您应该如何翻译placeholder字段,例如:< / p>

/* Class = "UISearchBar"; normalTitle = "Search for Places"; ObjectID = "F3d-Ir-fni"; */
"F3d-Ir-fni.placeholder" = "Nach Orten suchen";