diff --git a/sources/LocalizationEditor/Extensions/String+Extensions.swift b/sources/LocalizationEditor/Extensions/String+Extensions.swift index d584945..ae0ea33 100644 --- a/sources/LocalizationEditor/Extensions/String+Extensions.swift +++ b/sources/LocalizationEditor/Extensions/String+Extensions.swift @@ -16,4 +16,24 @@ extension String { var capitalizedFirstLetter: String { return prefix(1).uppercased() + self.lowercased().dropFirst() } + + var unescaped: String { + let entities = [ + "\\n": "\n", + "\\t": "\t", + "\\r": "\r", + "\\\"": "\"", + "\\\'": "\'", + "\\\\": "\\" + ] + var current = self + for (key, value) in entities { + current = current.replacingOccurrences(of: key, with: value) + } + return current + } + + var escaped: String { + return self.replacingOccurrences(of: "\"", with: "\\\"").replacingOccurrences(of: "\n", with: "\\n") + } } diff --git a/sources/LocalizationEditor/Providers/LocalizationProvider.swift b/sources/LocalizationEditor/Providers/LocalizationProvider.swift index c34edd0..b0a6c87 100644 --- a/sources/LocalizationEditor/Providers/LocalizationProvider.swift +++ b/sources/LocalizationEditor/Providers/LocalizationProvider.swift @@ -57,7 +57,7 @@ final class LocalizationProvider { return """ \(stringForMessage) - \"\(string.key)\" = \"\(string.value.replacingOccurrences(of: "\"", with: "\\\""))\";\n + \"\(string.key)\" = \"\(string.value.escaped)\";\n """ }.reduce("") { prev, next in "\(prev)\n\(next)" diff --git a/sources/LocalizationEditor/Providers/Parser.swift b/sources/LocalizationEditor/Providers/Parser.swift index ab67478..13871c5 100755 --- a/sources/LocalizationEditor/Providers/Parser.swift +++ b/sources/LocalizationEditor/Providers/Parser.swift @@ -136,7 +136,7 @@ class Parser { return } let correctedMessage = removeLeadingTrailingSpaces(from: currentMessage) - let entry = LocalizationString(key: key, value: value.replacingOccurrences(of: "\\\"", with: "\""), message: correctedMessage) + let entry = LocalizationString(key: key, value: value.unescaped, message: correctedMessage) results.append(entry) // Reset the properties to be ready for the next line. currentValue = nil