         return I18n.instance.localizedString(forKey: key, withFallback: fallbackValue, table: table, arguments: arguments)
     }
     
+    open class func localizedString(forKey key: String, inLanguage lang: String, withFallback fallbackValue: String? = nil, table: String? = nil, arguments: CVarArg...) throws -> String {
+        if let langBundle = getBundle(forLang: lang) {
+            
+            return I18n.localizedString(forKey: key, usingBundle: langBundle, withFallback: fallbackValue, table: table, arguments: arguments)
+        }
+        
+        throw I18nError.invalidLanguage
+    }
+    
+    private class func localizedString(forKey key: String, usingBundle bundle: Bundle, withFallback fallbackValue: String? = nil, table: String? = nil, arguments: [CVarArg]) -> String {
+        let translatedString = bundle.localizedString(forKey: key.lowercased(), value: fallbackValue, table: table)
+        
+        if arguments.isEmpty {
+            
+            return translatedString
+        }
+        
+        return String(format: translatedString, arguments: arguments)
+    }
+    
     open class func localizedImage(forName name: String) -> UIImage? {
         
         return I18n.instance.localizedImage(forName: name)

    }
    
    open func equals(lang: String) -> Bool {
        return lang == self.lang
    }
    


private func getBundle(forLang lang: String) -> Bundle? {
    if let path = Bundle.main.path(forResource: lang, ofType: "lproj"), let bundle = Bundle(path: path) {
        
        return bundle
    }
    
