Ios 如何在Xcode 7中的自动UI测试期间访问本地化字符串?

Ios 如何在Xcode 7中的自动UI测试期间访问本地化字符串?,ios,xcode7,xcode-ui-testing,Ios,Xcode7,Xcode Ui Testing,根据我之前关于本地化字符串的讨论,我还有一个问题。以下是链接: 现在,如果我将iOS系统语言切换到另一种语言,我将无法获取本地化字符串,因为它位于不同的捆绑包中。我发现另一个帖子在谈论这个: 如果我将所有本地化字符串从目标应用程序复制到UI测试,效果会很好。但对于XIB或故事板中的字符串,它们使用对象ID来表示消息,这是没有意义的,也不可读。 因此,在使用NSLocalizedString之前,我必须首先转换它,以了解它最初是什么: NSLocalizedString("Help", bu

根据我之前关于本地化字符串的讨论,我还有一个问题。以下是链接:

现在,如果我将iOS系统语言切换到另一种语言,我将无法获取本地化字符串,因为它位于不同的捆绑包中。我发现另一个帖子在谈论这个:

如果我将所有本地化字符串从目标应用程序复制到UI测试,效果会很好。但对于XIB或故事板中的字符串,它们使用对象ID来表示消息,这是没有意义的,也不可读。

因此,在使用NSLocalizedString之前,我必须首先转换它,以了解它最初是什么:

NSLocalizedString("Help", bundle: NSBundle(forClass: AClassInYourUITests.self), comment: "")
在Xcode中有没有简单的方法来解决这个问题?如果可能的话,我不想在我的代码中使用这些无意义的字符串,很难知道它是什么。或者我必须写一个脚本来处理这个问题

更准确地说,让我们举个例子。我在目标应用程序情节提要中的一些本地化字符串是:

"U2v-M1-HYu.text" = "ヘルプ";
"eTC-Zg-zHl.headerTitle" = "完了";
如果我想对不同的语言进行UI测试,我不能将其复制到UI测试包中。我需要先这样转换它:

"Help" = "ヘルプ";
"Done" = "完了";

欢迎提出任何建议。

步骤1。将您的
可本地化.strings
文件添加到您的UI测试目标中

第2步。在测试类中创建以下帮助器方法(找到):

步骤3。将步骤2中的
YourTestClass
代码更改为您的测试类

第4步。使用
localizedString(“字符串”)

注意:这似乎并不适用于所有本地化字符串。我发现它不适用于我的故事板字符串,只适用于
localizable.strings
文件

var currentLanguage: (langCode: String, localeCode: String)? {
    let currentLocale = Locale(identifier: Locale.preferredLanguages.first!)
    guard let langCode = currentLocale.languageCode else {
        return nil
    }
    var localeCode = langCode
    if let scriptCode = currentLocale.scriptCode {
        localeCode = "\(langCode)-\(scriptCode)"
    } else if let regionCode = currentLocale.regionCode {
        localeCode = "\(langCode)-\(regionCode)"
    }
    return (langCode, localeCode)
}

func localizedString(_ key: String) -> String {
    let testBundle = Bundle(for: /*YourTestClass*/.self)
    if let currentLanguage = currentLanguage,
        let testBundlePath = testBundle.path(forResource: currentLanguage.localeCode, ofType: "lproj") ?? testBundle.path(forResource: currentLanguage.langCode, ofType: "lproj"),
        let localizedBundle = Bundle(path: testBundlePath)
    {
        return NSLocalizedString(key, bundle: localizedBundle, comment: "")
    }
    return "?"
}