当前位置: 首页 > 面试题库 >

具有本地化UI的Xcode 7 UITests

令狐献
2023-03-14
问题内容

在我的应用程序中,我NSLocalizedString用于本地化我的应用程序。现在,我想切换到UITests这样的Habe Testcode:

[tabBarsQuery.buttons["particiants"] tap];

这适用于英语,但不适用于其他语言。

[tabBarsQuery.buttons[NSLocalizedString("PARTICIPANTS",comment:nil)] tap];

失败-可能是因为Localizable.strings在另一个捆绑包中。如何测试本地化的应用程序?


问题答案:

我想实际测试UI功能的内容,而不仅仅是它们的存在,因此设置默认语言或使用可访问性标识符不适合。

这基于Volodymyr和matsoftware的答案。但是,他们的答案取决于deviceLanguage需要在中明确设置的答案SnapshotHelper。该解决方案动态获取设备使用的实际支持语言。

  1. Localizable.strings文件添加到您的UITest目标。
  2. 将以下代码添加到您的UITest目标:

    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: / a class in your test bundle /.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 “?”
    }


  3. 通过访问方法 localizedString(key)

对于带有脚本代码的语言,localeCode将为langCode-scriptCode(例如zh-Hans)。否则,localeCode将为langCode-regionCode(例如pt-BR)。第testBundle一种尝试通过解析lproj localeCode,然后回退到just langCode

如果仍然无法获取捆绑包,则返回“?” 字符串,因此它将失败任何寻找特定字符串的UI测试。



 类似资料:
  • 我想要做单词翻译(是的,只要单词翻译,可以不管句子) 看了一个 python 下的包/库,都是封装了谷歌翻译/有道翻译/百度翻译 但是,我想要一个可以本地化的翻译工具,不联网的 有什么包/库吗?如果没有 python 的,也可以是其他语言的

  • 概览 Django的格式化系统可以在模板中使用当前地区特定的格式,来展示日期、时间和数字。也可以处理表单中输入的本地化。 当它被开启时,访问相同内容的两个用户可能会看到以不同方式格式化的日期、时间和数字,这取决于它们的当前地区的格式。 格式化系统默认是禁用的。需要在你的设置文件中设置USE_L10N = True来启用它。 注意 为了方便起见,django-admin startproject创建

  • 我需要将双变量传输到本地化文件,如果我写%d,我只能传递int,但我需要传递双变量

  • 大多数 web 应用程序必须支持多种语言。例如:Youtube、 Wikipedia、 Facebook 网站都支持多语言。 当用户第一次访问网站时,根据用户浏览器(预先设置的地区)自动选择显示的语言。 如果自动选择的语言不是用户所期望的,用户可以设置他们的首选语言,用户的选择存储在客户端 cookie(或服务器端用户简介表(user profile table))。 一旦选择了语言,所有的文本都

  • 简介 Laravel提供了简单的文件夹检索方法,让您的应用更好的支持多种语言开发.。语言文件默认都放都在 resources/lang 文件夹中。 在此文件夹中,相应的语言文件存在相应的文件夹下,例如: /resources /lang /en messages.php /es messages.php 所有

  • 本地化 本地化是让程序按照地区特定方式运行的行为,如果一个程序的格式、数字或者是日期是你的本地方式,或者是打印的信息(或者是接受的输入)是你本地的语言,这个程序被叫做已经本地化了,这部分描述了针对本地化的Subversion的步骤。 理解地区 许多现代操作系统都有一个“当前地区”的概念—也就是本地化习惯服务的国家和地区。这些习惯—通常是被一些运行配置机制选择—影响程序展现数据的方式,也有接受用户输