Files
nmslib/lang.go
bradley.richins 08ed8866d0 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
2020-10-21 11:28:26 -06:00

116 lines
2.7 KiB
Go

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