0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【おぼえ書き】Go Fyne で日本語表示をする

Posted at

はじめに

Fyneは基本では日本語を扱うことができません。ですが、カスタムテーマを使えば、日本語が扱えるようになると言うことで実際に試してみました。

前提条件

OS:Ubuntu22.04LTS
Go:go version go1.20.5 linux/amd64
※ Go言語とFyneはインストール済みとします。

fyneのインストールは、Fyne Develop Getting Started、または、@hibikingさんのこちらの記事GO言語のGUIライブラリ「Fyne」のインストール方法を参考にしてください

参考とした記事

Fyne公式のドキュメント
https://developer.fyne.io/
GitHubGist(lusinganderさんの記事)
https://gist.github.com/lusingander/9c30e6b0ac268c6596bcb95b85943c4e

準備

作成するファイル

bundle.go -> フォントデータを登録
theme.go -> カスタムテーマの記述
main.go -> カスタムテーマを組み込みます

※ 全てのファイルもmainパッケージとし、それぞれ必要となるライブラリをインポートしてください

フォントファイルの準備

今回はlusinganderさんの記事を参考にM+FONTSを利用しています。 url(http://mplus-fonts.osdn.jp/)
※ フォントはレギュラーとボールドの2つのフォントを使用します。

フォントファイルのバンドル

まず、フォントファイルをFyneで使用できるようbundle.goにします。
コマンドは

fyne bundle フォントのファイル > bundle.go

でOKなはずですが、ここで問題があります、このfyne bundleコマンドは、標準出力へ
「パッケージ文+インポート文+バンドルするファイルのデータ」を出力します。
なので、2つ目以降のファイルをバンドルしようとして、

fyne bundle 2つ目のフォントのファイル > bundle.go

とすると上書きされてしまい、また

fyne bundle 2つ目のフォントのファイル >> bundle.go

とすると「パッケージ文+インポート文」が二重になってしまいます。
なので、Fyne公式の「Bundling resource」にある通り

fyne bundle -o bundle.go 1つ目のフォントのファイル
fyne bundle -o bundle.go -append 2つ目のフォントのファイル

とするとうまく行きます。

カスタムテーマを準備する

これもFyne公式の「Creating a Custom Theme」を参考に、fyne.Themeインターフェイスを実装します。
まず、カスタムテーマの元になる空の構造体を作ります。

type myTheme struct{}

次に、その後に次の文を書きます。※ コンパイルエラー関連?(私にはよくわかりませんせした。)

var _ fyne.Theme = (*myTheme)(nil)

そして、fyne.Themeインターフェースを実装します。4つのメソッド(Font・Color・Icon・Size)の全てを実装する必要があります。
※ このコードは、lusinganderさんの物のそのままです。

func (*myTheme) Font(s fyne.TextStyle) fyne.Resource {
	if s.Monospace {
		return theme.DefaultTheme().Font(s)
	}
	if s.Bold {
		if s.Italic {
			return theme.DefaultTheme().Font(s)
		}
		return resourceMplus1cBoldTtf
	}
	if s.Italic {
		return theme.DefaultTheme().Font(s)
	}
	return resourceMplus1cRegularTtf
}

func (*myTheme) Color(n fyne.ThemeColorName, v fyne.ThemeVariant) color.Color {
	return theme.DefaultTheme().Color(n, v)
}

func (*myTheme) Icon(n fyne.ThemeIconName) fyne.Resource {
	return theme.DefaultTheme().Icon(n)
}

func (*myTheme) Size(n fyne.ThemeSizeName) float32 {
	return theme.DefaultTheme().Size(n)
}

後は、main.goでカスタムテーマをセットします。

a := app.New()
a.Settings().SetTheme(&myTheme{})

終わりに

実際にどうなるかはlusinganderさんのレポジトリにコードがありますのでそちらを実行してみてください。
fyne公式とlusinganderさんの記事を参考に四苦八苦しながら動かしてみました。もしGo Fyneで日本語を表示してみたい方に参考としてもらえたら幸いです。

ではでは

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?