Перевести строку HTML в атрибуты, примененные с использованием Firebase / MLNLTranslate - PullRequest
1 голос
/ 31 марта 2020

Вот мой код, который используется для преобразования HTML строки в атрибутивную строку.

extension UILabel {
    func setHTMLFromString(text: String) {
        let modifiedFont = NSString(format:"<span style=\"font-family: \(self.font!.fontName); font-size: \(self.font!.pointSize)\">%@</span>" as NSString, text)

        let attrStr = try! NSAttributedString(
            data: modifiedFont.data(using: String.Encoding.unicode.rawValue, allowLossyConversion: true)!,
            options: [NSAttributedString.DocumentReadingOptionKey.documentType:NSAttributedString.DocumentType.html, NSAttributedString.DocumentReadingOptionKey.characterEncoding: String.Encoding.utf8.rawValue],
            documentAttributes: nil)

        self.attributedText = attrStr
    }
}

Чего я хочу добиться, это перевести текст с примененными к нему атрибутами. Ниже приведен код для перевода, который я использую для перевода простой строки.

extension UIViewController {

    func translate(text:String, to:TranslateLanguage, compltion: @escaping ((Bool,String?)->()) ) {
        let options = TranslatorOptions(sourceLanguage: .en, targetLanguage: to)
        let translator = NaturalLanguage.naturalLanguage().translator(options: options)
        perform(#selector(showHudAfterTime), with: self, afterDelay: 1)
        translator.downloadModelIfNeeded(with: .init(allowsCellularAccess: true, allowsBackgroundDownloading: false)) { (error) in
            NSObject.cancelPreviousPerformRequests(withTarget: self)
            GlobalAPI.hideLoadingHUD()
            if error == nil {
                translator.translate(text) { (translation, error) in
                    if error == nil {
                        compltion(true,translation)
                    } else {
                        compltion(false,text)
                    }
                }
            } else {
                compltion(false,text)
            }
        }
    }

    @objc func showHudAfterTime() {
        GlobalAPI.showLoadingHud()
    }

}

Дайте мне знать, если понадобится больше описания. Любая помощь будет оценена!

...