0

いくつかの属性とそのオプションをクラス Attributes に保存します。

public static $ethnicity        = array(0 => '-', 
                                        1 => 'Asian',
                                        2 => 'Black / African descent',
                                        3 => 'East Indian',
                                        4 => 'Latino / Hispanic',
                                        5 => 'Middle Eastern',
                                        6 => 'Native American',
                                        7 => 'Pacific Islander',
                                        8 => 'White / Caucasian',
                                        9 => 'Other');  

db ではなくコードで保持する理由は別の話です。poedit は動的な翻訳を読み取れないため、問題が発生しています。2 つのオプションがあります。

a) すべての配列値を 1 つのダンプ ファイルに入れます。このファイルは、poedit パーサーによってのみ使用されます。

_('Asian'), _('Black / African descent'), ...

このようにして、次の方法でビュー内の翻訳を呼び出すことができます。

echo _(Attributes::$ethnicity[3]));

b) コンストラクターを使用して、そこから gettext を呼び出すことができます。

class Attributes 
{ 

    public function __construct()
    {
        $this->ethnicity        = array(0 => _('-'), 
                                        1 => _('Asian'),
                                        2 => _('Black / African descent'),
                                        3 => _('East Indian'),
                                        4 => _('Latino / Hispanic'),
                                        5 => _('Middle Eastern'),
                                        6 => _('Native American'),
                                        7 => _('Pacific Islander'),
                                        8 => _('White / Caucasian'),
                                        9 => _('Other'));  
      //...      
    }                                    
}

このようにして、次の方法でビュー内の翻訳を呼び出すことができます。

$attr = new Attributes;
echo $attr->ethnicity[3]; 

今私の質問に:

このような属性が約 10 個あり、平均して 40 個のオプションがあるとします。したがって、これはすべて合わせて 400 個の配列ペアになります。このようにコンストラクトを使用すると、アプリケーションが遅くなりますか? これは、コンストラクターを呼び出すたびに、この属性値がビューに表示されていなくても、すべての配列値に対して gettext が呼び出されることを意味するためです。コンストラクターを使用しない場合、実際に使用される単一の属性値に対してのみ gettext が呼び出されます。

abテストをしましたが、違いがなかったので驚きました。しかし、私の感覚では、この方法でコンストラクターを呼び出すと速度が低下すると言うので、何かが欠けているのではないかと心配しています。

4

1 に答える 1

1

私は個人的には解決策 B を使い続けるでしょう。なぜなら、それはよりクリーンであり、数か月後でも何$attr->ethnicity[3]; ができるかを知っているからです。

それでも不明な場合は、ストレス テストを実行してみてください。コンストラクターを何度も呼び出してみてください。しかし、私の謙虚な意見は、大きな違いはないということです。特に、ライブアプリケーションで何度も呼び出す必要がない場合。gettext は高速になるように設計されています。

于 2012-10-07T20:17:17.977 に答える