diff --git a/init.go b/init.go index 9ee9436..7fa35d9 100644 --- a/init.go +++ b/init.go @@ -54,7 +54,7 @@ func init() { if err != nil { panic(errors.New("can not load: " + fileloc[x])) } - err = ioutil.WriteFile(NmsTemp+"/"+fileloc[x], []byte(data), 0644) + err = ioutil.WriteFile(NmsTemp+"/assets/lang/"+fileloc[x], []byte(data), 0644) if err != nil { panic(errors.New("can not write " + fileloc[x] + " to temp dir")) } diff --git a/lang.go b/lang.go index aec0d20..a121dc4 100644 --- a/lang.go +++ b/lang.go @@ -2,176 +2,61 @@ package nmslib import ( "encoding/csv" - "fmt" "os" "strings" ) -func readCSV(lagcsv string) [][]string { - fileloc := NmsTemp + "/" + lagcsv - csvFile, err := os.Open(fileloc) - if err != nil { - fmt.Println(err) - } - defer csvFile.Close() // close language file when finished - - // read csv file from memory - csvlines, err := csv.NewReader(csvFile).ReadAll() - if err != nil { - fmt.Println(err) - } - return csvlines - -} - -/* -Create struct of Word string -*/ type Translate struct { - Word string + Lang string } -// trans - set up structure of a word iteration -type trans0 struct { - english string // english word - word string // no caps word - capword string // Capitalized word - acpword string // ALL CAPITALIZED WORD +func (t Translate) ToEng(word string) (translation string) { + return translate2english(word, langFile(t.Lang)) } -/* -Kor2Eng translate korvax word to english word -*/ -func (t Translate) Kor2Eng() (returnstring string) { - csvlines := readCSV("korvax-lang.csv") - for range csvlines { - returnstring = (toEng(t, csvlines)) +func langFile(lang string) [][]string { + filepath := NmsTemp + "/assets/lang/" + lang + "-lang.csv" + csvFile, err := os.Open(filepath) + if err != nil { + panic(err) } - return -} + defer csvFile.Close() -/* -Eng2Kor translate english word to korvax word -*/ -func (t Translate) Eng2Kor() (returnstring string) { - csvlines := readCSV("korvax-lang.csv") - for range csvlines { - returnstring = (toNMS(t, csvlines)) + lines, err := csv.NewReader(csvFile).ReadAll() + if err != nil { + panic(err) } - return + return lines } -/* -Gek2Eng translate Gek word to english word -*/ -func (t Translate) Gek2Eng() (returnstring string) { - csvlines := readCSV("gek-lang.csv") - for range csvlines { - returnstring = (toEng(t, csvlines)) - } - return -} - -/* -Eng2Gek translate english word to Gek word -*/ -func (t Translate) Eng2Gek() (returnstring string) { - csvlines := readCSV("gek-lang.csv") - for range csvlines { - returnstring = (toNMS(t, csvlines)) - } - return -} - -/* -Vyk2Eng translate Vy'keen word to english word -*/ -func (t Translate) Vyk2Eng() (returnstring string) { - csvlines := readCSV("vykeen-lang.csv") - for range csvlines { - returnstring = (toEng(t, csvlines)) - } - return -} - -/* -Eng2Vyk translate english word to vykeen word -*/ -func (t Translate) Eng2Vyk() (returnstring string) { - csvlines := readCSV("vykeen-lang.csv") - for range csvlines { - returnstring = (toNMS(t, csvlines)) - } - return -} - -/* -Atl2Eng translate Atlas word to english word -*/ -func (t Translate) Atl2Eng() (returnstring string) { - csvlines := readCSV("atlas-lang.csv") - for range csvlines { - returnstring = (toEng(t, csvlines)) - } - return -} - -/* -Eng2Atl translate english word to Atlas word -*/ -func (t Translate) Eng2Atl() (returnstring string) { - csvlines := readCSV("atlas-lang.csv") - for range csvlines { - returnstring = (toNMS(t, csvlines)) - } - return -} - -func toEng(t Translate, csvlines [][]string) string { - returnstring := "*\\Kzzzzzzt\\*" // word not found default - for _, line := range csvlines { - lang := trans0{ - english: strings.ToLower(line[0]), - word: strings.ToLower(line[1]), - capword: strings.ToLower(line[2]), - acpword: strings.ToLower(line[3]), - } - // check translate struct for value - if strings.ToLower(t.Word) == lang.word { - returnstring = lang.english - } else if strings.ToLower(t.Word) == lang.capword { - returnstring = strings.Title(strings.ToLower(lang.english)) - } else if strings.ToLower(t.Word) == lang.acpword { - returnstring = strings.ToUpper(lang.english) +func translate2english(w string, knowledgeStone [][]string) string { + var rt string + for _, line := range knowledgeStone { + engl := line[0] + alien := line[1] + acap := line[2] + alcap := line[3] + if strings.EqualFold(w, alien) { + rt = strings.ToLower(engl) + } else if strings.EqualFold(w, acap) { + rt = strings.Title(engl) + } else if strings.EqualFold(w, alcap) { + rt = strings.ToUpper(engl) + } else { + rt = "*\\Kzzzzzzt\\*" } } - return returnstring + return rt } -func toNMS(t Translate, csvlines [][]string) string { - returnstring := "*\\Kzzzzzzt\\*" // word not found default - for _, line := range csvlines { - lang := trans0{ - english: line[0], - word: line[1], - capword: line[2], - acpword: line[3], - } - if t.Word == lang.english { - if lang.word != "" { - returnstring = lang.word - } - } - if t.Word == strings.Title(strings.ToLower(lang.english)) { - if lang.capword != "" { - returnstring = strings.Title(strings.ToLower(lang.capword)) - } - } - if t.Word == strings.ToUpper(lang.english) { - if lang.acpword != "" { - returnstring = strings.ToUpper(lang.acpword) - } - } +func translate2game(source string, target string) string { + var sourceCsv [][]string + var targetCsv [][]string + if source == "english" { + sourceCsv = langFile(target) + targetCsv = sourceCsv + } else { + sourceCsv = langFile(source) + targetCsv = langFile(target) } - return returnstring } diff --git a/nmslib-translate_test.go b/nmslib-translate_test.go index 0cf0c01..267ecab 100644 --- a/nmslib-translate_test.go +++ b/nmslib-translate_test.go @@ -6,32 +6,20 @@ import ( ) func TestTranslate(t *testing.T) { - want := Translate{"Paka"} - if want.Atl2Eng() != "Awake" { - t.Errorf("\nTesting Translate{\"Paka\"}.Atl2Eng(): got %q, want: %q.\n", want.Atl2Eng(), "Awake") + kor2eng := Translate{Lang: "korvax"} + if kor2eng.ToEng("Alinichel") != "Emergency" { + t.Errorf("\nTesting Translate{Lang: \"korvax\"}.ToEng(\"Alinichel\"): got %q, want: %q.\n", kor2eng.ToEng("Alinichel"), "Emergency") } else { - fmt.Printf("\nTesting Translate{\"Paka\"}.Atl2Eng(): got %q, want: %q.\n", want.Atl2Eng(), "Awake") - } - want = Translate{"hofsos"} - if want.Gek2Eng() != "answer" { - t.Errorf("Testing Translate{\"hofsos\"}.Gek2Eng(): got %q, want: %q.\n", want.Gek2Eng(), "answer") - } else { - fmt.Printf("Testing Translate{\"hofsos\"}.Gek2Eng(): got %q, want: %q.\n", want.Gek2Eng(), "answer") + fmt.Printf("\nTesting Translate{Lang: \"korvax\"}.ToEng(\"Alinichel\"): got %q, want: %q.\n", kor2eng.ToEng("Alinichel"), "Emergency") } - want = Translate{"Aqo"} - if want.Vyk2Eng() != "Foes" { - t.Errorf("Testing Translate{\"Aqo\"}.Vyk2Eng(): got %q, want: %q.\n", want.Vyk2Eng(), "Foes") + vyk2eng := Translate{"vykeen"} + if vyk2eng.ToEng("Aqo") != "Foes" { + t.Errorf("Testing Translate{Lang: \"vykeen\"}.ToEng(\"Aqo\"): got %q, want: %q.\n", vyk2eng.ToEng("Aqo"), "Foes") } else { - fmt.Printf("Testing Translate{\"Aqo\"}.Vyk2Eng(): got %q, want: %q.\n", want.Vyk2Eng(), "Foes") + fmt.Printf("Testing Translate{Lang: \"vykeen\"}.ToEng(\"Aqo\"): got %q, want: %q.\n", vyk2eng.ToEng("Aqo"), "Foes") } - want = Translate{"Alinichel"} - if want.Kor2Eng() != "Emergency" { - t.Errorf("Testing Translate{\"Alinichel\"}.Kor2Eng(): got %q, want: %q.\n", want.Kor2Eng(), "Emergency") - } else { - fmt.Printf("Testing Translate{\"Alinichel\"}.Kor2Eng(): got %q, want: %q.\n", want.Kor2Eng(), "Emergency") - } - fmt.Printf("\nTesting complete.\nStatus: ") CleanUp() + fmt.Printf("\nTesting complete.\nStatus: ") }