Jonathan Chan参照Samuel Stauffer'sgo-gettextポイントトリックを行うms。
~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
ソースの準備は_( "翻訳される文字列")短い形式、due to underscore's special characteristics in Goを使用することはできません。ディレクトリを考えますxgettextに、-kフラグを使ってcamelcase関数名 "GetText"を探すように指示できます。
最小限の作業例:にxgettextはGetTextはへの呼び出しを認識しませんよう、それは何も出力されないだろうせずに、
$ xgettext -d appname -kGetText -s -o appname.pot app/app.go
注-k:
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."))
}
がでテンプレートを作成します。関連する文字列を編集し、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 <[email protected]>, 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 <[email protected]>\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」と表示されます。
提案された編集について:私は "ローカリゼーション" [正しい方法]を綴る権利を有します(http://en.wikipedia.org/wiki/American_and_British_English_spelling_differences#-ise.2C_-ize_.28-isation.2C_-ization 29)。ねえ、少なくともタグ付けするときに私は 'z'を使いました! ;) –
「より便利な実装」からどのような機能を期待していますか?ほとんどのi18nアプリケーションでは、キー値ストア(おそらくいくつかのフォーマットコード付き)はうまく動作するはずです。 –
さて、私は、翻訳者が仕事をより簡単にすることができるように思っています。私が見逃していた可能性のある他の一般的なアプローチ(gettextなど)のうちに行くポートがあるかどうか不思議でした。今、私は[chrome.i18nのJSON形式](http://developer.chrome.com/extensions/i18n.html)を使って簡単なモジュールをまとめています。 –