【问题标题】:Two targets and two Localizable.Strings (one base)两个目标和两个 Localizable.Strings(一个基数)
【发布时间】:2016-06-14 14:17:27
【问题描述】:

我有一个简单的问题,但我不知道如何解决。

  • 我有两个目标:

    1. TargetApp1
    2. TargetApp2
  • 我有两个 Localizable.strings:

    1. 用于第二语言的翻译。
    2. 对于不同的名称(两种语言),仅适用于 TargetApp2。

示例: 我有一个按钮、一个文本或其他东西。在每个应用上它应该是不同的。

  • TargetApp1: en: "Store" - lg: "STORE_"
  • TargetApp2:en:“经销商”-lg:“DEALER_”

我尝试为两个目标保留第一个 Localizable.strings 并为第二个目标制作第二个 Localizable.strings。问题是一次只加载一个 Localizable.strings 。我想知道如何让 TargetApp2 使两个 Localizable.strings 相互补充。

【问题讨论】:

    标签: xcode swift target localizable.strings


    【解决方案1】:

    如果我正确理解了您的问题,您需要为您的 Localizable.strings 文件指定不同的名称,然后使用 NSLocalizedStringFromTable,否则,正如您所发现的,它们会发生冲突,并且只有一个用于运行时。

    例如

    • 保留 Target1 的 Localizable.strings 原样
    • 将 Target2 的 Localizable.strings 重命名为 Extra.strings
    • 任何使用第二个表中的字符串的地方,使用NSLocalizedStringFromTable(key, @"Extra", comment)

    我在添加包含自己的Localizable.strings 的 Amazon AWS 库时第一次遇到这个问题,可以任意使用它来代替我的。但是,由于该文件中只有几个字符串,因此本地化似乎不起作用。这两天调试很有趣!


    斯威夫特

    NSLocalizedStringFromTable 在 Swift 中不存在具有该确切名称的名称。相反,tableNSLocalizedString 中的可选参数

    func NSLocalizedString(
        key: String,
        tableName: String? = default,
        bundle: NSBundle = default,
        value: String = default,
        #comment: String) -> String
    

    使用 Swift,您只需将受影响的字符串的 NSLocalizedString(key: key, comment: "") 更改为 NSLocalizedString(key: key, table:"Extra" comment: "")

    【讨论】:

    • 我实际上是在用 Swift 编程。 NSLocalizedStringFromTable 在 swift 中不存在。
    • 不,不是那个名字。如果我没记错的话,“table”是 Swift 中NSLocalizedString 中的一个可选参数。
    • value 参数有什么用?我在 Apple 的文档中没有找到任何描述。
    • 如果您提供了一个值,如果没有提供该键的翻译,则将其用作默认值。没有这个参数,key本身就是默认的