1

Drupal にあるものと似ています。

私の現在の関数定義は次のようなものです:

string t(string $singular, [string $plural, int $number, mixed $arg1, ...])

引数の順序は、このパターンに従う必要はありません。string $singular明らかな理由から、最初にする必要があるだけです。

それがどのように機能するかを示すいくつかの例:

  • 「こんにちは」を翻訳する:

    t('Hello')
    
  • 「こんにちは」を翻訳し、文字列をフォーマットします(私は with を使用vsprintfしていますfunc_get_args()

    t('Hello %s', $user)
    
  • 複数訳:

    t('%d apple', '%d apples', 5, 5)
    

    ここから問題が始まります。2 番目の引数が文字列で3 番目の引数が整数の場合、これは複数形の翻訳のリクエストであると想定しています。

    問題は、誤って単一の翻訳リクエストを傍受する可能性があることです。

    $user = 'Mary';
    t('%s, you need at least %d apples for me to take you srsly', $user, 420)
    

このような機能をより適切に実装し、このような衝突を回避する方法について何か提案はありますか?

4

2 に答える 2

3

代わりに、標準の _() と ngettext() を使用します。これは、xgettext シェル コマンドを介して収集されたすべてのローカライズ可能な文字列を取得できるためです。t() や nt() などの独自の関数名を使用して xgettext で抽出することもできます ( https://developer.mozilla.org/en/gettextの --keyword param を参照) 。すべきではありません) 2 つの関数を避けてください。

于 2012-05-26T21:11:24.810 に答える
2

引数が2つしかない場合、最初の引数は文字列で、2番目の引数は単純なケースではintですが、複雑なケースでは連想配列のようになります

array('plural_int' => 5, 'plural_str' => '%d apples', 'singular_int' => 10) 

また

array('singular_int' => array(10,20,30))
于 2012-05-26T21:05:14.357 に答える