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[]
?