QObject::tr()
数字を含む文字列を翻訳するために私が使用している関数には、次の2つの形式があります。
tr("There are %n foo(s)", 0, foo.size());
tr("%1: %2").arg(QLocale().toString(bar.size())).arg(bar.name());
これらは、同じ文字列でローカリゼーションと複数形化を実行する場合を除いて、文字列に数値が必要なほとんどの場合に対応します。もちろん、翻訳を分割することもできますが、その文字列がすべての言語の同じ場所で分割されるかどうかを推測する必要があります(ほとんどの場合、私が行う資格はありません)。
QLocaleのドキュメントには次のように記載されています...
QString :: arg()は、フォーマット文字列内の位置指定子に「L」が含まれている場合、デフォルトのロケールを使用して数値をフォーマットします(例:「%L1」)。
...したがって、2番目の形式は次のように書き直すことができます...
tr("%L1: %2").arg(bar.size()).arg(bar.name());
...そしてこれはあなたが最初のフォームを次のように書き直すことができることを示唆しています...
tr("There are %Ln foo(s)", 0, foo.size());
これはコンパイルされ、Linguistに複数形として表示されますが、これによって番号がローカライズされるかどうかは誰にもわかりませんか?どちらの方法でも、どのドキュメントにも何も書かれていません。