1

フォルダーの内容を一覧表示するスクリプトを翻訳したいと考えています。含まれているファイル、フォルダー、および合計サイズの概要が表示されます。これまでのところ、すべての文字列を を使用して翻訳しましたが、ここで立ち往生しており、複数の複数形を含む可能性gettextのある文字列の翻訳を解決するエレガントな方法を探しています。言うまでもないかもしれませんが、言語はそれぞれ違うので、文字列の連結は避けたいです。

$summary = sprintf(_('%1$s folders and %2$s files, %3$s %4$s in total'), $total_folders, $total_files, $total_size, $unit);

可能な状態 (0 のケースは意図的に省略されています):

  • 1フォルダ1ファイル、合計100キロバイト
  • 1 フォルダと 2 ファイル、合計 200 キロバイト
  • フォルダ2つとファイル1つ、合計100キロバイト
  • フォルダ2つ、ファイル2つ、合計200キロバイト

ngettext()の適切な置き換えになると思いますが_()、それを私の例と組み合わせることは頭を悩ませています。

4

2 に答える 2

0

複数形は翻訳の基本的な問題です。おそらく役立つ実装の例を次に示します: http://symfony.com/doc/current/components/translation/usage.html#pluralization

おそらく、彼らがsymfonyのために行った翻訳コンポーネントを採用することを検討すべきでしょう。

于 2014-11-25T22:56:42.243 に答える
0

解決策があります。しかし、ご存じないかもしれませんが、多くの言語には 3 つの複数形があります。

function plural($n, $f1, $f3, $f5)
{
    return $n%10==1&&$n%100!=11?$f1:($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$f3:$f5);
}
// for english
echo plural($x, 'monkey', 'monkeys', 'monkeys');
于 2014-11-25T23:01:30.830 に答える