         if let currentTaskNodeName = taskNodeNames.last {
             currentTaskNode = taskNodeWithName(currentTaskNodeName)
         }
+    }
+    
+    // MARK: Language
+    private var currentLanguageXMLURL: NSURL? {
+        for url in languageXMLURLs {
+            // Check if file name is equal to language
+            let name = url.URLByDeletingPathExtension?.lastPathComponent ?? "Unknown"
+            if currentLanguage == name {
+                return url
+            }
+        }
+        return nil
+    }
+    
+    private func translateText(text: String) -> String {
+        var translatedText = text
+        
+        // Fetch translation from XML
+        if let languageXMLURL = currentLanguageXMLURL {
+            let languageXML = SWXMLHash.parse(NSData(contentsOfURL: languageXMLURL) ?? NSData())
+            let resources = languageXML[UsbongXMLIdentifier.resources]
+            
+            if let stringElement = try? resources[UsbongXMLIdentifier.string].withAttr(UsbongXMLIdentifier.name, text) {
+                translatedText = stringElement.element?.text ?? text
+            }
+        }
+        
+        return translatedText
     }
     
     // MARK: Transitions

            let nameComponents = UsbongXMLName(name: name, language: currentLanguage)
            if let taskNodeType = TaskNodeType(rawValue: nameComponents.type) {
                // Translate text if current language is not base language
//                let translatedText = currentLanguage != baseLanguage ? translateText(nameComponents.text) : nameComponents.text
                
                // Parse text
                let finalText = parseText(nameComponents.text)
                
                // Temporary transition info to be used by link and decision task nodes
                var fetchedTransitionInfo = [String: String]()

    public var currentTargetTransitionName: String = "Any"
    public var transitionInfo: [String: String] = [String: String]()
    
    private var languageXMLURLs: [NSURL]
    
    public init(treeRootURL: NSURL) {
        self.treeRootURL = treeRootURL
        
        // Fetch main xml
        let fileName = treeRootURL.URLByDeletingPathExtension?.lastPathComponent ?? ""
        xmlURL = treeRootURL.URLByAppendingPathComponent(fileName).URLByAppendingPathExtension("xml")
        
        wholeXML = SWXMLHash.parse(NSData(contentsOfURL: xmlURL) ?? NSData())
        processDefinition = wholeXML[UsbongXMLIdentifier.processDefinition]
        
        // Fetch language XMLs urls
        // Get trans directory
        let transURL = treeRootURL.URLByAppendingPathComponent("trans")
        // Fetch contents of trans directory
        languageXMLURLs = (try? NSFileManager.defaultManager().contentsOfDirectoryAtURL(transURL, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions.SkipsSubdirectoryDescendants)) ?? [NSURL]()
        
        // Get language
        baseLanguage = processDefinition.element?.attributes[UsbongXMLIdentifier.lang] ?? baseLanguage
        currentLanguage = baseLanguage
        
        // Set title to file name if file name is not blank or contains spaces only
        title = fileName.stringByReplacingOccurrencesOfString(" ", withString: "").characters.count == 0 ? title : fileName
        
        
        // Fetch starting task node
        if let element = processDefinition[UsbongXMLIdentifier.startState][UsbongXMLIdentifier.transition].element {
