2009-07-11 2 views
1

Die Verwendung von --extract-all mit xgettext funktioniert nicht mit Plural. Mit der Antwort auf I18n C++ hello world with plurals als C++ - Code hier sind zwei Tests mit xgettext.Handhabung von Plural mit xgettextt mit --extract-all

cat >helloplurals.cxx <<EOF 
// hellopurals.cxx 
#include <libintl.h> 
#include <locale.h> 
#include <iostream> 
int main(){ 
    setlocale(LC_ALL, ""); 
    bindtextdomain("helloplurals", "."); 
    textdomain("helloplurals"); 
    for (int ii=0; ii<5; ii++) 
     printf(ngettext("Hello world with %d moon.\n", "Hello world with %d moons.\n", ii), ii); 
EOF 
xgettext --package-name helloplurals --package-version 1.1 --default-domain helloplurals --output helloplurals.pot helloplurals.cxx 
xgettext --extract-all --package-name helloplurals --package-version 1.1 --default-domain helloplurals --output helloplurals-ea.pot helloplurals.cxx 

Die ohne --extract-all funktioniert wie einschließlich der Handhabung von Pluralen erwartet:

#: helloplurals.cxx:10 
#, c-format 
msgid "Hello world with %d moon.\n" 
msgid_plural "Hello world with %d moons.\n" 
msgstr[0] "" 
msgstr[1] "" 

Wenn --extract-all nicht die resultierende POT-Datei wird hinzugefügt wird, um die Befehlszeile. Stattdessen gibt es getrennte Einträge:

#: helloplurals.cxx:10 
#, c-format 
msgid "Hello world with %d moon.\n" 
msgstr "" 

#: helloplurals.cxx:10 
#, c-format 
msgid "Hello world with %d moons.\n" 
msgstr "" 

String Literale, die direkt an die gettext() geben werden wie einwandfrei funktioniert Plural Nachrichten handhaben, wie im ersten Beispiel Verwendung von xgettext gezeigt.

Für Stringliterale, die nicht direkt mit einem der gettext() wie Funktionen die Verwendung der Option --extract-all mit xgettext übergeben werden, kann die Einträge in einer POT-Datei zu erzeugen, verwendet werden.

Wie man den Umgang mit Stringliterale bekommt, die nicht direkt an die gettext() wie Funktionen in Quelle übergeben werden, die auch mehrere Stringliterale enthalten, die direkt an gettext() wie Funktion übergeben werden, die mehrere Einträge zu erzeugen: msgid_plural und msgstr[]?

Antwort

1

Ich glaube nicht, dass xgettext das unterstützt. Wenn Sie --extract-all übergeben, ignoriert es jeden Kontext, in dem eine Zeichenfolge auftritt. Sie können dies als Fehler melden.

Ich würde empfehlen, alle Zeichenfolgen explizit trotzdem zu markieren. Dafür gibt es eine gute Tool-Unterstützung.