我在一个 XCode 项目中解决了这个问题,我相信它可以解决与您相同的问题,所以希望这会对您有所帮助。该解决方案包含两个从相同代码库构建的目标(具有不同的应用程序名称)并且完全本地化,包括应用程序的名称。(它构建了我的免费增值应用程序,名为Growth(法语:Croissance,西班牙语:Crecer)和名为Growth+(法语:Croissance+,西班牙语:Crecer+)的付费版本。
我还偶然发现了这些InfoPlist.string
文件(仅包含应用程序的名称)。我通过在我的解决方案中使用子文件夹解决了这个问题,并更改了目标以包含相关子文件夹中的本地化 InfoPlist.strings 集。具体来说,我有这个结构:
根
+-- en.lproj
¦ +-- Localizable.strings
¦ +-- SomeXib.xib
+-- es.lproj
¦ +-- Localizable.strings
¦ +-- SomeXib.xib
+-- fr.lproj
¦ +-- Localizable.strings
¦ +-- SomeXib.xib
+-- OnlyInAppA
¦ +-- en.lproj
¦ ¦ +-- InfoPlist.strings
¦ +-- es.lproj
¦ ¦ +-- InfoPlist.strings
¦ +-- fr.lproj
¦ +-- InfoPlist.strings
+-- OnlyInAppB
¦ +-- en.lproj
¦ ¦ +-- InfoPlist.strings
¦ +-- es.lproj
¦ ¦ +-- InfoPlist.strings
¦ +-- fr.lproj
¦ +-- InfoPlist.strings
+-- AppA.plist
+-- AppB.plist
我的目标(除了不同的预处理器符号和不同的 .plist 文件)之间的唯一区别是 AppA 的构建设置包括 OnlyInAppA 下的 InfoPlist.strings 文件,而 AppB 的构建设置包括 OnlyInAppB 下的 InfoPlist.strings 文件。
在我个人看来,我使用的命名约定(OnlyInAppA/OnlyInAppB 文件夹、AppB/AppB plist 文件)非常明显,足以使这成为一种令人满意的方法。
编辑:
请查看这两个 XCode 4 屏幕截图,了解在哪里可以找到目标中更改的设置。
在目标构建设置中,指定了不同的 plist 文件(注意:当您添加新目标时,XCode 会自动为您执行此操作)
在目标构建阶段,在 Copy Bundle Resources 部分,从相关的 OnlyInAppX 子文件夹中选择 InfoPlist.strings 的版本(注意此屏幕截图中 InfoPlist.strings 旁边的灰色文本——这将显示另一个目标的不同位置) . 您可以通过使用 +/- 按钮并将文件替换为预期的文件来实现此目的。