             return UITableViewCell(style: style, reuseIdentifier: identifier)
         }
     }
+    
+    private func parseText(info: [String:Any], key:String) -> String? {
+        guard let value = info[key] else {
+            return nil
+        }
+        if let text = value as? String {
+            return text
+        }
+        guard let params = value as? [String:Any] else {
+            return nil
+        }
+        if let key = params["ref"] as? String,
+           let strings = document?["strings"] as? [String:Any],
+           let texts = strings[key] as? [String:Any],
+           let text = SwipeParser.localizedString(texts, langId: langId) {
+            return text
+        }
+        return SwipeParser.localizedString(params, langId: langId)
+    }
 
     func tapped() {
         self.delegate?.tapped()

    private var sections = [[String:Any]]()
    //private var items = [[String:Any]]()
    private var url:URL?
    private weak var delegate:SwipeDocumentViewerDelegate?
    private var prefetching = true
    @IBOutlet private var tableView:UITableView!


    // <SwipeDocumentViewer> method
    func languages() -> [[String:Any]]? {
        return document?["languages"] as? [[String:Any]]
    }
    
    // <SwipeDocumentViewer> method
    func reloadWithLanguageId(_ langID:String) {
        self.langId = langID
        tableView.reloadData()
    }
    
    func moveToPageAt(index:Int) {
