【问题标题】:Customise Mainstoryboard.strings per target为每个目标自定义 Mainstoryboard.strings
【发布时间】:2017-05-27 02:52:29
【问题描述】:

我有一个包含 2 个目标的应用程序。应用程序中的字符串资源分散在代码和故事板文件中。现在我需要两个目标完全不同的字符串集(尽管两个目标都是英语)。 通过此链接,我能够为每个字符串创建 2 个不同版本的 Localized.strings - Alternative strings for different targets of same App - use NSLocalizedString?

但我找不到任何类似的方法来隔离每个目标的 Mainstoryboard.strings 文件。我应该制作 MAinstoryboard.strings 文件的 2 个副本并为每个目标分配。我还没有尝试过这个,但有些事情告诉我这可能不是最好的方法。

令人惊讶的是,Apple 教程中没有关于此的内容。有什么建议吗?

【问题讨论】:

  • 我猜你需要通过代码设置所有的字符串。实现一种方法,通过访问正确的包路径,根据目标获取正确的字符串。
  • 我已经为代码中的字符串这样做了。但是我在情节提要中有很多字符串,并且在代码上重新定位它们不是一种选择(大量返工)
  • 添加一个假的本地化语言并本地化您的故事板而不是一个大厅另一个故事板怎么样。您可以在应用启动时检查设备首选语言并相应地重置应用语言(仅在其中一个目标上)。
  • 我将添加一些代码sn-ps的答案以更好地演示
  • 那么,你是怎么解决你的问题的?

标签: ios xcode cocoa-touch localization nslocalizedstring


【解决方案1】:

用于添加可能是解决方案的假语言的代码 sn-p:

language = Bundle.main.preferredLocalizations[0]

if target == SOME_TARGET {

    if language == "en" {
        language = "fr" // fake language    
    } else if language == "ar" {
        language = "rs" // another fake language
    } else {
        // default app language
        language = "whatever" // default fake language 
    }

    UserDefaults.standard.set([language], forKey: "AppleLanguages")
    UserDefaults.standard.synchronize()
} else {
    // do nothing
}

另一个建议的解决方案。是为每种语言有两个故事板本地化文件。并在目标之间切换时使用 OS X finder 手动替换它们。但是,我想这对故事板本身的字符串没有帮助。

【讨论】:

  • 我没有时间研究您提出的第一个解决方案。第二个解决方案对我不起作用,因为我有一个 CI 设置,它为不同的目标生成应用程序包,并且没有人工干预
【解决方案2】:

我确实为本地化问题创建了Github project

使用我的 iOS 组件,您将能够将本地化字符串直接放入您的 Storyboard 文件中。

【讨论】:

    猜你喜欢
    • 2012-09-23
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多