summaryrefslogtreecommitdiff
path: root/internal/batch
diff options
context:
space:
mode:
Diffstat (limited to 'internal/batch')
-rw-r--r--internal/batch/processor.go33
-rw-r--r--internal/batch/processor_test.go56
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},
},
},
}