diff --git a/src/OrchardCoreContrib.PoExtractor/PoWriter.cs b/src/OrchardCoreContrib.PoExtractor/PoWriter.cs index 29aa12b..1a89bda 100644 --- a/src/OrchardCoreContrib.PoExtractor/PoWriter.cs +++ b/src/OrchardCoreContrib.PoExtractor/PoWriter.cs @@ -66,7 +66,6 @@ public void WriteRecord(LocalizableString record) _writer.WriteLine($"msgstr[0] \"\""); } - _writer.WriteLine(); } @@ -82,7 +81,6 @@ public void WriteRecord(IEnumerable records) } } - /// public void Dispose() { @@ -104,7 +102,7 @@ private static string Escape(string text) var sb = new StringBuilder(text); sb.Replace("\\", "\\\\"); // \ -> \\ sb.Replace("\"", "\\\""); // " -> \" - sb.Replace("\r", "\\r"); + sb.Replace("\r\n", "\\r\\n"); sb.Replace("\n", "\\n"); return sb.ToString(); diff --git a/test/OrchardCoreContrib.PoExtractor.Tests/PoWriterTests.cs b/test/OrchardCoreContrib.PoExtractor.Tests/PoWriterTests.cs index c2cea9b..a3f0c90 100644 --- a/test/OrchardCoreContrib.PoExtractor.Tests/PoWriterTests.cs +++ b/test/OrchardCoreContrib.PoExtractor.Tests/PoWriterTests.cs @@ -48,6 +48,27 @@ public void WriteRecord_Escapes() Assert.Equal($"msgstr \"\"", result[1]); } + [Fact] + public void WriteRecord_ShouldNotEscape_CarriageReturn() + { + // Arrange + var localizableString = new LocalizableString + { + Text = "Orchard\rCore" + }; + + // Act + using (var writer = new PoWriter(_stream)) + { + writer.WriteRecord(localizableString); + } + + // Assert + var result = ReadPoStream(); + Assert.Equal("msgid \"Orchard\rCore\"", result[0]); + Assert.Equal("msgstr \"\"", result[1]); + } + [Fact] public void WriteRecord_WritesPluralLocalizableString() {