         keyDictionary["NSStringFormatValueTypeKey"] = formatValueType
         let newToken = "%1$\(formatValueType)"
         keyDictionary["other"] = self.replacingCharacters(in: range, with: other).replacingOccurrences(of: token, with: newToken)
-        
-        if countOfComponents > 2 {
-            keyDictionary["one"] = self.replacingCharacters(in: range, with: components[1]).replacingOccurrences(of: token, with: newToken)
-        }
-        
-        if countOfComponents > 3 {
-            keyDictionary["few"] = self.replacingCharacters(in: range, with: components[2]).replacingOccurrences(of: token, with: newToken)
-        }
+
+		var keyIndex = 0
+		guard let countPrefixRegex = countPrefixRegex else {
+		    abort()
+		}
+		for component in components[1..<(countOfComponents - 1)]{
+		    var keyForComponent: String?
+			var actualComponent: String? = component
+		    if let match = countPrefixRegex.firstMatch(in: component, options: [], range: component.fullRange) {
+		        let numberString = countPrefixRegex.replacementString(for: match, in: component, offset: 0, template: "$1")
+		        if numberString == "0" {
+		            actualComponent = (component as NSString).substring(from: match.range.length) as String?
+		            keyForComponent = "zero"
+		        }
+        
+		    } else {
+		    	if keyIndex < keys.count {
+		    		keyForComponent = keys[keyIndex]
+					keyIndex += 1
+		    	}
+		    }
+			
+			guard let keyToInsert = keyForComponent, let componentToInsert = actualComponent else {
+				continue
+			}
+			
+			keyDictionary[keyToInsert] = self.replacingCharacters(in: range, with: componentToInsert).replacingOccurrences(of: token, with: newToken)
+			
+		}
         
         let key = "v0"
         mutableDictionary[key] = keyDictionary

        }
        
        let firstComponent = components[0]
        let other = components[countOfComponents - 1]
        guard firstComponent.hasPrefix("PLURAL:") else {
            return nil
        }
        
        let token = firstComponent.substring(from: firstComponent.index(firstComponent.startIndex, offsetBy: 7))
        guard token.characters.count == 2 else {
            return nil
        }
        
        let lower = index(startIndex, offsetBy: result.range.location)
        let upper = index(lower, offsetBy: result.range.length)
        let range = lower..<upper

               continue
           }
           if twnString.contains("{{PLURAL:") {
			   let lang = locale.components(separatedBy: "-").first ?? ""
			   let keys = keysByLanguage[lang] ?? defaultKeys
               stringsDict[key] = twnString.pluralDictionary(with: keys)
           } else {
               strings[key] = twnString.iOSNativeLocalization
           }
