Jonathan Chan punti su Samuel Stauffer'sgo-gettext che vedi ms per fare il trucco. Date le directory:
~appname/
|~app/
| `-app.go
|+github.com/
`-app.yaml
Inizia con (assume * nix):
$ cd appname
$ git clone git://github.com/samuel/go-gettext.git github.com/samuel/go-gettext
preparazione Fonte non può utilizzare il _ ("Stringa da tradurre") forma abbreviata, due to underscore's special characteristics in Go. Puoi dire a xgettext di cercare il nome della funzione Camelcase "GetText" usando l'opzione -k.
minimo esempio di lavoro:
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."))
}
Creare il modello con:
$ xgettext -d appname -kGetText -s -o appname.pot app/app.go
Nota -k, senza di essa non ci sarà alcuna uscita come xgettext non riconoscerà chiamate a GetText. Modifica stringhe rilevanti, email ecc in appname.pot. Supponiamo che stiamo localizzando per il francese:
$ mkdir -p locale/fr_FR/LC_MESSAGES
$ msginit -l fr_FR -o french.po -i appname.pot
Edit 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."
Generare il binario (il file che verrà effettivamente ottenere distribuito con l'applicazione):
$ msgfmt -c -v -o locale/fr_FR/LC_MESSAGES/appname.mo french.po
finale struttura di directory:
~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
(la directory locale sotto go-gettext contiene i dati di test, potrebbe essere rimossa per la distribuzione.)
Se tutto va bene, una visita ad appname dovrebbe visualizzare "Oui".
Per quanto riguarda la modifica suggerita: mi riservo il diritto di scrivere "localizzazione" [modo corretto] (http://en.wikipedia.org/wiki/American_and_British_English_spelling_differences#-ise.2C_-ize_.28-isation.2C_-ization .29). Ehi, almeno ho usato 'z' quando taggati! ;) –
Che tipo di funzionalità ti aspetti da una "implementazione più utile"? Per la maggior parte delle applicazioni i18n, gli archivi a valore-chiave (con forse alcuni codici di formato) dovrebbero funzionare correttamente. –
Beh, credo che qualcosa abbia permesso ai traduttori di fare il loro lavoro più facilmente. Ero curioso di sapere se c'erano porti da fare per altri approcci popolari (gettext, ecc.) Che avrei potuto perdere. In questo momento sto mettendo insieme un semplice modulo usando [il formato JSON di chrome.i18n] (http://developer.chrome.com/extensions/i18n.html), che posterò come risposta se nulla di più completo si materializza. –