数値1、2、3、...を「1st」、「2nd」、「3rd」、...に変換する簡単な方法はありますか?関数に言語を与えて持つことができるような方法でターゲットとする言語の正しい形式を返しますか? 標準 C++ (stl または boost OK)、MFC または ATL、win32 API、またはどこかからダウンロードできる小さな単一目的の無料ライブラリのいずれかです。ありがとう。
5 に答える
多くの言語では、この形式は、それが表す名詞の性別や大文字小文字などの文脈に依存し、言語が異なれば、正しい形式を決定できるようにするためにさまざまな種類の文脈情報が必要になるため、それが可能かどうかはまったく疑問です。
編集: たとえば、ポーランド語では、"5-ta klasa" (5 番目のクラス) 対 "5-ty miesiąc" (5 番目の月) 対 "w 5-tym miesiącu" (5 番目の月) です。
UnicodeサイトでCLDRリポジトリを検索しましたか?彼らがこの種のものを持っているかどうかはわかりませんが、おそらくそこにある最も包括的なロケールデータリポジトリなので、一見の価値があります。 http://www.unicode.org/cldr/
プロジェクトが大きすぎて自分でうまくいかないので、私はこれを研究するのにかなりの時間を費やしました。ICUライブラリは、この機能をある程度包括的な方法で提供する唯一のライブラリのようです(http://www.icu-project.org/apiref/icu4c/classRuleBasedNumberFormat.html)。しかし、私はそのような巨大なライブラリを組み込むことにあまり熱心ではありません。私は探し続けます、そして私はまだ提案を受け入れています。
あなたは C++ を使用しているので、すべての翻訳に GNU gettext (Windows ポートもあります) を使用するか、少なくとも彼らがどのように解決したかを理解できると思います。問題(すでに見つけましたが、より詳細に)とその解決策を説明する、複数形に関する関連するマニュアルページを次に示します。
http://www.gnu.org/software/automake/manual/gettext/Plural-forms.html
これは、仕事をするCodeProjectのコードの一部です。自分では試していません。