我的应用程序有几个目标。我正在尝试以不同的方式对它们进行本地化。在处理 Localizable.strings 文件和 NSLocalizedString 宏时,我发现这非常容易。为了让它工作,我只需为我正在使用的目标调整 Localizable.strings 文件的目标成员资格。所以我的项目文件结构看起来像:
- 项目
- 目标1
- en.lproj
- 可本地化的字符串
- 它.lproj
- 可本地化的字符串
- en.lproj
- 目标2
- en.lproj
- 可本地化的字符串
- 它.lproj
- 可本地化的字符串
- en.lproj
- 目标1
现在我的项目有 2 个使用完全不同的英文翻译构建的目标。完美,这就是我想要的。
当我尝试对本地化视图时生成的 *.strings 文件执行相同操作时,我的困难就出现了。我的部署目标是 6.0,我正在使用具有基本国际化的情节提要。因此,当我将视图添加到我的项目结构中时,它将如下所示:
- 项目
- 目标1
- Base.lproj
- SomeStoryboard.storyboard
- en.lproj
- 可本地化的字符串
- SomeStoryboard.strings
- 它.lproj
- 可本地化的字符串
- SomeStoryboard.strings
- Base.lproj
- 目标2
- en.lproj
- 可本地化的字符串
- SomeStoryboard.strings
- 它.lproj
- 可本地化的字符串
- SomeStoryboard.strings
- en.lproj
- 目标1
我的目标是让每个目标对每个目标都有不同的本地化,但保持相同的 Base 故事板。我还想避免这样的事情:将 target2 故事板字符串文件命名为 REPLACEMENT_SomeStoryboard.string 之类的东西,然后编写一个脚本,为给定目标中名为此类的每个文件删除 SomeStoryboard.string 并将 REPLACEMENT_SomeStoryboard.string 重命名为 SomeStoryboard.string。
尝试#1
所以我试图做的是从 target2 成员资格中删除 target1 en.lproj/SomeStoryboard.strings & it.lproj/SomeStoryboard.strings。但这也从 target2 成员资格中删除了 Base.lproj/SomeStoryboard.storyboard。所以基本上成员资格被管理为一个文件,这是有道理的。
尝试#2
我尝试的第二件事是将target1 SomeStoryboard.storyboard 添加到target2 的成员中,并创建一个SomeStoryboard.strings 文件并将其添加到target2 的成员中。我尝试将这个额外的字符串文件添加到复制捆绑资源阶段。我还尝试添加复制文件阶段(在复制捆绑资源阶段之后)。无论哪种方式,它似乎只是偶尔替换 target1 中的 SomeStoryboard.strings。所以最终的结果是,有时 target2 从 target1 获取本地化,有时它从 target2 本地化。