Improved translations

Upper case and CAPLOCK words are now properly translated

Began prepering code for rewrite
TODO:   make code reusable\
	add support for:
		Gek
		Vykeen
		Atlas

added some annotations
This commit is contained in:
bradley.richins
2020-10-21 11:28:26 -06:00
parent 620d0ef9de
commit 08ed8866d0

72
lang.go
View File

@@ -8,51 +8,56 @@ import (
"strings" "strings"
) )
// KorvaxWord - set up structure of a word iteration // translate - set up structure of a word iteration
type korvaxWord struct { type translate struct {
english string english string // english word
korvax string word string // no caps word
kwcaps string capword string // Capitalized word
kwallcaps string acpword string // ALL CAPITALIZED WORD
} }
/* /*
Korvax2Eng - Translate a Korvax word to English Korvax2Eng - Translate a Korvax word to English
*/ */
func Korvax2Eng(kvwrd string) string { func Korvax2Eng(kvwrd string) string {
// create temp dir
tempdir, err := ioutil.TempDir("", "nmslib-") tempdir, err := ioutil.TempDir("", "nmslib-")
if err != nil { if err != nil {
panic(err) panic(err)
} }
defer os.RemoveAll(tempdir) defer os.RemoveAll(tempdir) // Clean up temp files
// extract language file from resources.go
data, err := Asset("korvax-lang.csv") data, err := Asset("korvax-lang.csv")
if err != nil { if err != nil {
panic(err) panic(err)
} }
// wirte extracted data to temp dir
err = ioutil.WriteFile(tempdir+"/korvax-lang.csv", []byte(data), 0644) err = ioutil.WriteFile(tempdir+"/korvax-lang.csv", []byte(data), 0644)
csvFile, err := os.Open(tempdir + "/korvax-lang.csv") csvFile, err := os.Open(tempdir + "/korvax-lang.csv")
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
defer csvFile.Close() defer csvFile.Close() // close language file when finished
csvlines, err := csv.NewReader(csvFile).ReadAll() csvlines, err := csv.NewReader(csvFile).ReadAll()
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
// loop through language data and assign to translate strut
for _, line := range csvlines { for _, line := range csvlines {
klang := korvaxWord{ lang := translate{
english: line[0], english: strings.ToLower(line[0]),
korvax: line[1], word: strings.ToLower(line[1]),
kwcaps: line[2], capword: strings.ToLower(line[2]),
kwallcaps: line[3], acpword: strings.ToLower(line[3]),
} }
if kvwrd == klang.korvax { // check translate struct for value
return klang.english if strings.ToLower(kvwrd) == lang.word {
} else if kvwrd == klang.korvax { return lang.english
return strings.Title(strings.ToLower(klang.english)) } else if strings.ToLower(kvwrd) == lang.capword {
} else if kvwrd == klang.kwallcaps { return strings.Title(strings.ToLower(lang.english))
return strings.ToUpper(klang.english) } else if strings.ToLower(kvwrd) == lang.acpword {
return strings.ToUpper(lang.english)
} }
} }
return "*\\Kzzzzzzt\\*" // word not found default return "*\\Kzzzzzzt\\*" // word not found default
@@ -62,11 +67,12 @@ func Korvax2Eng(kvwrd string) string {
Eng2Korvax - Convert (some) english words to Korvax Eng2Korvax - Convert (some) english words to Korvax
*/ */
func Eng2Korvax(enwrd string) string { func Eng2Korvax(enwrd string) string {
// setup temp dir
tempdir, err := ioutil.TempDir("", "nmslib") tempdir, err := ioutil.TempDir("", "nmslib")
if err != nil { if err != nil {
panic(err) panic(err)
} }
defer os.RemoveAll(tempdir) defer os.RemoveAll(tempdir) // clean up temp files
data, err := Asset("korvax-lang.csv") data, err := Asset("korvax-lang.csv")
if err != nil { if err != nil {
@@ -82,14 +88,26 @@ func Eng2Korvax(enwrd string) string {
fmt.Println(err) fmt.Println(err)
} }
for _, line := range csvlines { for _, line := range csvlines {
klang := korvaxWord{ lang := translate{
english: line[0], english: line[0],
korvax: line[1], word: line[1],
kwcaps: line[2], capword: line[2],
kwallcaps: line[3], acpword: line[3],
} }
if enwrd == klang.english { if enwrd == lang.english {
return klang.korvax if lang.word != "" {
return lang.word
}
}
if enwrd == strings.Title(strings.ToLower(lang.english)) {
if lang.capword != "" {
return strings.Title(strings.ToLower(lang.capword))
}
}
if enwrd == strings.ToUpper(lang.english) {
if lang.acpword != "" {
return strings.ToUpper(lang.acpword)
}
} }
} }
csvFile.Close() csvFile.Close()