いくつかの属性とそのオプションをクラス 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テストをしましたが、違いがなかったので驚きました。しかし、私の感覚では、この方法でコンストラクターを呼び出すと速度が低下すると言うので、何かが欠けているのではないかと心配しています。