github.com/google/gxui에서 GUI 를 사용하려고 했는데, 한글 출력이 안 됐다. 어느 일본인이 Twitter 앱을 만든 앱이 하나 있길래 봤는데 솔직히 어떻게 구성을 했는지 잘 이해가 되지않았다. 입문자는 최대를 뻘짓을 통해서 해결 할 수 밖에 없다.
func appMain(driver gxui.Driver) {
g := new(gxuitter)
g.LoadConfig()
theme := dark.CreateTheme(driver)
fontFile := g.ConfigString("FontFile")
fontSize := g.ConfigInt("FontSize")
if fontSize <= 0 {
fontSize = 12
}
if fontFile != "" {
b, err := ioutil.ReadFile(fontFile)
font, err := driver.CreateFont(b, fontSize)
if err == nil {
theme.SetDefaultFont(font)
}
}
}
위에는 appMain 에 font를 설정하는 방법
golang.kr 에서 질문 글을 올려서 해결책을 찾게 되었습니다.
한글이 나오지 않는 이유는 기본으로 제공하고있는 roboto 폰트가 한글을 지원하지 않는 것이었습니다. 저도 go 언어는 기본적으로 utf-8 로 작성되는 언어인데 한글 출력이 안된다는 점을 이상하게 생각했는데 의외로 간단한 문제 였습니다.
1, 첫번째 방법은 나눔폰트를 go generate 하는 방법
go generate 란
매크로를 활용해야 하는 경우라면 지금까지 나열한 방법으로 해결되지 않습니다. C 언어 등에서 제공하는 매크로는 전처리기를 통하여 소스 코드를 혹장하여 컴파일합니다. 비슷한 도구가 go 도구에 있습니다.
300p, 책 디스커터리 Go 안에서
$GOPATH/src/github.com/google/gxui/gxfont/mkfont.go 파일에서 urls 이름의 map에 적당한 한글폰트 하나를 추가합니다.
var urls = map[string]string{
"roboto_regular": "https://github.com/google/fonts/raw/master/apache/roboto/Roboto-Regular.ttf",
"droid_sans_mono": "https://github.com/google/fonts/raw/master/apache/droidsansmono/DroidSansMono.ttf",
"nanumgothic": "https://github.com/google/fonts/raw/master/ofl/nanumgothic/NanumGothic-Regular.ttf",
}
$ go run mkfont.go
mkfont.go 파일을 이용해서 generation 합니다.
func appMain(driver gxui.Driver) {
theme := flags.CreateTheme(driver)
fontdata, err := ioutil.ReadFile("malgun.ttf")
if err != nil {
log.Fatalln(err)
}
font, err := driver.CreateFont(fontdata, 12)
if err != nil {
log.Fatalln(err)
}
theme.SetDefaultFont(font)
nanumgothic.go 라는 파일이 생성 된 것을 확인 할 수 있을 것입니다.
mkfont.go 와 같은 디렉토리의 파일 $GOPATH/src/github.com/google/gxui/gxfont/gxfont.go 파일의 Default를 robo_regular에서 nanumgothic 으로 바꿉니다.
var (
// Default is the standard GXUI sans-serif font.
Default []byte = inflate(nanumgothic)
// Monospace is the standard GXUI fixed-width font.
Monospace []byte = inflate(droid_sans_mono)
$ go install
로 컴파일 해주면, 이제 한글이 보입니다.
2번째 방법은,
gxui.Driver 를 통해서 theme에 SetDefaultFont 를 설정하는 방법입니다.
실행 파일과 같은 곳에 malgun.ttf 파일을 복사해 넣고,
func appMain(driver gxui.Driver) {
theme := flags.CreateTheme(driver)
fontdata, err := ioutil.ReadFile("malgun.ttf")
if err != nil {
log.Fatalln(err)
}
font, err := driver.CreateFont(fontdata, 12)
if err != nil {
log.Fatalln(err)
}
theme.SetDefaultFont(font)
다음과 같은 fontdata 와 font 코드를 추가해 줍니다.
$ goimports -w
를 통해서 import 라인을 다시 수정하면 됩니다.
댓글 없음:
댓글 쓰기