完全な C++ i18n gettext() の「hello world」の例には、単純な固定文字列に対して機能する C++ コードがあります。現在、複数形で動作するサンプル プログラムを探しています。このコード例は 6 行を表示します。英語で正解は1つだけです。複数形を正しく処理しません。
cat >helloplurals.cxx <<EOF
// hellopurals.cxx
#include <libintl.h>
#include <locale.h>
#include <iostream>
#include <stdio.h>
int main (){
setlocale(LC_ALL, "");
bindtextdomain("helloplurals", ".");
textdomain( "helloplurals");
for (int ii=0; ii<5; ii++)
printf (gettext("Hello world with %d moon.\n"), ii);
}
EOF
g++ -o helloplurals helloplurals.cxx
./helloplurals
複数形の GNU gettext() は、言語が複数形を処理するさまざまな方法を説明しています。たとえば、次のようになります。
- 韓国語 - プラス記号なし
- 英語 - 2 つの形式、1 つだけに使用される単数形
- フランス語 - 0 と 1 に使用される単数形の 2 つの形式
- ポーランド語 - 3 つの形式、1 と 2、3、または 4 で終わるいくつかの数字の特殊なケース
私の期待は、上記のすべてのケースと、ここにリストされていないいくつかのバリエーションに対して、コードが (メッセージ カタログが与えられた場合に) 機能することです。英語で実行した場合の正しい出力は次のようになります。
Hello world with 0 moons.
Hello world with 1 moon.
Hello world with 2 moons.
Hello world with 3 moons.
Hello world with 4 moons.