diff --git a/src/Ashampoo.Translation.Systems.Formats.Abstractions/src/FormatOptions.cs b/src/Ashampoo.Translation.Systems.Formats.Abstractions/src/FormatOptions.cs index fe0af93..2c565e3 100644 --- a/src/Ashampoo.Translation.Systems.Formats.Abstractions/src/FormatOptions.cs +++ b/src/Ashampoo.Translation.Systems.Formats.Abstractions/src/FormatOptions.cs @@ -28,23 +28,6 @@ public record FormatStringOption(string Name, bool Required = false) : FormatOpt public string Value { get; set; } = ""; } -/// -/// Format option for a char value. -/// -/// -/// -/// -/// -/// -/// -public record FormatCharacterOption(string Name, bool Required = false) : FormatOption(Name, Required) -{ - /// - /// The value of the option. - /// - public string Value { get; set; } = ";"; -} - /// /// Configuration object for a containing a list of FormatOptions. /// diff --git a/src/Ashampoo.Translation.Systems.Formats/src/CSV/CsvFormat.cs b/src/Ashampoo.Translation.Systems.Formats/src/CSV/CsvFormat.cs index 30900c4..01b4a45 100644 --- a/src/Ashampoo.Translation.Systems.Formats/src/CSV/CsvFormat.cs +++ b/src/Ashampoo.Translation.Systems.Formats/src/CSV/CsvFormat.cs @@ -81,32 +81,44 @@ private async Task GetHeaderInformation(StreamReader reader, FormatReadOptions o switch (headerLine[0].Trim()) { case "#Delimiter": - if (char.IsWhiteSpace(Delimiter) && !string.IsNullOrWhiteSpace(headerLine[1])) - { - CsvFormatHeader.Delimiter = headerLine[1].Trim().ToCharArray().First(); - } - + TryApplyDelimiter(headerLine); break; case "#Source Language": - if (string.IsNullOrWhiteSpace(options.SourceLanguage?.Value) && - !string.IsNullOrWhiteSpace(headerLine[1])) - { - Header.SourceLanguage = new Language(headerLine[1].Trim()); - } - + TryApplySourceLanguage(options, headerLine); break; case "#Target Language": - if (string.IsNullOrWhiteSpace(options.TargetLanguage.Value) && - !string.IsNullOrWhiteSpace(headerLine[1])) - { - Header.TargetLanguage = new Language(headerLine[1].Trim()); - } - + TryApplyTargetLanguage(options, headerLine); break; } } } + private void TryApplyTargetLanguage(FormatReadOptions options, string[] headerLine) + { + if (string.IsNullOrWhiteSpace(options.TargetLanguage.Value) && + !string.IsNullOrWhiteSpace(headerLine[1])) + { + Header.TargetLanguage = new Language(headerLine[1].Trim()); + } + } + + private void TryApplySourceLanguage(FormatReadOptions options, string[] headerLine) + { + if (string.IsNullOrWhiteSpace(options.SourceLanguage?.Value) && + !string.IsNullOrWhiteSpace(headerLine[1])) + { + Header.SourceLanguage = new Language(headerLine[1].Trim()); + } + } + + private void TryApplyDelimiter(string[] headerLine) + { + if (char.IsWhiteSpace(Delimiter) && !string.IsNullOrWhiteSpace(headerLine[1])) + { + CsvFormatHeader.Delimiter = headerLine[1].Trim()[0]; + } + } + private async Task ReadCsv(CsvReader reader) { await reader.ReadAsync(); @@ -200,7 +212,7 @@ private async Task ConfigureOptionsAsync(FormatReadOptions options) FormatStringOption targetLanguageOption = new("Target language", true); FormatStringOption sourceLanguageOption = new("Source language", true); - FormatCharacterOption delimiterOption = new("Delimiter", true); + FormatStringOption delimiterOption = new("Delimiter", true); List optionList = []; if (setTargetLanguage) optionList.Add(targetLanguageOption); @@ -237,7 +249,7 @@ private async Task ConfigureOptionsAsync(FormatReadOptions options) } } -file record CsvRecordFormat +file sealed record CsvRecordFormat { [Name("id")] public string Id { get; init; } = string.Empty;