2009-12-11 5 views
8

Mit gettext wie soll ein Satz mit mehreren numerischen Variablen übersetzbar gemacht werden? ngettext nimmt nur eine Zahl als Plural-Parameter.Internationalisierende Sätze mit zwei Pluralwörtern

Die Permutationen, die im folgenden Satz erlaubt sein sollten, sind "Erwachsene und Kinder", "Erwachsene und Kinder", "Erwachsene und Kinder" und "Erwachsene und Kinder".

„von #AVAILABILITYFROM zu #AVAILABILITYTO für #NUMADULTS Erwachsenen und #NUMCHILDREN Kind“

Antwort

8

Grammatik kann in einigen anderen Sprachen als Englisch sehr komplex sein und Sie sollten sich bewusst sein, dass praktisch unmöglich ist richtig komplexe Sätze zu erzeugen, unter Verwendung von dein Ansatz.

Denken Sie daran, dass mehrere Variablen und Genre (männlich/weiblich) auch viel Komplexität hinzufügt.

Die Lösung besteht darin, nur einfache Sätze zu generieren, in denen Sie nur eine Variable haben. Dies ist der Fall, der von ngettext unterstützt wird.

Verstehen Sie, dass ngettext ist etwas Großartiges und das ist etwas, was die meisten kommerziellen i18n Frameworks von Bug-Software-Unternehmen nicht einmal unterstützen. Auch wenn es seine Grenzen hat, so ist die Lösung für Ihre Frage teilen Sie Ihren komplexen Satz in mehrere einfache, die mit nur einer Variablen übersetzt werden können.

+0

Ich möchte nur hinzufügen, dass selbst wenn es nur eine Pluralform gibt, dann würde diese Art der Durchführung 4 Strings erfordern. Einer für beide Teile Singular, einer für beide Teile Plural, einer für den ersten Singular und der zweite Plural und einer für den anderen Weg. Gettext unterstützt das nicht einmal und etwas zu machen, das zu komplex ist, um es zu benutzen. –

+0

Ich hatte gehofft, dass das nicht die Antwort wäre, aber dachte, dass es vielleicht :) – dsas

+1

Es ist nicht unmöglich, es kann leicht mit mehreren Ebenen der Verschachtelung in den Nachrichten getan werden, das ist der Ansatz ICU verwendet. ngettext ist nicht großartig, es ist mangelhaft, weil es nur eine Verschachtelung auf einer Ebene erlaubt, so dass es nur die Auswahl einer Variablen handhaben kann. Der Rat, den Satz in mehrere zu teilen, ist ein schlechter, aber es ist der einzige, der mit gettext möglich ist. Sie verbinden die Teile als A + B + C in Ihrem Code, aber in einer Zielsprache ist es falsch und muss C + A + B oder ein Teil von C Shoud gehen zuerst und so weiter. –