2009-09-17 7 views
9

Dies ist über die besten Praktiken in der Regel nicht spezifisch für eine einzelne Sprache, Datenbank oder was auch immerBest Practice (s) für einzelne Wort- oder Pluralwörter?

Wir haben alle mit generierte Ausgabe zu behandeln, in denen Sie „One-Produkten“ oder „zwei Produkte“ berichten werden können. Liest nicht sehr gut ... Einige lösen nur dies mit "ein Produkt (e)" oder "Anzahl der Produkte: (1)" und andere können andere Lösungen haben.

Die Dinge könnten in verschiedenen Sprachen noch komplexer sein! In Französisch, wenn Sie Null Produkte haben, würden Sie die Singularform, nicht die Pluralform verwenden! (Nullprodukt) Anderen Sprachen (Chinesisch, Japanisch) fehlen diese grammatikalischen Unterschiede oder es gibt mehr als zwei verschiedene Wörter, die etwas über die Anzahl der Produkte aussagen. (Ein Plural und ein Plural zum Beispiel.)

Aber um das einfach zu halten, konzentrieren wir uns auf die Sprachen, die sowohl Singular- als auch Pluralwörter enthalten.

Bei der Einrichtung eines neuen Projekts, das auch Berichte generieren muss, wie gehen Sie mit Singular- und Pluralwörtern um? Fügen Sie in Ihrer Datenbank zwei Namensfelder für Singular- und Pluralform hinzu? Fügen Sie im Code zusätzliche Regeln hinzu, um Wörter von Singular in Plural zu transformieren? Benutzt du andere Tricks?

Wenn Sie an einem Projekt arbeiten, das Singular- und Pluralformen verfolgen muss, wie gehen Sie damit um?

+0

iirc Arabisch hat spezielle Formen für Singular, Doppel und dann nur (mehr?) Plural! : S –

+0

In den verschiedenen Sprachen gibt es sehr unterschiedliche Pluralformen. Siehe: http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html – SimonSimCity

Antwort

9

Ich würde empfehlen, einen Blick auf gettext im Allgemeinen und ngettext insbesondere unter. Vielleicht sogar, wenn Sie Ihre Bewerbung nicht übersetzen. Gehen Sie einfach zu this part of the documentation. Es hat die Implementierung für mehr oder weniger alle Sprachen und selbst wenn Ihre Sprache der Wahl diese Unterstützung fehlt, hält Sie nichts davon ab, die Ideen zu leihen.

+0

Aber wie wäre es mit Produktnamen in einer Datenbank gespeichert? –

+1

Das gleiche - Speicherung von Singular/Plural-Paaren. Und im Falle der Übersetzung (was nicht Ihr Fall ist oder ist es?) Müssen Sie nur sicherstellen, dass sie entweder in .po gesetzt sind, wenn Sie gettext verwenden oder einen ähnlichen Algorithmus verwenden und es woanders speichern (natürlich macht es keine Sinn, Tausende von Produkten in .po-Datei zu setzen). –

+0

Nur über ein anderes Problem mit Datenbank-gespeicherten Produktnamen gedacht - es ist ziemlich einfach, Plural/Singular-Form zu behandeln, aber wenn es um Übersetzung geht, würde es ein Problem mit Fällen geben. Und der Versuch, sich am Nominativ festzuhalten, könnte sich als ebenso umständlich herausstellen wie "Anzahl der Produkte: N". –

0
Number of products: 1 
Number of products: 4 
Number of products: FILE_NOT_FOUND 

Der Versuch, natürliche Sprache zu verwenden, um quantitative Daten Berichterstattung ist einfach zu viel Aufwand.

+0

Ja, ich weiß. :-) Freu mich einfach und halte dies für eine wichtige Anforderung in der Reporting-Engine des Produkts, an dem du arbeitest. –

+3

Und seit zu viel Ärger hat die Menschheit gestoppt? –

+0

Awww ... Jetzt kann ich nicht aufhören, mich über die Pluralform der "Menschheit" Gedanken zu machen ... vielleicht "Mensch"? ;-) –

-4

Bei englischen Anwendungen ist es normalerweise am einfachsten und effizientesten, die Einzahl zu speichern und den Plural mithilfe einer Gruppe von if-Anweisungen zu erstellen.

if(count > 1){ 
    suffix = 's'; 
} 
+6

-1 Busse, Alumni usw. – MusiGenesis

1

Normalerweise würde ich meinen Text durch eine Art von Formatierer, die formatiert die Werte, die Sie an einen Menschen lesbaren Text anzeigen möchten senden. Dies könnte auch Ihren "Produkt" -Text ändern. Java hat hierfür die MessageFormat-Klasse, die solche Modifikationen unterstützt. Siehe die Beispiele in [1].

[1] http://java.sun.com/j2se/1.5.0/docs/api/java/text/MessageFormat.html

1

Lesen und implementieren this; melde dich zurück, wenn du fertig bist (in ein paar Jahren). Persönlich bin ich mit dem (s) Ansatz zufrieden;) (obwohl das natürlich nicht für alle Sprachen funktioniert).

+0

Nun, dieser Link zeigt deutlich die Komplexität von Singular/Plural Wörtern. Zeigt auch, dass die Anzahl der Formulare sogar von nur einer bis zu 6 verschiedenen Formen variiert! Ich mag diese Seite schon! :-) –

+2

Alex, dies - http://translate.sourceforge.net/wiki/l10n/pluralforms - sieht aus wie eine umfassendere Quelle für Pluralformen für verschiedene Sprachen. –

2

In Perl wird dies umfassend durch Lingua::EN::Inflect gelöst. Es verwendet ein großes Wörterbuch und behandelt sorgfältig alle Ausnahmen von Regeln. Es macht auch Dinge wie "a" oder "an" und behandelt auch Vergleiche!

Siehe the paper für die blutigen Details.

+1

Ein Problem mit dieser Referenz ist, dass es nicht sprachunabhängig ist, egal was man hier als * Sprache bezeichnet ;-) Das andere Problem ist, dass das Problem über die Pluralform des Nomens hinausgeht, da * * dieses Ding ist nannte den ganzen Satz (und da * sind diese Dinge ganze Sätze genannt). –

+0

Aber ich habe es als eine interessante Referenz upvote sowieso;) –

+0

@hacker: Sie haben recht - dieses Modul ist Englisch-spezifisch. Aber es geht sehr gut mit dieser Sprache um. –

0

Nur ein Update, CLDR hat jetzt mehrere Regeln für Sprachen und ICU hat eine Implementierung.