Gibt es eine einfache Möglichkeit, die Zahl 1, 2, 3, ... in "1st", "2nd", "3rd", ... zu konvertieren, und zwar so, dass ich die Funktion a geben kann Sprache und habe es mir die richtige Form für die Sprache, die ich anvisiere? Entweder Standard C ++ (STL oder Boost OK), MFC oder ATL, Win32 API oder eine kleine, single-purpose und freie Bibliothek, die ich von irgendwo herunterladen kann. Danke.
Ich bezweifle, dass es überhaupt möglich ist, da diese Form in vielen Sprachen vom Kontext abhängt, wie das Geschlecht oder der Fall des Nomens, und verschiedene Sprachen erfordern unterschiedliche Arten von Kontextinformationen, um die richtige Form bestimmen zu können .
EDIT: z. in polnischer Sprache ist es "5-ta klasa" (5. Klasse) gegen "5-ty miesiąc" (5. Monat) gegen "w 5-tym miesiącu" (im 5. Monat).
Ich habe viel Zeit damit verbracht, das zu erforschen, weil es ein zu großes Projekt ist, um mich selbst richtig zu machen. Es sieht so aus, als ob die ICU-Bibliothek die einzige ist, die diese Funktionalität in einer ziemlich umfassenden Weise bereitstellt ( Ссылка ). Ich bin nicht so scharf darauf, eine solche riesige Bibliothek einzubauen. Ich werde weiter schauen und bin immer noch offen für Vorschläge.
Haben Sie das CLDR-Repository auf der Unicode-Site nachgeschlagen? Ich weiß nicht, ob sie so etwas haben, aber da es wahrscheinlich das umfassendste Locale Data Repository ist, ist es wahrscheinlich einen Blick wert. Ссылка
Da Sie C ++ verwenden, nehme ich an, Sie könnten GNU gettext (es gibt auch einen Windows-Port) für alle Übersetzungen verwenden oder zumindest die Idee bekommen, wie sie es gelöst haben. Hier ist die relevante Handbuchseite zu den Pluralformen, die das Problem (das du bereits gefunden hast, aber im Detail) und ihre Lösung erklärt:
Hier ist der Codecode in CodeProject, der die Aufgabe erfüllt. Habe es nicht selbst versucht.