ジョナサン・チャンは、サミュエル・スタウファーの ゴーゲットテキストを指摘します。与えられたディレクトリ:
~appname/
|~app/
| `-app.go
|+github.com/
`-app.yaml
で始まる(* nixを想定):
$ cd appname
$ git clone git://github.com/samuel/go-gettext.git github.com/samuel/go-gettext
Goにはアンダースコアの特殊な特性があるため、ソースの準備では_( "文字列を変換する")の短縮形を使用できません。-kフラグを使用して、キャメルケース関数名「GetText」を検索するようにxgettextに指示できます。
最小限の作業例:
package app
import (
"fmt"
"log"
"net/http"
"github.com/samuel/go-gettext"
)
func init () {
http.HandleFunc("/", home)
}
func home(w http.ResponseWriter, r *http.Request) {
d, err := gettext.NewDomain("appname", "locale")
if err != nil {
log.Fatal("Failed at NewDomain.")
}
cat := d.GetCatalog("fr_FR")
if cat == gettext.NullCatalog {
log.Fatal("Failed at GetCatalog.")
}
fmt.Fprintf(w, cat.GetText("Yes."))
}
次のコマンドでテンプレートを作成します。
$ xgettext -d appname -kGetText -s -o appname.pot app/app.go
-kに注意してください。これがないと、xgettextはGetTextの呼び出しを認識しないため、出力はありません。appname.potで関連する文字列、メールなどを編集します。フランス語をローカライズしていると仮定しましょう。
$ mkdir -p locale/fr_FR/LC_MESSAGES
$ msginit -l fr_FR -o french.po -i appname.pot
French.poを編集します。
# Appname l10n
# Copyright (C) 2013 Wombat Inc
# This file is distributed under the same license as the appname package.
# Wombat <wombat@example.com>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: appname v0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-01-13 11:03+1300\n"
"PO-Revision-Date: 2013-01-13 11:10+1300\n"
"Last-Translator: Rich <rich@example.com>\n"
"Language-Team: French\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: app/app.go:15
msgid "Yes."
msgstr "Oui."
バイナリ(アプリで実際にデプロイされるファイル)を生成します。
$ msgfmt -c -v -o locale/fr_FR/LC_MESSAGES/appname.mo french.po
最終的なディレクトリ構造:
~appname/
|~app/
| `-app.go
|~github.com/
| `~samuel/
| `~go-gettext/
| +locale/
| |-catalog.go
| |-domain.go
| `-mo.go
|~locale/
| `~fr_FR/
| `LC_MESSAGES/
| `-appname.mo
`-app.yaml
(go-gettextの下のロケールディレクトリはテストデータを保持し、展開のために削除できます。)
すべてがうまくいけば、appnameにアクセスすると「Oui」と表示されます。