diff --git a/cmd/version.go b/cmd/version.go index fed0473c2..c9afe7565 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -1,4 +1,4 @@ package cmd // Version - Wails version -const Version = "v0.18.4" +const Version = "v0.18.7-pre" diff --git a/config.go b/config.go index 4f87a6ada..57f274610 100644 --- a/config.go +++ b/config.go @@ -1,6 +1,9 @@ package wails -import "github.com/leaanthony/mewn" +import ( + "github.com/leaanthony/mewn" + "github.com/wailsapp/wails/runtime" +) // AppConfig is the configuration structure used when creating a Wails App object type AppConfig struct { @@ -65,7 +68,7 @@ func (a *AppConfig) merge(in *AppConfig) error { a.CSS = in.CSS } if in.Title != "" { - a.Title = in.Title + a.Title = runtime.ProcessEncoding(in.Title) } if in.Colour != "" { diff --git a/go.mod b/go.mod index d725cb728..fe1ff809c 100644 --- a/go.mod +++ b/go.mod @@ -2,6 +2,7 @@ module github.com/wailsapp/wails require ( github.com/Masterminds/semver v1.4.2 + github.com/abadojack/whatlanggo v1.0.1 github.com/dchest/cssmin v0.0.0-20151210170030-fb8d9b44afdc // indirect github.com/dchest/htmlmin v0.0.0-20150526090704-e254725e81ac github.com/dchest/jsmin v0.0.0-20160823214000-faeced883947 // indirect @@ -26,6 +27,7 @@ require ( golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529 // indirect golang.org/x/net v0.0.0-20190509222800-a4d6f7feada5 // indirect golang.org/x/sys v0.0.0-20190509141414-a5b02f93d862 + golang.org/x/text v0.3.0 gopkg.in/AlecAivazis/survey.v1 v1.8.4 gopkg.in/yaml.v3 v3.0.0-20190709130402-674ba3eaed22 -) +) \ No newline at end of file diff --git a/go.sum b/go.sum index 96626b9aa..96ea28f11 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,8 @@ github.com/Masterminds/semver v1.4.2 h1:WBLTQ37jOCzSLtXNdoo8bNM8876KhNqOKvrlGITg github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8 h1:xzYJEypr/85nBpB11F9br+3HUrpgb+fcm5iADzXXYEw= github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc= +github.com/abadojack/whatlanggo v1.0.1 h1:19N6YogDnf71CTHm3Mp2qhYfkRdyvbgwWdd2EPxJRG4= +github.com/abadojack/whatlanggo v1.0.1/go.mod h1:66WiQbSbJBIlOZMsvbKe5m6pzQovxCH9B/K8tQB2uoc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -85,6 +87,7 @@ golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190509141414-a5b02f93d862 h1:rM0ROo5vb9AdYJi1110yjWGMej9ITfKddS89P3Fkhug= golang.org/x/sys v0.0.0-20190509141414-a5b02f93d862/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= gopkg.in/AlecAivazis/survey.v1 v1.8.4 h1:10xXXN3wgIhPheb5NI58zFgZv32Ana7P3Tl4shW+0Qc= gopkg.in/AlecAivazis/survey.v1 v1.8.4/go.mod h1:iBNOmqKz/NUbZx3bA+4hAGLRC7fSK7tgtVDT4tB22XA= diff --git a/runtime/window.go b/runtime/window.go index ebad1e257..960e02b7b 100644 --- a/runtime/window.go +++ b/runtime/window.go @@ -1,6 +1,54 @@ package runtime -import "github.com/wailsapp/wails/lib/interfaces" +import ( + "bytes" + "runtime" + + "github.com/abadojack/whatlanggo" + "github.com/wailsapp/wails/lib/interfaces" + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/japanese" + "golang.org/x/text/encoding/korean" + "golang.org/x/text/encoding/simplifiedchinese" + "golang.org/x/text/transform" +) + +func detectEncoding(text string) (encoding.Encoding, string) { + // korean + var enc encoding.Encoding + info := whatlanggo.Detect(text) + //fmt.Println("Language:", info.Lang.String(), " Script:", whatlanggo.Scripts[info.Script], " Confidence: ", info.Confidence) + switch info.Lang.String() { + case "Korean": + enc = korean.EUCKR + case "Mandarin": + enc = simplifiedchinese.GBK + case "Japanese": + enc = japanese.EUCJP + } + return enc, info.Lang.String() +} + +// ProcessEncoding attempts to convert CKJ strings to UTF-8 +func ProcessEncoding(text string) string { + if runtime.GOOS != "windows" { + return text + } + + encoding, _ := detectEncoding(text) + if encoding != nil { + var bufs bytes.Buffer + wr := transform.NewWriter(&bufs, encoding.NewEncoder()) + _, err := wr.Write([]byte(text)) + defer wr.Close() + if err != nil { + return "" + } + + return bufs.String() + } + return text +} // Window exposes an interface for manipulating the window type Window struct { @@ -31,6 +79,7 @@ func (r *Window) UnFullscreen() { // SetTitle sets the the window title func (r *Window) SetTitle(title string) { + title = ProcessEncoding(title) r.renderer.SetTitle(title) }