Complete redesign of lang.go
Some code is now reusable
- openCSV()
- toKor()
- toEng()
the new translation syantax is
```golang
korvax := Translate{"Contraband"}
fmt.Println(korvax.Eng2Kor())
// or
fmt.Println(Translate{"KIHTYOMOLES"}.Kor2Eng())
```
output:
`Zelidovoso`
This commit is contained in:
162
lang.go
162
lang.go
@@ -8,8 +8,15 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
// translate - set up structure of a word iteration
|
||||
type translate struct {
|
||||
/*
|
||||
Translate words
|
||||
*/
|
||||
type Translate struct {
|
||||
word 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
|
||||
@@ -17,9 +24,77 @@ type translate struct {
|
||||
}
|
||||
|
||||
/*
|
||||
Korvax2Eng - Translate a Korvax word to English
|
||||
Kor2Eng translate korvax word to english word
|
||||
*/
|
||||
func Korvax2Eng(kvwrd string) string {
|
||||
func (t Translate) Kor2Eng() (returnstring string) {
|
||||
csvlines := openCSV("korvax-lang.csv")
|
||||
for range csvlines {
|
||||
returnstring = (toEng(t, csvlines))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
/*
|
||||
Eng2Kor translate english word to korvax word
|
||||
*/
|
||||
func (t Translate) Eng2Kor() (returnstring string) {
|
||||
csvlines := openCSV("korvax-lang.csv")
|
||||
for range csvlines {
|
||||
returnstring = (toKor(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)
|
||||
}
|
||||
}
|
||||
return returnstring
|
||||
}
|
||||
|
||||
func toKor(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)
|
||||
}
|
||||
}
|
||||
}
|
||||
return returnstring
|
||||
}
|
||||
|
||||
func openCSV(lagcsv string) [][]string {
|
||||
// create temp dir
|
||||
tempdir, err := ioutil.TempDir("", "nmslib-")
|
||||
if err != nil {
|
||||
@@ -28,88 +103,23 @@ func Korvax2Eng(kvwrd string) string {
|
||||
defer os.RemoveAll(tempdir) // Clean up temp files
|
||||
|
||||
// extract language file from resources.go
|
||||
data, err := Asset("korvax-lang.csv")
|
||||
data, err := Asset(lagcsv)
|
||||
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")
|
||||
err = ioutil.WriteFile(tempdir+"/"+lagcsv, []byte(data), 0644)
|
||||
csvFile, err := os.Open(tempdir + "/" + lagcsv)
|
||||
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)
|
||||
}
|
||||
// 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
|
||||
return csvlines
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user