見出し画像

シン・TWSNMP開発日誌:GO言語側の処理の多言語対応をしています

今朝は5時から開発開始です。
一通り機能の追加は終わったので、多言語対応を開始しました。
GO言語側の対応が面倒なので英語と日本語だけにしようと思いましたが、よい方法を思いついて何語でも対応できる仕組みにしました。
多言語対応のパッケージを探しましたが、GO言語のマップを使えば
簡単に多言対応できるので、自分で作りました。

package i18n

import (
	"log"
	"strings"

	"github.com/Xuanwo/go-locale"
)

var lang = ""

// 翻訳マップ
var transMap = map[string]map[string]string{
	"Start TWSNMP": {
		"ja": "TWSNMP起動",
	},
	"Stop TWSNMP": {
		"ja": "TWSNMP停止",
	},
	"Delete AI Result(%s)": {
		"ja": "AI分析結果を削除(%s)",
	},
}

func init() {
	t, err := locale.Detect()
	if err != nil {
		log.Println(err)
	}
	l := t.String()
	a := strings.SplitN(l, "-", 2)
	if len(a) == 2 {
		lang = a[0]
	}
	log.Printf("i18n init lang=%s", lang)
}

// SetLangは言語を設定します。
func SetLang(l string) {
	lang = l
}

// GetLangは言語の設定を返します。
func GetLang() string {
	return lang
}

// Transは翻訳した文字列を返します。
func Trans(s string) string {
	if m, ok := transMap[s]; ok {
		if t, ok := m[lang]; ok {
			return t
		}
	}
	return s
}

翻訳マップを増やせば、よいだけです。
GO言語側では、イベントログの出力やメール通知などで、日本語を使っているので、その部分を

"[^\x01-\x7E]

のような正規表現で検索して、置き換えていきます。

のような感じです。
100件ほどありましたが、2時間ぐらいでなんとか終了しました。
フロントエンド側(Svelte)はログ分析ツールで使った

で対応しますが、今朝は時間切れです。

明日に続く

開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。