【问题标题】:How to assign location specific BundleDisplayNames for different Targets如何为不同的目标分配特定位置的 BundleDisplayNames
【发布时间】:2015-11-02 14:14:04
【问题描述】:

我有 2 个应用程序:免费和完整 我有 2 种语言:英语和德语

这会产生 4 个不同的应用程序名称

我怎样才能做到这一点。

实际上我所有的目标都有“免费”的名字,即使是完整版。

我知道: 我有 1 个 InfoPlist.strings 文件,它乘以本地化,我可以将它们分配给目标。所以对于 1 个应用程序,我可以本地化 BundleDisplayName。

但是如何为第二个应用分配具体的名称?

【问题讨论】:

    标签: ios xcode swift localization plist


    【解决方案1】:

    PlistBuddy 是你的朋友。您需要做的是在构建时更新您的 plist。

    1. 您必须为您拥有的每个目标创建自定义方案(我假设您已经拥有)
    2. 在您的 xcode 中转到方案并将类似的发布操作添加到自定义方案目标:

    代码如下:

    infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH"
    /usr/libexec/PlistBuddy -c "Set CFBundleName some_new_name_here" "$infoplist"
    

    使用这种方法的重要一点是,您不会更改 plist 文件中的任何内容,但通过后操作,您已经更改了为设备准备的数据包,因此您可以保持代码存储库整洁。

    【讨论】:

    • 感谢您的帮助。真的没有其他方法可以实现这一目标。在我看来,这听起来更像是一种黑客行为。我的意思是我们不能用开箱即用的 XCode 做到这一点吗?
    • 嗯,对于德语和英语,你有两个本地化的 plist,对于免费和高级你有 plist buddy,什么是官方的 Apple 工具。我不认为是否有更“官方”的方式来做到这一点。
    【解决方案2】:

    将 InfoPlist.strings 关联到目标

    来自Apple Developer Technical Notes

    如果您的应用支持本地化,请务必通过将 CFBundleDisplayName 添加到所有特定语言的 InfoPlist.strings 文件来本地化它。此外,请务必为您的应用使用符合应用审核指南的名称。

    先决条件

    • 我假设您已经有多个目标。

    • 我还假设您已经有一个 InfoPlist.strings 文件。如果你不这样做,代码 > 文件 > 文件... > 资源 > 字符串文件 > 下一步 > 另存为:InfoPlist > Base.lproj > 目标:英文目标 > 创建

    • 确保您已在 Info.plist 中启用此功能:

      <key>LSHasLocalizedDisplayName</key>
      <true/>
      

    一步一步

    1. 项目导航器中,选择InfoPlist.strings
    2. 文件检查器 > 本地化中,选择所有语言。这将创建和/或复制所说的InfoPlist.strings 到它们各自的位置。
    3. 您想添加语言吗,您可以在 Project Navigator > project > Project & Target List > Project > Info > Localizations 中实现> +。同样,保持Use Base Internationalization
    4. 不幸的是,当您执行第 2 步时,Xcode 会为您完成所有魔法。值得注意的是,在 Xcode 版本中没有发生这种魔法,您必须手动进行关联。第 5 步是关于恢复魔法。
    5. Project Navigator 中删除 InfoPlist.strings。当然,只有在提示时删除引用
    6. 在 Finder 中,找到 en.lproj,将其拖到您的 Project Navigator,选择 Create Groups,添加到目标您的英语或基础目标,完成
    7. 使用 de.lprojfr.lproj 重复第 6 步,每次从 Finder 中拖动整个 .lproj,并与相应的目标关联。
    8. 某些.lproj 可能包含其他本地化文件,您希望享受第 3 步的魔力。只需删除它们的引用即可。
    9. 你已经完成了。

    最后的设置,比如说德语,在File Inspector中将如下所示:


    参考文献:

    跨目标共享本地化:

    这是实现本地化的一般方法。见https://stackoverflow.com/a/33749062/218152

    针对特定目标的特定本地化:

    这仅在您想明确控制哪些语言进入哪个目标时才有用。见https://stackoverflow.com/a/33791181/218152

    【讨论】:

    • 亲爱的 SwiftArchitect。非常感谢您的解释。这听起来非常好,我将对此进行测试。实际上,我有自己的 hack,我对此并不满意。所以我会在我的下一个版本中肯定地检查这一点。我会回到这个。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2013-09-30
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    相关资源
    最近更新 更多