我有一个有 3 个目标的项目。每个目标只需要支持一种语言,但每个目标的语言都不相同。
目前我有
我的大部分字符串都在 Localized.strings 文件中,我只是为每个目标指定一个不同的文件。然而,我的故事板中有很多字符串。我的问题是,似乎不可能为每个目标创建不同的故事板本地化文件。如果我更改葡萄牙语文件的目标,则西班牙语文件的目标会自动更改。
一个可能的解决方案是为每个目标复制每个情节提要,但是随着目标数量的增长,这不会很好地扩展。我还可以在每个 ViewController 中使用 NSLocalizedString 修改所有文本,但这似乎很乏味且容易出错。
有更好的解决方案吗?
跨目标共享故事板
While 这个答案 https://stackoverflow.com/a/33749062/218152是首选方法,您可以分配不同的故事板本地化针对不同的目标,同时共享same跨越所有目标的故事板。
先决条件:
请按照以下说明进行操作这个答案 https://stackoverflow.com/a/33749062/218152.
Concept:
您想要拥有Main.storyboard
在每个目标中,但有不同的Main.strings
在每个目标中。此外,您不希望所有本地化在每个目标中都可用。
为了实现这一点,您必须操纵.lproj
直接,仅使用文件检查器时隐藏的进程。
一步步:
- 按照以下步骤创建所有部件这个答案 https://stackoverflow.com/a/33749062/218152.
- 从任何目标中删除
Main.storyboard
。当然,选择删除参考保留故事板。
- 在 Finder 中,找到 Base.lproj。拖放
Main.storyboard
回到你的项目,并且select每个目标。
- In the File Inspector, ensure that the languages are not selected, and that you are still using
Localizable Strings
.
- 再次在 Finder 中找到
en.lproj
, es.lproj
, fr.lproj
等。请注意,它们每个都包含一个版本Main.strings
。将这些 .lproj(整个目录)拖回您的项目中。这次,做not选择任意目标
- One last time, in File inspector, associate each
Main.strings
to the desired target. Repeat for each .strings
.
结论
通过解耦.lproj
来自.storyboard
在项目导航器中,您可以自由关联文件和目标。
Demo:
在“设置”中语言设置为法语的设备上使用法语目标查看它的工作情况:
► 在以下位置找到此解决方案GitHub https://github.com/SwiftArchitect/SO-33694785以及其他详细信息快速食谱 http://swiftarchitect.com/recipes/#SO-33694785.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)