Jonathan Chan指出Samuel Stauffer'sgo-gettext內見毫秒做的伎倆。給出的目錄:
~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。您可以使用-k標誌來告訴xgettext查找camelcase函數名稱「GetText」。
最小工作例如:
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 <[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下的locale目錄保存測試數據,可以刪除部署。)
如果一切順利,訪問appname應顯示「Oui」。
關於建議編輯:我保留拼寫「本地化」的權利[正確方法](http://en.wikipedia.org/wiki/American_and_British_English_spelling_differences#-ise.2C_-ize_.28-isation.2C_-ization 0.29)。嘿,至少我在標記時使用了'z'! ;) –
你期望從「更有用的實現」中得到什麼樣的功能?對於大多數國際化的應用程序,鍵值存儲(可能有一些格式代碼)應該可以正常工作。 –
好吧,我想這是讓翻譯人員更容易完成工作的原因。我很好奇,如果有其他流行的方法(gettext等)的端口,我可能錯過了。現在,我使用[chrome.i18n的JSON格式](http://developer.chrome.com/extensions/i18n.html)將一個簡單的模塊拼湊在一起,如果沒有更完整的內容,我會將其作爲答案發布。 –