diff options
Diffstat (limited to 'internal/batch')
| -rw-r--r-- | internal/batch/processor.go | 33 | ||||
| -rw-r--r-- | internal/batch/processor_test.go | 56 |
2 files changed, 66 insertions, 23 deletions
diff --git a/internal/batch/processor.go b/internal/batch/processor.go index 75a38aa..0b20179 100644 --- a/internal/batch/processor.go +++ b/internal/batch/processor.go @@ -10,12 +10,15 @@ import ( type WordEntry struct { Bulgarian string Translation string + // NeedsTranslation indicates if translation from English to Bulgarian is needed + NeedsTranslation bool } // ReadBatchFile reads words from a file and returns WordEntry slice // Supports formats: -// - Bulgarian word only: "ябълка" -// - With translation: "ябълка = apple" +// - Bulgarian word only: "ябълка" (will be translated to English) +// - With translation: "ябълка = apple" (both provided, no translation needed) +// - English only: "= apple" (will be translated to Bulgarian) func ReadBatchFile(filename string) ([]WordEntry, error) { content, err := os.ReadFile(filename) if err != nil { @@ -27,24 +30,36 @@ func ReadBatchFile(filename string) ([]WordEntry, error) { for _, line := range splitLines(lines) { if line = trimSpace(line); line != "" { - // Check if line contains '=' for bulgarian = english format + // Check if line contains '=' for translation format if strings.Contains(line, "=") { parts := strings.SplitN(line, "=", 2) if len(parts) == 2 { bulgarian := strings.TrimSpace(parts[0]) english := strings.TrimSpace(parts[1]) - if bulgarian != "" { + + if bulgarian == "" && english != "" { + // Format: "= ENGLISH" - need to translate English to Bulgarian + entries = append(entries, WordEntry{ + Bulgarian: "", // Will be filled by translation + Translation: english, + NeedsTranslation: true, + }) + } else if bulgarian != "" && english != "" { + // Format: "BULGARIAN = ENGLISH" - both provided entries = append(entries, WordEntry{ - Bulgarian: bulgarian, - Translation: english, + Bulgarian: bulgarian, + Translation: english, + NeedsTranslation: false, }) } + // Ignore lines with empty English part } } else { - // Just a bulgarian word + // Just a Bulgarian word - needs translation to English entries = append(entries, WordEntry{ - Bulgarian: line, - Translation: "", + Bulgarian: line, + Translation: "", + NeedsTranslation: false, }) } } diff --git a/internal/batch/processor_test.go b/internal/batch/processor_test.go index 1df8284..fd9065b 100644 --- a/internal/batch/processor_test.go +++ b/internal/batch/processor_test.go @@ -30,9 +30,9 @@ func TestReadBatchFile(t *testing.T) { котка = cat куче = dog`, want: []WordEntry{ - {Bulgarian: "ябълка", Translation: "apple"}, - {Bulgarian: "котка", Translation: "cat"}, - {Bulgarian: "куче", Translation: "dog"}, + {Bulgarian: "ябълка", Translation: "apple", NeedsTranslation: false}, + {Bulgarian: "котка", Translation: "cat", NeedsTranslation: false}, + {Bulgarian: "куче", Translation: "dog", NeedsTranslation: false}, }, }, { @@ -42,10 +42,10 @@ func TestReadBatchFile(t *testing.T) { куче хляб = bread`, want: []WordEntry{ - {Bulgarian: "ябълка", Translation: ""}, - {Bulgarian: "котка", Translation: "cat"}, - {Bulgarian: "куче", Translation: ""}, - {Bulgarian: "хляб", Translation: "bread"}, + {Bulgarian: "ябълка", Translation: "", NeedsTranslation: false}, + {Bulgarian: "котка", Translation: "cat", NeedsTranslation: false}, + {Bulgarian: "куче", Translation: "", NeedsTranslation: false}, + {Bulgarian: "хляб", Translation: "bread", NeedsTranslation: false}, }, }, { @@ -59,25 +59,53 @@ func TestReadBatchFile(t *testing.T) { `, want: []WordEntry{ - {Bulgarian: "ябълка", Translation: ""}, - {Bulgarian: "котка", Translation: "cat"}, - {Bulgarian: "куче", Translation: ""}, + {Bulgarian: "ябълка", Translation: "", NeedsTranslation: false}, + {Bulgarian: "котка", Translation: "cat", NeedsTranslation: false}, + {Bulgarian: "куче", Translation: "", NeedsTranslation: false}, }, }, { name: "windows line endings", fileContent: "ябълка\r\nкотка = cat\r\nкуче", want: []WordEntry{ - {Bulgarian: "ябълка", Translation: ""}, - {Bulgarian: "котка", Translation: "cat"}, - {Bulgarian: "куче", Translation: ""}, + {Bulgarian: "ябълка", Translation: "", NeedsTranslation: false}, + {Bulgarian: "котка", Translation: "cat", NeedsTranslation: false}, + {Bulgarian: "куче", Translation: "", NeedsTranslation: false}, }, }, { name: "multiple equals signs", fileContent: `test = word = with = equals`, want: []WordEntry{ - {Bulgarian: "test", Translation: "word = with = equals"}, + {Bulgarian: "test", Translation: "word = with = equals", NeedsTranslation: false}, + }, + }, + { + name: "english only format", + fileContent: `= apple += cat += dog`, + want: []WordEntry{ + {Bulgarian: "", Translation: "apple", NeedsTranslation: true}, + {Bulgarian: "", Translation: "cat", NeedsTranslation: true}, + {Bulgarian: "", Translation: "dog", NeedsTranslation: true}, + }, + }, + { + name: "all three formats mixed", + fileContent: `ябълка +котка = cat += dog +хляб = bread += table +стол`, + want: []WordEntry{ + {Bulgarian: "ябълка", Translation: "", NeedsTranslation: false}, + {Bulgarian: "котка", Translation: "cat", NeedsTranslation: false}, + {Bulgarian: "", Translation: "dog", NeedsTranslation: true}, + {Bulgarian: "хляб", Translation: "bread", NeedsTranslation: false}, + {Bulgarian: "", Translation: "table", NeedsTranslation: true}, + {Bulgarian: "стол", Translation: "", NeedsTranslation: false}, }, }, } |
