Greatly improved translator feature
The translator feature has been completely rewritten, and can now convert any game language to any other.
This commit is contained in:
2
init.go
2
init.go
@@ -54,7 +54,7 @@ func init() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(errors.New("can not load: " + fileloc[x]))
|
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 {
|
if err != nil {
|
||||||
panic(errors.New("can not write " + fileloc[x] + " to temp dir"))
|
panic(errors.New("can not write " + fileloc[x] + " to temp dir"))
|
||||||
}
|
}
|
||||||
|
|||||||
254
lang.go
254
lang.go
@@ -2,176 +2,140 @@ package nmslib
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/csv"
|
"encoding/csv"
|
||||||
"fmt"
|
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func readCSV(lagcsv string) [][]string {
|
/*Translate Game languages and english
|
||||||
fileloc := NmsTemp + "/" + lagcsv
|
Translate.Lang sets source language for translations
|
||||||
csvFile, err := os.Open(fileloc)
|
options are:
|
||||||
if err != nil {
|
korvax
|
||||||
fmt.Println(err)
|
gek
|
||||||
}
|
vykeen
|
||||||
defer csvFile.Close() // close language file when finished
|
atlas
|
||||||
|
english
|
||||||
// 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 {
|
type Translate struct {
|
||||||
Word string
|
Lang string
|
||||||
}
|
}
|
||||||
|
|
||||||
// trans - set up structure of a word iteration
|
/*Translate source language to english
|
||||||
type trans0 struct {
|
Translate any NMS language (ie. Korvax) to english
|
||||||
english string // english word
|
|
||||||
word string // no caps word
|
|
||||||
capword string // Capitalized word
|
|
||||||
acpword string // ALL CAPITALIZED WORD
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
Kor2Eng translate korvax word to english word
|
|
||||||
*/
|
*/
|
||||||
func (t Translate) Kor2Eng() (returnstring string) {
|
func (t Translate) ToEng(word string) (translation string) {
|
||||||
csvlines := readCSV("korvax-lang.csv")
|
//return translate2english(word, langFile(t.Lang))
|
||||||
for range csvlines {
|
return Translator(word, t.Lang, "english")
|
||||||
returnstring = (toEng(t, csvlines))
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*Translate source language to Korvax
|
||||||
Eng2Kor translate english word to korvax word
|
Translate any NMS language or english (ie. Gek) to Korvax
|
||||||
*/
|
*/
|
||||||
func (t Translate) Eng2Kor() (returnstring string) {
|
func (t Translate) ToKorvax(word string) (translation string) {
|
||||||
csvlines := readCSV("korvax-lang.csv")
|
return Translator(word, t.Lang, "korvax")
|
||||||
for range csvlines {
|
|
||||||
returnstring = (toNMS(t, csvlines))
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*Translate source language to Vy'Keen
|
||||||
Gek2Eng translate Gek word to english word
|
Translate any NMS language or english (ie. Atlas) to Vy'Keen
|
||||||
*/
|
*/
|
||||||
func (t Translate) Gek2Eng() (returnstring string) {
|
func (t Translate) ToVykeen(word string) (translation string) {
|
||||||
csvlines := readCSV("gek-lang.csv")
|
return Translator(word, t.Lang, "vykeen")
|
||||||
for range csvlines {
|
|
||||||
returnstring = (toEng(t, csvlines))
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*Translate source language to Gek
|
||||||
Eng2Gek translate english word to Gek word
|
Translate any NMS language or english (ie. Vy'Keen) to Gek
|
||||||
*/
|
*/
|
||||||
func (t Translate) Eng2Gek() (returnstring string) {
|
func (t Translate) ToGek(word string) (translation string) {
|
||||||
csvlines := readCSV("gek-lang.csv")
|
return Translator(word, t.Lang, "Gek")
|
||||||
for range csvlines {
|
|
||||||
returnstring = (toNMS(t, csvlines))
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*Translate source language to Atlas
|
||||||
Vyk2Eng translate Vy'keen word to english word
|
Translate any NMS language or english (ie. Korvax) to Atlas
|
||||||
*/
|
*/
|
||||||
func (t Translate) Vyk2Eng() (returnstring string) {
|
func (t Translate) ToAtlas(word string) (translation string) {
|
||||||
csvlines := readCSV("vykeen-lang.csv")
|
return Translator(word, t.Lang, "atlas")
|
||||||
for range csvlines {
|
|
||||||
returnstring = (toEng(t, csvlines))
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// read language files
|
||||||
Eng2Vyk translate english word to vykeen word
|
func langFile(lang string) [][]string {
|
||||||
|
filepath := NmsTemp + "/assets/lang/" + lang + "-lang.csv"
|
||||||
|
csvFile, err := os.Open(filepath)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer csvFile.Close()
|
||||||
|
|
||||||
|
lines, err := csv.NewReader(csvFile).ReadAll()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return lines
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Translate any in game language to another including english (ie. Korvax to Gek)
|
||||||
|
Translating from english to a game language will alway default to all lower case for now
|
||||||
*/
|
*/
|
||||||
func (t Translate) Eng2Vyk() (returnstring string) {
|
func Translator(word string, source string, target string) string {
|
||||||
csvlines := readCSV("vykeen-lang.csv")
|
var sourcekey [4]string
|
||||||
for range csvlines {
|
var targetkey [4]string
|
||||||
returnstring = (toNMS(t, csvlines))
|
var dmy string
|
||||||
}
|
var rt string
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
rt = "*\\Kzzzzzzt\\*"
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
if source == "english" {
|
||||||
Eng2Atl translate english word to Atlas word
|
dmy = target
|
||||||
*/
|
} else {
|
||||||
func (t Translate) Eng2Atl() (returnstring string) {
|
dmy = source
|
||||||
csvlines := readCSV("atlas-lang.csv")
|
|
||||||
for range csvlines {
|
|
||||||
returnstring = (toNMS(t, csvlines))
|
|
||||||
}
|
}
|
||||||
return
|
for _, line := range langFile(dmy) {
|
||||||
}
|
for _, trans := range line {
|
||||||
|
if trans == word {
|
||||||
func toEng(t Translate, csvlines [][]string) string {
|
sourcekey[0] = line[0]
|
||||||
returnstring := "*\\Kzzzzzzt\\*" // word not found default
|
sourcekey[1] = line[1]
|
||||||
for _, line := range csvlines {
|
sourcekey[2] = line[2]
|
||||||
lang := trans0{
|
sourcekey[3] = line[3]
|
||||||
english: strings.ToLower(line[0]),
|
}
|
||||||
word: strings.ToLower(line[1]),
|
}
|
||||||
capword: strings.ToLower(line[2]),
|
if target != "english" {
|
||||||
acpword: strings.ToLower(line[3]),
|
for _, line := range langFile(target) {
|
||||||
}
|
if strings.EqualFold(line[0], sourcekey[0]) {
|
||||||
// check translate struct for value
|
targetkey[0] = line[0]
|
||||||
if strings.ToLower(t.Word) == lang.word {
|
targetkey[1] = line[1]
|
||||||
returnstring = lang.english
|
targetkey[2] = line[2]
|
||||||
} else if strings.ToLower(t.Word) == lang.capword {
|
targetkey[3] = line[3]
|
||||||
returnstring = strings.Title(strings.ToLower(lang.english))
|
}
|
||||||
} else if strings.ToLower(t.Word) == lang.acpword {
|
}
|
||||||
returnstring = strings.ToUpper(lang.english)
|
if strings.EqualFold(word, sourcekey[0]) {
|
||||||
}
|
if targetkey[0] != "" {
|
||||||
}
|
rt = targetkey[0]
|
||||||
return returnstring
|
}
|
||||||
}
|
} else if strings.EqualFold(word, sourcekey[1]) {
|
||||||
|
if targetkey[1] != "" {
|
||||||
func toNMS(t Translate, csvlines [][]string) string {
|
rt = targetkey[1]
|
||||||
returnstring := "*\\Kzzzzzzt\\*" // word not found default
|
}
|
||||||
for _, line := range csvlines {
|
} else if strings.EqualFold(word, sourcekey[2]) {
|
||||||
lang := trans0{
|
if targetkey[2] != "" {
|
||||||
english: line[0],
|
rt = targetkey[2]
|
||||||
word: line[1],
|
}
|
||||||
capword: line[2],
|
} else if strings.EqualFold(word, sourcekey[3]) {
|
||||||
acpword: line[3],
|
if targetkey[3] != "" {
|
||||||
}
|
rt = targetkey[3]
|
||||||
if t.Word == lang.english {
|
}
|
||||||
if lang.word != "" {
|
}
|
||||||
returnstring = lang.word
|
if source == "english" {
|
||||||
}
|
rt = targetkey[1]
|
||||||
}
|
}
|
||||||
if t.Word == strings.Title(strings.ToLower(lang.english)) {
|
} else {
|
||||||
if lang.capword != "" {
|
if strings.EqualFold(word, sourcekey[0]) {
|
||||||
returnstring = strings.Title(strings.ToLower(lang.capword))
|
rt = sourcekey[0]
|
||||||
}
|
} else if strings.EqualFold(word, sourcekey[1]) {
|
||||||
}
|
rt = strings.ToLower(sourcekey[0])
|
||||||
if t.Word == strings.ToUpper(lang.english) {
|
} else if strings.EqualFold(word, sourcekey[2]) {
|
||||||
if lang.acpword != "" {
|
rt = strings.Title(sourcekey[0])
|
||||||
returnstring = strings.ToUpper(lang.acpword)
|
} else if strings.EqualFold(word, sourcekey[3]) {
|
||||||
}
|
rt = strings.ToUpper(sourcekey[0])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return returnstring
|
}
|
||||||
|
return rt
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,32 +6,31 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestTranslate(t *testing.T) {
|
func TestTranslate(t *testing.T) {
|
||||||
want := Translate{"Paka"}
|
kor2eng := Translate{Lang: "korvax"}
|
||||||
if want.Atl2Eng() != "Awake" {
|
if kor2eng.ToEng("Alinichel") != "Emergency" {
|
||||||
t.Errorf("\nTesting Translate{\"Paka\"}.Atl2Eng(): got %q, want: %q.\n", want.Atl2Eng(), "Awake")
|
t.Errorf("\nTesting Translate{Lang: \"korvax\"}.ToEng(\"Alinichel\"): got %q, want: %q.\n", kor2eng.ToEng("Alinichel"), "Emergency")
|
||||||
} else {
|
} else {
|
||||||
fmt.Printf("\nTesting Translate{\"Paka\"}.Atl2Eng(): got %q, want: %q.\n", want.Atl2Eng(), "Awake")
|
fmt.Printf("\nTesting Translate{Lang: \"korvax\"}.ToEng(\"Alinichel\"): got %q, want: %q.\n", kor2eng.ToEng("Alinichel"), "Emergency")
|
||||||
}
|
|
||||||
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")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
want = Translate{"Aqo"}
|
vyk2eng := Translate{"vykeen"}
|
||||||
if want.Vyk2Eng() != "Foes" {
|
if vyk2eng.ToEng("Aqo") != "Foes" {
|
||||||
t.Errorf("Testing Translate{\"Aqo\"}.Vyk2Eng(): got %q, want: %q.\n", want.Vyk2Eng(), "Foes")
|
t.Errorf("Testing Translate{Lang: \"vykeen\"}.ToEng(\"Aqo\"): got %q, want: %q.\n", vyk2eng.ToEng("Aqo"), "Foes")
|
||||||
} else {
|
} 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: ")
|
|
||||||
|
|
||||||
|
engWord := Translate{"english"}
|
||||||
|
if engWord.ToKorvax("learn") != "achi" {
|
||||||
|
t.Errorf("Testing Translate{Lang: \"english\"}.ToKor(\"learn\"): got %q, want: %q.\n", engWord.ToKorvax("learn"), "achi")
|
||||||
|
} else {
|
||||||
|
fmt.Printf("Testing Translate{Lang: \"english\"}.ToKor(\"learn\"): got %q, want: %q.\n", engWord.ToKorvax("learn"), "achi")
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Blind Test: " + Translate{"gek"}.ToAtlas("baturk")) // word does not exist in Atlas lang
|
||||||
|
fmt.Println("Blind Test: " + Translate{"gek"}.ToAtlas("Tor")) // word exists
|
||||||
|
|
||||||
|
fmt.Println("Running CleanUp()")
|
||||||
CleanUp()
|
CleanUp()
|
||||||
|
fmt.Printf("\nTesting complete.\nStatus: ")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user